Nginx反向代理配置:端口访问自动跳转至对应location
解决Nginx端口跳转至对应location的问题
你的核心问题是Nginx没有监听32400/8181/32800这些端口,所以用户直接访问这些端口时,请求根本没经过Nginx,自然跳转配置不会生效。以下是正确的配置方案:
步骤1:配置端口-路径映射规则
在http块最顶部添加map指令,用来根据端口匹配对应的跳转路径:
map $server_port $redirect_path { 32400 /plex/; 8181 /tautulli/; 32800 /torrent/; }
步骤2:添加监听端口的Server块
新增一个server块,监听需要跳转的SSL端口,并配置跳转规则:
server { listen 32400 ssl; listen 8181 ssl; listen 32800 ssl; server_name site; ssl_certificate /etc/ssl/example.pem; ssl_certificate_key /etc/ssl/example.key; # 跳转到对应location路径 return 301 https://site$redirect_path; }
完整配置示例
整合后的完整Nginx配置如下:
worker_processes 1; events { worker_connections 1024; } http { # 端口-路径映射规则 map $server_port $redirect_path { 32400 /plex/; 8181 /tautulli/; 32800 /torrent/; } server { listen 80; server_name site; return 301 https://$server_name$request_uri; } # 处理带端口的HTTPS请求,跳转至对应location server { listen 32400 ssl; listen 8181 ssl; listen 32800 ssl; server_name site; ssl_certificate /etc/ssl/example.pem; ssl_certificate_key /etc/ssl/example.key; return 301 https://site$redirect_path; } # 主HTTPS服务,处理反向代理 server { listen 443 ssl; server_name site; ssl_certificate /etc/ssl/example.pem; ssl_certificate_key /etc/ssl/example.key; location /torrent/ { proxy_pass https://127.0.0.1:32800/; proxy_http_version 1.1; proxy_set_header Host 127.0.0.1:32800; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_cookie_path / "/; Secure"; } location /plex/ { rewrite /plex(/.*) $1 break; proxy_pass https://127.0.0.1:32400/; proxy_set_header Accept-Encoding ""; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; sub_filter '/web/' '/plex/web/'; sub_filter_types *; sub_filter_once off; } location /tautulli/ { proxy_pass https://127.0.0.1:8181; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 90; proxy_set_header X-Forwarded-Proto $scheme; set $xforwardedssl "off"; if ($scheme = https) { set $xforwardedssl "on"; } proxy_set_header X-Forwarded-Ssl $xforwardedssl; proxy_redirect ~^(http(?:s)?://)([^:/]+)(?::\d+)?(/.*)?$ $1$2:$server_port$3; } } }
额外建议
- 确保后端服务(Plex/Tautulli/Torrent)仅监听
127.0.0.1,禁止监听0.0.0.0,这样外部无法直接绕过Nginx访问服务。 - 配置完成后,执行
nginx -t检查配置语法,无误后执行nginx -s reload重启Nginx生效。
内容的提问来源于stack exchange,提问作者Vez Figo
相关产品推荐
相关产品推荐

