1. 程式人生 > >Nginx 反向代理的配置及問題解決

Nginx 反向代理的配置及問題解決

安裝及定位配置檔案

Ubuntu安裝用 apt-get install nginx命令
用apt-get安裝完之後,配置檔案一般在\etc\nginx

可以通過 cat /etc/init.d/nginx檢視nginx的區體配置檔案路徑。

# Try to extract nginx pidfile
PID=$(cat /etc/nginx/nginx.conf | grep -Ev ‘^\s*#’ | awk ‘BEGIN { RS=”[;{}]” } { if ($1 == “pid”) print $2 }’ | head -n1)
if [ -z “$PID” ]; then
PID=/run/nginx.pid

/etc/init.d/nginx中的PID欄位可知配置檔案在/etc/nginx/nginx.conf,即和一般情況無異

一般來說不建議直接修改/etc/nginx/nginx.conf檔案,在該檔案下可以發現它會引用其它資料夾下的檔案內容。

include /etc/nginx/modules-enabled/*.conf;
http {
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

也就是說只要將自定義的而又滿足配置格式的檔案放於適合的目錄下,就可以完成對Nginx的配置。

反向代理的配置

配置需求:向外監聽80埠,反向代理給伺服器gunicorn所用的5000

配置的內容如下

server {
    listen 80;
    location / {
       proxy_pass http://localhost:5000;
    }
}

由於考慮到後繼可能的改動,我用git同步配置檔案並用 ln -s 軟連結至配置目錄

上述內容配置於/etc/nginx/sites-enabled/web,web是我的配置檔案,sites-enabled/web不要求配置檔案以.conf結尾,這一點可以在nginx.conf中得知配置檔案的字尾要求

出現的問題

發現nginx

gunicornflask分別都能正常執行,但配合起來沒有正常工作。
主要是nginx的監聽外網80埠正常,卻無法反向代理給5000埠的gunicorn

解決的方法

/sites-enabled的目錄下,檢視default檔案,發現default中的server{ }配置已監聽80埠,而我的server配置也是監聽80埠,因此便產生的衝突,而我的配置優先順序不夠,因此反向代理失敗了。
解決衝突:將default關於server的配置註釋或者刪掉。

然後過載一下配置
$service nginx reload

或者直接重啟一下nginx
$service nginx restart

然後問題就解決了。

該問題的解決是我在思否上提問得到的回覆中獲取到的思路。具體關於問題的詳情,你也可在nginx + gunicorn 沒有成功 反向代理 這個頁面中檢視