windows系統配置Nginx使用SSL證書實現Https反向代理


前言

Nginx反向代理服務,可以代理接收請求,並把請求轉發到設置好的其他服務器上。

例如,Nginx服務器為 100.101.102.103,A服務為 100.101.102.104 ,通過Nginx配置文件,可以使Nginx服務器代理接收訪問A服務的請求,然后轉發到A服務上。

通過SSL證書配置可以是Nginx具有接收https的能力,然后通過http轉發到A服務上;

或者接收Http請求,通過Nginx配置,強制轉成Https請求轉發到A服務上。

Nginx可以代理多個服務。

本文使用的是windows系統服務器操作,SSL證書為騰訊雲的免費SSL(下文有詳細步驟)。

一、安裝Nginx

Nginx下載官網地址:http://nginx.org/en/download.html

此次使用的是1.18.0版本。

下載后找位置解壓

然后在該目錄下運行命令窗口(可以在文件夾地址欄輸入cmd進入)

輸入nginx.exe回車提示報錯

nginx: [emerg] CreateDirectory() "E:\tools\Nginx\nginx-1.18.0/temp/client_body_temp" failed (3: The system cannot find the path specified)

原因是沒有在nginx目錄里找到temp文件夾,手動新建一個。

重新啟動,瀏覽器輸入localhsot 進入nginx頁面成功即為安裝成功!

二、申請SSL證書

騰訊雲可以申請域名型免費SSL 騰訊雲

立即購買

上面需要注意的提示為:僅支持綁定一個二級域名或者子域名,例如 tencent.com、cloud.tencent.com、dnspod.cloud.tencent.com的其中之一 。

也就是說申請的一個SSL只能綁定一個域名,但是可以多次申請綁定域名的二級域名或者子域名。

可以根據需要綁定域名或者二級域名或者子域名。例如我們申請的SSL所綁定的域名為 test.com

下一步需要解析驗證,就是在域名所在的網站上根據騰訊雲給出的參數去解析一條記錄,來證明這個域名的使用權。

例如我的域名是在美橙互聯上,地址:https://www.cndns.com

則需要在域名解析這里添加一條記錄,主機名填寫騰訊雲提供的主機記錄字段,記錄類型選擇TXT,記錄值填寫騰訊雲提供的記錄值字段。

然后保存后等待生效,一般在一個半小時內,然后等待騰訊雲簽發即可。

在證書詳情里下載證書文件

三、Nginx配置SSL證書實現Https代理

實現代理接收https請求,把請求轉發到其他服務的http接口上。

(例如服務A在100.101.102.104:8080上,只允許http訪問,nginx 服務在 100.101.102.103:8080 上,通過nginx配置SSL證書來實現接口https的請求,然后把請求代理發送http請求到A服務上)。

把 test.com.key 和 test.com_bundle.crt 兩個文件放到nginx安裝目錄下的conf目錄里(和nginx.conf放一起)

修改 nginx.conf 配置文件:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       81;
        server_name  test.com;

        return 301 https://$host$request_uri;
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    # HTTPS server
    #
    server {
        listen       8080 ssl; # nginx所使用的端口
        server_name  test.com; # SSL 證書綁定的域名

        ssl_certificate      test.com_bundle.crt;
        ssl_certificate_key  test.com.key;
ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m;
ssl_ciphers CDHE
-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass http://100.101.102.104:8080; # 需要轉發到的服務地址 A服務的地址 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; } } }

重啟nginx或者刷新nginx配置文件即可。

四、測試

例如A服務有一個接口為:http://100.101.102.104:8080/login/index

則測試https://test.com/login/index

看是否和http://100.101.102.104:8080/login/index訪問一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM