Virtualenv 中 Nginx + uWSGI 部署 Django 实战备忘(3)

如果前面的步骤都没问题了,这一步只要把配置文件写正确,就没什么问题了。记得在虚拟环境中安装所有的 project 需要依赖包。
 下面是一个简单示例:

uwgsi 配置

uwsgi 支持多种形式的配置,可以执行 uwsgin 直接带参数,可以用 xml 文件配置等等,这里用 ini 文件配置。
 新建一个 ini 文件,比如命名为:'dj_uwsgi.ini'
[uwsgi]
socket = :9090
chdir = /home/sharpcj/PythonProjects/testsite    # 切换到 project 目录
env = DJANGO_SETTINGS_MODULE=testsite.settings   
module = testsite.wsgi
master = true
wsgi-file = testsite/wsgi.py
home = /home/sharpcj/.virtualenvs/testsite_evn  # python 及相关依赖包所在 path

touch-file = testsite/wsgi.py

processes = 4
threads = 2

chmod-socket = 664
vacuum = true

注意:为了配合 nginx 工作,端口协议是 socket , 如果换成 http ,则可以直接运行uwsgi,就能通过浏览器访问页面了。命令为 uwsgi dj_uwsgi.ini。

nginx 配置

在 /etc/nginx/conf.d/ 下创建 testsite.conf 文件:
server {
    listen        9999;
    server_name    127.0.0.1
    charset UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log      /var/log/nginx/myweb_error.log;

client_max_body_size 75M;

location /media  {
        alias /home/sharpcj/PythonProjects/testsite/media;
    }
 
    location /static {
        alias /home/sharpcj/PythonProjects/testsite/static;
    }
 
    location / {
        uwsgi_pass  127.0.0.1:9090;
        include    /etc/nginx/uwsgi_params;
    }
 }

listen 指定的是nginx代理uwsgi对外的端口号。

server_name 网上大多资料都是设置的一个网址(例,),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。
    include uwsgi_params;

uwsgi_pass 127.0.0.1:8000;

include 必须指定为 uwsgi_params ;而 uwsgi_pass 指的本机IP的端口号与 dj_uwsgi.ini 配置中的文件中的必须一致。

此时启动 nginx 服务,并启动 uwsgi 服务,即可通过 ip:9999 访问网站。
 通过这个IP和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。

ps: 这个过程本应不算复杂,前天花了一下午时间没搞定,昨天又花了一下午时间才搞定。网上搜到的文章比较乱,有些太简单的看不懂,有些又太啰嗦的不知道核心的几步是什么,有些又因为版本不对,或者环境不同,不能成功,希望本文能帮到后面的人。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f7703eabfd81947935f120442b994799.html