Nginx部署Https 443轉發,配置方式和採坑記錄

今天星期天,在家閒着,就想弄弄nginx。我用的Nginx版本爲1.1.7。服務器爲WindowsServer2019DataCenter。

之前在某個項目中由於跨域請求,用nginx 代理解決過。所以對nginx印象不錯。實用的好工具。

1、首先去阿里雲或者騰訊雲申請一個免費一年的SSL證書。申請很快不需要錢。具體方式百度一堆。

2、現在證書在服務器上部署,根據你的Web容器有不同類型的證書。我這裏下載的是Nginx版本的,因爲我測試是在Nginx中攔截443進行其他內部轉發,所以在Nginx中使用。

3、Nginx配置文件Conf配置項:

# HTTPS server
	server {
        listen 443 ssl http2;
        server_name www.XXXXX.cn;
        
        ssl_certificate     /cert/nginx/nginx_www.XXXXX.cn.pem;
        ssl_certificate_key /cert/nginx/nginx_www.XXXXX.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on;
         
        access_log logs/XXXXX/access.log;
        error_log  logs/XXXXX/error.log;

        location / {
            root   html;
            index  index.html index.htm;
        }             

        location /shop {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade"; 
            proxy_pass_header Set-Cookie;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_redirect off;

            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "POST, GET,PUT,DELETE, OPTIONS";
            add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
            add_header Access-Control-Allow-Credentials true;
            

            proxy_pass http://localhost:8092/;
        }

    }

配置過程中有幾個地方需要注意的:

3.1、配置443攔截的域名和方式,注意攔截域名。

3.2、配置SSL證書的位置,這裏的位置有點坑,一定要注意,當前在服務器上Nginx在C:/Nginx/ 目錄中,證書在C:/Cert/目錄中,但是經過幾次測試,發現這個路徑,不能寫C:/Cert/XXX證書的路徑,系統會提示:

BIO_new_file() failed (SSL: error:0200107B:system library:fopen:Unknown error:fopen

明顯路徑找不到,文件無法訪問打開,如果將證書放到Nginx目錄下面,寫相對於Nginx.exe的路徑,也是相同的提示。反正總是路徑不對,無法方法。

後來經過查看Nginx啓動報錯日誌,發現這個路徑是相對於C:/ 的一個相對路徑,從C盤根目錄下配置,路徑中無須保留C:/這樣的字符,最後實驗成功。

參考文章:https://blog.csdn.net/ken_ding/article/details/78929551

3.3、日誌配置路徑相對於Nginx.exe路徑,路徑爲全路徑,中間有文件夾不存在的需要提前創建好,不然啓動會報出異常。

經過上述步驟配置,啓動Nginx後,用https 訪問域名,會顯示Nginx頁面,說明攔截配置成功。

 

4、配置轉發內部網站,是用戶訪問系統時還是顯示Htpps網站,並且是安全的。

location /shop {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade"; 
            proxy_pass_header Set-Cookie;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_redirect off;

            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "POST, GET,PUT,DELETE, OPTIONS";
            add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
            add_header Access-Control-Allow-Credentials true;
            

            proxy_pass http://localhost:8092/;
        }

關鍵地方標註:

4.1、攔截域名的子地址,這樣能做到,一個域名下掛接多個子系統,並且都從這個域名下轉發。

4.2、代理內部系統的轉發方式,和跨域請求配置,這裏看自己項目需要。

4.3、最後是關鍵的代理轉發內部地址:配置內部系統配置,這裏標註的以“/”結尾和不以“/”,差別很大,具體差別描述,看下面文章,這裏不贅述了。總之帶“/”,在直接轉發了。沒有拼接 shop/攔截地址,不帶“/”,則在轉發過程中會攜帶攔截的shop/ 進行一起轉發。

參考文章:https://blog.csdn.net/Cz_csdn/article/details/104419708

可以在自己內部系統訪問方式上面加上/shop的虛擬路徑就可以,完美解決轉發後的路徑問題了。

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