当前位置: 首页>后端>正文

django内部集成nginx做转发 django使用nginx

Django使用nginx部署


本文默认已经安装django和pip

Django使用nginx部署需要用到python uwsgi模块。 可能遇到的问题:需要安装pythonX.Y-dev,安装uwsgi编译时依赖。Centos叫做pythonX.Y-devel。

pip install uwsgi

1.安装完成之后一个基本的测试,测试uwsgi是否工作正常:
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

使用uwsgi启动

uwsgi --http:8000 --wsgi-file test.py

参数含义:

  • http:8000 使用http协议占用8000端口
  • wsgi-file test.py 加载文件 test.py

在浏览器中访问 http://127.0.0.1:8000 应该能够看到 hello world显示在网页上。 程序访问流程:网页->uwsgi->python ** 目前为止,uwsgi工作正常。

2.测试Django项目

Django目前的项目结构大致如下:

website - Django startserver生成的整体项目文件

manage.py website - Django startserver生成的整体项目文件 app - Django startapp生成的应用项目文件

先确保Django项目运行无异常,这时应该能够看到Django访问正常的界面

python manage.py runserver 0.0.0.0:8000

如果 http://127.0.0.1:8000 访问正常,那么接下来使用uwsgi启动Django

uwsgi --http :8000 --module website.wsgi

  • module website.wsgi 加载wsgi模块,此命令需要在website目录下执行,其他目录加全路径也会报内部错误

** 目前为止,uwsgi+django工作正常。

3.测试nginx+wsgi

安装nginx,创建website.conf配置文件,并放置到文件夹/etc/nginx/servers或者/usr/local/etc/nginx/servers下,为什么要放到此路径下,是因为/etc/nginx/nginx.conf或者/usr/local/etc/nginx/nginx.conf中有一句include servers/*,这样配置比较方便。

# website.conf
upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # 后面用到
    server 127.0.0.1:8000; # 监听的ip及端口
}

server {
    listen      9000; # 监听端口9000
    server_name 127.0.0.1;
    charset     utf-8;

    client_max_body_size 75M;   # 最大上传文件大小

    # 测试文件夹
    location /media  {
        alias /path/to/your/website/media;  # 静态文件文件夹
    }

    location / {
        uwsgi_pass  django;
        include     /path/to/your/mysite/uwsgi_params; # 一般可以直接使用nginx路径下的uwsgi_params,路径一般在/etc/nginx/uwsgi_params或者/usr/local/etc/nginx/uwsgi_params
    }
}

此时文件结构

website - Django startserver生成的整体项目文件

manage.py website - Django startserver生成的整体项目文件 app - Django startapp生成的应用项目文件 media - 静态文件夹,可以向其中添加一些图片测试用

启动nginx

nginx

打开网页 http://127.0.0.1:9000/media/pic.png 应该能够看到一张图片 ** 目前为止 nginx工作正常 启动uwsgi

uwsgi --socket :8000 --wsgi-file test.py

  • socket :8000 使用uwsgi协议,端口8000

与之前的不同是,此处使用socket通讯,因为nginx与uwsgi的协议必须使用socket 打开网页 http://127.0.0.1:9000 应该能够hello world界面。 打开网页 http://127.0.0.1:8000 应该看到网页加载失败。

** 目前为止 nginx+uwsgi工作正常

4.django+uwsgi+nginx

使用网络端口sock不是很好,更好的办法是使用文件socket,下面使用文件socket启动。 使用uwsgi启动django

uwsgi --socket website.sock --wsgi-file test.py

  • website.sock会在命令执行的时候自动创建

同时修改 website.conf中的文件

upstream django {
    server unix:///path/to/your/mysite/mysite.sock; # 连接uwsgi启动时创建的website.sock
    # server 127.0.0.1:8000; # 监听的ip及端口
}

接下来使用uwsgi启动django,推荐也采用配置文件的方式: 配置文件如下django.ini

[uwsgi]
chdir = /path/to/your/mysite/   # 工作路径
module = website.wsgi           # 文件不存在,这样写就行
socket = /path/to/your/mysite/website.sock  # 文件可以不存在,uwsgi启动时创建
chmod-socket = 664                          # 没有权限的时候添加,没有权限问题可以去掉
master = true                               # 是否有守护进程
processes = 8                               # 启动多少个进程
vacuum = true                               # 退出的时候是否删除运行时产生的临时文件
daemonize = /path/to/your/mysite/log.log    # 指定日志文件,启动的时候后台启动
pidfile = /path/to/your/mysite/pidfile.pid  # pid文件,感觉十分必要,不然uwsgi关闭非常费劲,指定pid文件之后可以使用uwsgi --stop /path/to/your/mysite/pidfile.pid 关闭uwsgi启动的进程

使用uwsgi启动django项目:

uwsgi –ini /path/to/your/mysite/django.ini

至此打开 http://127.0.0.1:9000 就能看到django正常的界面。


https://www.xamrdz.com/backend/3m81923198.html

相关文章: