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端口訪問我們的項目了。