1. 程式人生 > 其它 >Django+Vue+Nginx+Https域名代理訪問

Django+Vue+Nginx+Https域名代理訪問

Django+Vue使用Nginx實現Https域名的安全訪問

前端 VUE

  • 前端訪問自身域名: https://demo.com,後序使用 Nginx 代理至後端
    直接訪問後端https:api會無證書認證:NO_SSL_Authentication_INVALID

後端 Django

  • 使用sslserver模組啟動專案,使其滎api轉為https
    安裝:python install django-sslserver
    匯入setting.py: INSTALLED_APPS 'sslserver',
    允許主機ip:ALLOWED_HOSTS = ['*']
    啟動django:python manager.py runsslserver

Nginx代理

    server {
        listen    443    ssl;  # 監聽ssl 埠 443
        server_name  mydemo.com;   # 監聽伺服器域名

        # 指定域名安全證書:
        ssl_certificate    cert.pem;   # 將證書放在conf目錄下
        ssl_certificate_key    cert.key;    # 將證書放在conf目錄下
        ssl_protocols    TLSv1    TLSv1.1   TLSv1.2;
        ssl_ciphers    HIGH:!aNULL:!MD5;
        ssl_session_timeout    5m;

        # 代理本地vue專案
        location / {
            root   html;   # 專案所在檔案
            index    index.html  index.htm;  # 首頁檔案 
        }
        
        # 反向代理後端地址 :以此需要後端服務以api開頭
        location /api {
            proxy_set_header    X-Real-IP   $remote_addr;
            proxy_pass       https://localhost:8080;  # 後端ip:埠
        }
    }

    # 80埠重定向443
    server {
        listen    80;
        server_name    mydemo.com;    
        rewrite  ^/(.*)$  https://$host$1 permanent;   
    }

基礎資訊

常見異常:

  • 瀏覽器 F12,API請求報錯:Mixed-content;
    原因:後端為http地址,前端請求https;兩者互不通。
    處理:後端使用sslserver啟動後端 https模式

  • 報錯2:net::ERR_SSL_PROTOCOL_ERROR
    原因:前端https 訪問後端https介面沒有證書認證。
    處理:使用nginx代理至後端。