1. 程式人生 > >NodeJS與Nginx共用80埠

NodeJS與Nginx共用80埠

Apache和Nginx通常都會使用預設的HTTP請求的80埠。但我們知道,一旦開啟了Nginx後,NodeJS再去監聽80埠就會發生錯誤。那麼,我們該如何解決這個問題呢?

接下來,以最近釋出的一個個人博站為例。

在我的阿里雲伺服器上已經開啟了Nginx服務,並且該域名下已經有對應的專案在跑。而此時,我的博站是採用NodeJS編寫的,監聽的埠是8090埠。要實現NodeJS能夠監聽到80埠,可以採取的一種簡單的方法是,將80埠反向代理到8090的埠上,這樣,所有傳送到80埠的請求都會重定向到8090;

首先,我在阿里雲的域名解析上先配置了kingsley.allenzhan.top 這個子域名。然後在我的Nginx裡的vhost裡建立了一個king.conf檔案,並寫入相應的配置。

如下


其中

location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://127.0.0.1:8090/;
            proxy_set_header X-NginX-Proxy true;
        }

是將發往 kingsley.allenzhan.top 的請求 重定向到 NodeJS監聽的 8090 埠上。

但是,我們會發現,路由是成功了,但是靜態檔案卻找不到了。所以,還需要配置以下的路徑

 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            root    /application/nginx/html/king/blogs/;
            expires 30d;

        }

 location ~ .*\.(js|css)?$
        {
            root    /application/nginx/html/king/blogs/;
            expires 12h;
        }

/application/nginx/html/king/blogs/這個路徑是存放部落格專案的靜態資源的位置。

寫入配置後,儲存。然後使用命令nginx -s reload 重啟Nginx。這樣,再訪問kingsley.allenzhan.top就可以看到我們不用再輸入埠8090 也能夠實用預設的80埠訪問我們的專案了。