[Nginx]反向代理Node將3000端口訪問轉換成80端口

[Nginx]反向代理Node將3000端口訪問轉換成80端口(https443端口)

@Author GQ 20170515日  

最近剛接觸node,用express搭建,node默認是3000端口,當然也
可以自己改,但是服務器默認是80,然而將node改成80並沒有權限
,所以nginx將是最好的選擇!

20170726日
由於需要支持微信小程序,必須改成https請求,
所以記錄下:
    http => https

20170731日
微信小程序居然提示不支持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; 可以正常使用;

  • 再次執行重啓命令即可

但由於微信小程序提示說明不支持 TSLv1 低版本,還是辛苦下 升級Nginx 按照之前的配置即可。

發佈了69 篇原創文章 · 獲贊 16 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章