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
gunicorn
和flask
分別都能正常執行,但配合起來沒有正常工作。 主要是
nginx
的監聽外網80
埠正常,卻無法反向代理給5000
埠的gunicorn
。
解決的方法
在/sites-enabled
的目錄下,檢視default
檔案,發現default
中的server{ }
配置已監聽80
埠,而我的server
配置也是監聽80
埠,因此便產生的衝突,而我的配置優先順序不夠,因此反向代理失敗了。
解決衝突:將default
關於server
的配置註釋或者刪掉。
然後過載一下配置
$service nginx reload
或者直接重啟一下nginx
$service nginx restart
然後問題就解決了。
該問題的解決是我在思否上提問得到的回覆中獲取到的思路。具體關於問題的詳情,你也可在nginx + gunicorn 沒有成功 反向代理 這個頁面中檢視