經過nginx實現https以及https二級域名轉發

經過nginx實現https以及https二級域名轉發

發表於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;

}

}

 來自CODE的代碼片

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;

}

}

 來自CODE的代碼片

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:這是我目前的解決方法,應該還有其它更好的方法,歡迎你們指正。

相關文章
相關標籤/搜索