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權限

 

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