前言
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訪問一致。