【知识】Nginx反向代理路径到指定端口,很全面
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
以下配置仅供参考,不一定百分百有效
1、编辑nginx配置文件。
sudo vim /etc/nginx/sites-enabled/default
2、在server {}块中写入以下内容,注意把8807端口改成你的端口,把docker改成你的路由路径,把dpanel改成8807服务后端的路由路径。
location ^~ /docker {
# 动态路径重写(兼容有无斜杠)
rewrite ^/docker/?(.*)$ /$1 break;
# 代理到8807端口
proxy_pass http://127.0.0.1:8807;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_connect_timeout 600s;
# 深度内容替换(处理硬编码路径)
sub_filter_once off;
sub_filter_types *;
sub_filter 'http://$host/' 'http://$host/docker/';
sub_filter 'href="/' 'href="/docker/';
sub_filter 'src="/' 'src="/docker/';
sub_filter 'url(/' 'url(/docker/';
sub_filter '/(assets|static)/' '/docker/$1/';
# 动态API路径修正(新增以下规则)
sub_filter '"/api/' '"/docker/api/';
sub_filter "'/api/" "'/docker/api/";
sub_filter 'fetch("/api' 'fetch("/docker/api';
sub_filter 'axios("/api' 'axios("/docker/api';
# 如果你的路径是空的,比如只有一个/,那么务必删除下一行!
sub_filter '/dpanel/' '/docker/dpanel/';
sub_filter '"/dpanel/' '"/docker/dpanel/';
sub_filter "'/dpanel/" "'/docker/dpanel/";
# WebSocket端点路径(新增以下规则)
sub_filter 'ws://$host/' 'ws://$host/docker/'; # 新增WS协议替换
sub_filter 'wss://$host/' 'wss://$host/docker/'; # 新增WSS协议替换
sub_filter '"/ws/' '"/docker/ws/'; # 双引号包裹路径
sub_filter "'/ws/" "'/docker/ws/"; # 单引号包裹路径
# 智能重定向修复(增强正则)
proxy_redirect ~*^((?:https?|wss?)://[^/]+)?/(.*)$ $1/docker/$2;
proxy_redirect / /docker/;
# 标准代理头设置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-Path /docker;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 缓存控制(防止替换失效)
proxy_set_header Accept-Encoding ""; # 禁用gzip以支持sub_filter
# 超时设置
send_timeout 600s;
client_body_timeout 600s;
keepalive_timeout 600s;
client_max_body_size 0;
client_body_buffer_size 0;
}
3、重启Nginx服务。
sudo systemctl restart nginx