Centos7+ nginx + uwsgi + Django 配置https,包含一些踩过的坑

首先准备好:

  1. 编写好的Django项目
  2. 购买服务器,安装centos(我使用腾讯云+centos7.4)
  3. 安装nginx
  4. 安装uwsgi
  5. 申请ssl证书并下载
  6. 开始配置

 

配置步骤:

1、Django同步到linux:使用远程连接软件或者git都行,pycharm可以直接连接然后同步,具体:

2、配置uwsgi和Django的连接:

    (1)在Django的manage.py同级目录中新建:django_uwsgi.ini

touch django_uwsgi.ini

    (2)编写django_uwsgi.ini:

[uwsgi]

# 项目路径
chdir   = /root/django1
# 项目里wsgi.py文件相对路径
module  = django1.wsgi
# 挂在9222端口
http-socket = :9222
mater   = True
# 进程线程数
processes = 4
threads = 1
vacuum  = True

# 如果要后台跑这个程序的话,配置下面3行:日志路径、日志大小、进程号路径
daemonize = %(chdir)/log/uwsgi-9222.log
log-maxsize = 1024*1024*1024
pidfile = %(chdir)/pid/uwsgi-9222.pid

    (3)在你写的日志路径和进程号路径创建对应的日志和pid文件夹,我这用的是manage.py的同级目录

mkdir log
mkdir pid

    (4)启动uwsgi:

uwsgi --ini django_uwsgi.ini

出现[uWSGI] getting INI configuration from django-uwsgi.ini就成功启动了   

    (5)查看uwsgi进程,也可以看到启动了(启动了多条进程是你自己设置的,可以在(2)uwsgi配置里改)

ps aux | grep uwsgi

    (6)如果要停止服务:(9222是端口号,自己设置的)

uwsgi --stop pid/uwsgi-9222.pid

坑:如果更改了Django项目里的代码,最好先关掉,再改,再启动,不然可能会没法重启。

 

3、配置nginx到uwsgi的连接:

    (1)首先启动uwsgi,查看进程号和pid确定启动成功,如图:

uwsgi --ini django_uwsgi.ini
cat pid/uwsgi-9222.pid
ps -aux | grep 32923

 

    (2)到nginx目录,修改配置文件nginx.conf(我直接yum装的nginx所以在/etc/nginx),修改和添加若干个server节点设置反向代理,完整代码在下面:

5、配置nginx静态文件目录和日志文件:如下完整代码配置,我写了注释(#)

6、配置https的ssl证书和转发端口配置:如下完整代码配置。

修改nginx.conf的配置文件

vim nginx.conf

配置代码: 在http{}中修改和添加如下内容: 

    upstream uwsgi{
        server 127.0.0.1:8888;
        # Django项目的端口,用uwsgi启动它,这里做配置,看下面配置proxy_pass的时候详细说这里用来干嘛 
    }

    server{
         # 监听了80端口,如果直接访问http的话,转发到https
        listen 80;
        server_name .ifeels.cn;
       return 301 https://ifeels.cn$request_uri;
    }

    server {
        # 监听443默认https端口
        listen       443 ssl default_server;
        listen       [::]:80 default_server;

        # 域名名称
        server_name  .ifeels.cn;
        charset utf-8;

        # ssl证书信息(申请下来的ssl证书里的Nginx包里)和版本
        ssl_certificate     /etc/nginx/1_www.ifeels.cn_bundle.crt;
        ssl_certificate_key /etc/nginx/2_www.ifeels.cn.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

        # 日志文件存在这
        access_log   /var/log/nginx/nginx-uwsgi.log;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        # 如果是默认访问域名,内部到8888端口去找,等同于http://uwsgi
        location / {
            proxy_pass http://127.0.0.1:8888;
        }
        # 配置静态文件的目录,记得不要把网站配置在root目录下,除非你把root目录的权限更改成755
        location /static {
            alias /root/ifeels/Ifells/static;
        }
    }

如果要部署两个项目:

  1. uwsgi配置第二个项目的信息

同样在manage.py同级目录新建:项目名_uwsgi.ini文件,写入:

[uwsgi]

chdir   = /root/aaaa
module  = aaaa.wsgi
http-socket = :9222
mater   = True
processes = 4
threads = 1
vacuum  = True

daemonize = %(chdir)/log/uwsgi-9222.log
log-maxsize = 1024*1024*1024
pidfile = %(chdir)/pid/uwsgi-9222.pid
  1. 设置第二个项目的转发端口和静态文件目录
    upstream uwsgi{
        server 127.0.0.1:8888;
        # Django项目的端口,用uwsgi启动它,这里做配置,看下面配置proxy_pass的时候详细说这里用来干嘛 
    }

    server{
         # 监听了80端口,如果直接访问http的话,转发到https
        listen 80;
        server_name .ifeels.cn;
       return 301 https://ifeels.cn$request_uri;
    }

    server {
        # 监听443默认https端口
        listen       443 ssl default_server;
        listen       [::]:80 default_server;

        # 域名名称
        server_name  .ifeels.cn;
        charset utf-8;

        # ssl证书信息(申请下来的ssl证书里的Nginx包里)和版本
        ssl_certificate     /etc/nginx/1_www.ifeels.cn_bundle.crt;
        ssl_certificate_key /etc/nginx/2_www.ifeels.cn.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

        # 日志文件存在这
        access_log   /var/log/nginx/nginx-uwsgi.log;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        # 如果是默认访问域名,内部到8888端口去找,等同于http://uwsgi
        location / {
            proxy_pass http://127.0.0.1:8888;
        }
        # 配置静态文件的目录,记得不要把网站配置在root目录下,除非你把root目录的权限更改成755
        location /static {
            alias /root/ifeels/Ifells/static;
        }

        # 这一块是我又开启了一个Django项目,端口9222,然后用了同一个ssl证书配置https
        location /msbm{
            proxy_pass   http://www.ifeels.cn:9222/msbm/;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            alias /root/msbm/static;
        }
        # 第二个项目静态目录
        location /msbm/static { 
            alias /root/msbm/static;
        }
    }

配置多个静态文件:

在配置的第二个项目下面,写alias,和静态目录,然后请求静态文件就用域名/project2/static/....请求

踩过的坑

  1. uwsgi和Django的连接:如果更改了Django项目,最好手动关闭再改再开启
  2. nginx的nginx.conf配置:监听的端口,转发的端口,ssl处理,static处理!!!
  3. nginx的static处理:不要放在root下,如果要放在root下必须给755权限

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章