發表於2017/6/23 9:06:30 721人閱讀html
分類: WEB開發 Nginx前端
/**僅記錄本身的學習歷程,爲之後的本身留一個參考**/node
最近在倒騰微信小程序,研究小程序怎麼和服務器通訊,上一篇博客裏經過nginx實現了http的二級域名轉發,結果發現https實現二級域名轉發又是另外一會事,心累啊nginx
目的:https://abc.com訪問主域名,使用nginx將訪問https://shop.abc.com二級域名的請求轉發到https://abc.com:3000端口小程序
1.給域名搞個ssl證書微信小程序
我偷懶直接從阿里雲申請了一個免費的證書,阿里雲的證書服務裏面有介紹如何使用證書,惟一要注意就是阿里雲的免費證書只能對一個域名有效,即無論你是主域名仍是二級域名都須要單獨申請一個ssl證書,不然不能使用https訪問。服務器
2.主域名配置nginx微信
找到nginx目錄下的nginx.conf文件,進行以下配置,和http服務的配置相似,多添加一個證書服務session
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
server {tcp listen 443 ssl; server_name abc.com; server_name_in_redirect off;
ssl_certificate cert/xxx.pem; #添加證書服務 ssl_certificate_key cert/xxx.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { tcp_nodelay on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; root html; index index.html index.htm; } } |
https_1.txt
3.二級域名配置nginx
https的轉發要麻煩一點,由於ssl證書不同,因此不能在主域名的server中進行二級域名轉發。找到nginx目錄下的nginx.conf文件,在主域名server下面增長一個server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
server { listen 443 ssl; server_name shop.abc.com; server_name_in_redirect off; #能夠設置獨立的ssl認證 ssl_certificate cert/xxx.pem; ssl_certificate_key cert/xxx.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { tcp_nodelay on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://abc.com:3000; } } |
https_2.txt
對於爲何二級域名裏面轉發的是http地址,我是這麼理解的:若是Nginx做爲前端代理的話,則後臺服務器根本不須要本身處理 https,全是Nginx處理的。用戶首先和Nginx創建鏈接,完成SSL握手,然後Nginx 做爲代理以 http 協議將請求轉給 後臺服務器 處理,Nginx再把後臺服務器 的輸出經過SSL 加密發回給用戶,這中間是透明的,因此後臺服務器只是在處理 http 請求而已。所以,這種狀況下只須要配置 Nginx 的SSL 和 Proxy。能夠參考SSL證書與Https應用部署小結這篇文章
4.重啓nginx
/安裝路徑/sbin/nginx -t
/安裝路徑/sbin/nginx -s reload
tips:這是我目前的解決方法,應該還有其它更好的方法,歡迎你們指正。