使用 Nginx 作為反向代理伺服器 (Reverse Proxy)
2022-11-05
說明如何使用 Nginx for Windows 作為反向代理伺服器。
說明
Nginx 分為 Open Source 以及需要付費,有著更為完善功能及有支援服務的 Nginx Plus。
目前 Nginx 是屬於 F5 公司的解決方案與產品,而開源版本則可以從 https://nginx.org/en/ 下載,或從 Nginx 於 GitHub 所提供的 Release Repos 進行下載。
本次的測試環境使用 Nginx Open Source 1.23.2,並且在 Windows Server 2019 上進行測試。
下載後解壓縮就可以使用,藉由執行 nginx.exe
啟動執行。
設定上則是藉由調整 nginx.conf
,執行 nginx 後,如果有互動的需求可以藉由 cmd 透過 nginx.exe
使用參數進行控制
nginx -s stop
nginx -s quit
rem Reload nginx.conf
nginx -s reload
rem Reopen Log files
nginx -s reopen
nginx.conf
/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8080;
server_name sdwh.dev;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass https://sdwh.dev/;
}
}
server {
listen 80;
server_name hostname;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /www {
proxy_pass http://192.168.112.152:8080/;
}
location /tour {
proxy_pass https://tour.sdwh.dev/;
sub_filter '/assets/' '/tour/assets/';
sub_filter 'assets/' '/tour/assets/';
sub_filter_once off;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
在 conf 的設定當中,server 用於設定要監聽的 port,搭配 location 由子目錄判斷回應的內容。
而要進行反向代理,就是設定 proxy_pass 的位址,但在回應上可能會有代理錯誤 (可能被各種原因阻擋),因此仍是有相關的問題要去克服。
而縱使成功進行反向代理,相關的資源檔案可能因為網頁本身的絕對路徑或者相對路徑無法成功載入,這個時候可以利用多個 location 或者是使用 sub_filter
的方式將回應內容強制取代,當然,這會是一個不斷測試的手工過程 😅
心得
Nginx 的 conf 設定直觀易懂,並且有第三方套件可以擴充功能。然而在一些討論中有看到 Nginx 在 Windows 環境穩定度仍有提升的空間,此外由於有 Nginx Plus 的選項,在正式營運環境,如果採用 Nginx 應仍會以 Nginx Plus 作為選擇。Open Source 的 Nginx 較為適合作為 POC 或者個人用途的反向代理伺服器工具 😃