[Nginx]反向代理Node將3000端口訪問轉換成80端口(https443端口)
@Author GQ 2017年05月15日
最近剛接觸node,用express搭建,node默認是3000端口,當然也
可以自己改,但是服務器默認是80,然而將node改成80並沒有權限
,所以nginx將是最好的選擇!
2017年07月26日
由於需要支持微信小程序,必須改成https請求,
所以記錄下:
http => https
2017年07月31日
微信小程序居然提示不支持TLSv1,然而我的Nginx1.0.11寫上TLSv1.1 和TLSv1.2還報錯,更新下Nginx版本就好了(現在是1.12.1)。
目的
- 原本域名訪問形式:
http://xx.xxx.xxx.xx/
- 用node搭建後訪問:
http://localhost:3000
(假設是3000端口) 部署到服務器上後:
http://xx.xxx.xxx.xx:3000
阿里雲默認訪問端口爲80 ,瀏覽器輸入:
http://xx.xxx.xxx.xx
等於http://xx.xxx.xxx.xx:80
- 所以,現在要通過
nginx
改成訪問域名即是 3000端口的內容:
http://xx.xxx.xxx.xx
等於http://xx.xxx.xxx.xx:3000
安裝工具
- 通過
brew
安裝nginx
brew install nginx
啓動服務
//mac
sudo nginx
//win
C:\server\nginx-1.0.2>start nginx
其他命令
//停止
C:\server\nginx-1.0.2>nginx -s stop
C:\server\nginx-1.0.2>nginx -s quit
//重載
C:\server\nginx-1.0.2>nginx -s reload
//查看版本
C:\server\nginx-1.0.2>nginx -v
**注:**stop是快速停止nginx,可能並不保存相關信息;quit是完整有序的停止nginx,並保存相關信息。
測試
- 打開瀏覽器輸入
http://localhost:8080
- 配置文件
如果要進行配置可以打開/usr/local/etc/nginx/nginx.conf
文件進行修改,比如配置域名,端口號等等。
- 檢測配置是否正確(注意在nginx目錄下)
//mac
sudo nginx -t
//win
nginx.exe -t -c conf/nginx.conf
配置文件
...省略...
server {
#阿里服務器是默認80
listen 80;
#這裏服務名稱 遠程寫域名,本地寫localhost
#server_name abc.com www.abc.com;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#node用的3000端口就這樣寫
proxy_pass http://127.0.0.1:3000;
root html;
index index.html index.htm;
}
...省略...
Nginx配置支持https
首先了解一下http和https的區別:
1. http是超文本傳輸協議的明文傳輸,不安全;https則是ssl加密傳輸協議,安全;
2. https協議需要申請證書;
3. http默認端口80;https默認端口443
什麼公鑰和私鑰,加密和解密就不說了,下面看具體實現:
阿里免費證書鏈接地址 點擊
購買
選擇圖中配置即可顯示0元立即購買
- 注意此證書有效期1年
然後去控制檯 安全/證書服務
下查看和提交併且等待簽發,一般還是很快的1天內就下來了。
這是阿里一個已簽發的證書,我使用的是Nginx
配置,如下:
找到nginx
的安裝目錄,新建一個cert
文件夾,將下載的文件全部複製進去(xxx.pem和xxx.key)
然後找到conf/nginx.conf
文件打開編輯Http Server 那段帶#註釋掉的內容(阿里雲有這段內容直接複製改一下即可)
#HTTPS server
server {
listen 443 ssl;
server_name 這裏是你的域名www.baidu.com;
ssl_certificate ../cert/xxx.pem;
ssl_certificate_key ../cert/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers 這裏填的阿里雲生成的一長串;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:3000;
root html;
index index.html index.htm;
}
}
然後保存。
然後重啓, 在nginx根目錄路下執行命令行nginx -s reload
注意 : 我用的nginx版本是1.0.11的,ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
這一行會一直報錯:
提示說 invalid TSLv1.1
或者invalid TSLv1.2
所以直接刪掉後兩個TSL版本改爲ssl_protocols TLSv1;
可以正常使用;
- 再次執行重啓命令即可