--- title: 反向代理因为html中绝对路径导致超链接失效 --- # 反向代理因为html中绝对路径导致超链接失效 反向代理因为html中绝对路径导致超链接失效 ## 评论 ### 评论 1 - wuxinyumrx 更新一下解决方案,nginx反向代理配置如下(需要nginx包含http_sub_module): ``` proxy_http_version 1.1; proxy_pass http://xx.xx.xx.xx:58090/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; proxy_set_header Accept-Encoding ""; sub_filter_types *; sub_filter_once off; sub_filter '/ws/' '/xm/ws/'; sub_filter '/static/' '/xm/static/'; sub_filter '/musiclist' '/xm/musiclist'; sub_filter '/musicinfo' '/xm/musicinfo'; sub_filter '/curplaylist' '/xm/curplaylist'; sub_filter '/generate_ws_token' '/xm/generate_ws_token'; sub_filter '/getversion' '/xm/getversion'; sub_filter '/getsetting' '/xm/getsetting'; sub_filter '/getvolume' '/xm/getvolume'; sub_filter '/setvolume' '/xm/setvolume'; sub_filter '/playingmusic' '/xm/playingmusic'; sub_filter '/searchmusic' '/xm/searchmusic'; sub_filter '/latestversion' '/xm/latestversion'; sub_filter '/cmd' '/xm/cmd'; sub_filter '"musiclist' '"xm/musiclist'; sub_filter '"musicinfo' '"xm/musicinfo'; sub_filter '"curplaylist' '"xm/curplaylist'; sub_filter '"generate_ws_token' '"xm/generate_ws_token'; sub_filter '"getversion' '"xm/getversion'; sub_filter '"getsetting' '"xm/getsetting'; sub_filter '"getvolume' '"xm/getvolume'; sub_filter '"setvolume' '"xm/setvolume'; sub_filter '"playingmusic' '"xm/playingmusic'; sub_filter '"searchmusic' '"xm/searchmusic'; sub_filter '"latestversion' '"xm/latestversion'; sub_filter '"cmd' '"xm/cmd'; sub_filter '/manifest.json' '/xm/manifest.json'; sub_filter '"start_url": "/"' '"start_url": "/xm/"'; sub_filter '"scope": "/"' '"scope": "/xm/"'; ``` --- ### 评论 2 - wooodxi 首先感谢各位大佬辛苦的付出。 我是家庭使用的威联通NAS部署的xiaomusic,NAS上也是使用的docker部署的是frpc客户端(nas上填写对应的端口号),在云服务使用docker部署的frps服务端(填写二级ssl域名)这样的反向代理,部署好以后外网通过链接https:xxx.xxx.xx是可以访问xiaomusic,播放歌曲音箱却没有声音,但是你们的测试播放连接是可以播放音乐, 包括点击停止播放音箱也是可以回应听到音箱发出再见收到的声音,就是播放歌曲音箱不出声。希望可以得到解答。 谢谢大佬 --- ### 评论 3 - hanxi @wooodxi 需要改设置页面的ip和端口。 --- ### 评论 4 - 13267740993 nginx 502 要关闭浏览器再打开才行 帮忙看下啥原因 server { listen 80; server_name www.music.cn; # ================================ # 根路径:原始反向代理(不做路径替换) # ================================ location / { # 反向代理到本机 58090 服务 proxy_pass http://127.0.0.1:58090; # 使用 HTTP/1.1,避免 keep-alive / chunked 问题 proxy_http_version 1.1; # 清空 Connection 头,交由 Nginx 自动管理 proxy_set_header Connection ""; # 转发客户端真实信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 连接 / 读取 / 发送超时设置,防止 502 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; send_timeout 60s; # 上传文件大小限制 client_max_body_size 100m; } # ================================================= # /xm/ 路径:子路径部署(带 WebSocket + sub_filter) # ================================================= location /xm/ { # 反向代理到后端服务根路径 proxy_pass http://127.0.0.1:58090/; # 使用 HTTP/1.1(WebSocket 必须) proxy_http_version 1.1; # WebSocket 升级头 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 转发客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 禁用 gzip,否则 sub_filter 无法生效 proxy_set_header Accept-Encoding ""; # ========== sub_filter 内容替换 ========== # 对所有响应类型生效(HTML / JS / JSON) sub_filter_types *; # 页面中出现多次也全部替换 sub_filter_once off; # 接口路径统一加 /xm 前缀 sub_filter '"/' '"/xm/'; sub_filter "'/" "'/xm/"; # WebSocket 路径修正 sub_filter '/ws/' '/xm/ws/'; # 静态资源路径修正 sub_filter '/static/' '/xm/static/'; # PWA / manifest 相关路径修正 sub_filter '/manifest.json' '/xm/manifest.json'; sub_filter '"start_url": "/"' '"start_url": "/xm/"'; sub_filter '"scope": "/"' '"scope": "/xm/"'; # ========== CORS 跨域配置 ========== add_header Access-Control-Allow-Origin $http_origin always; add_header Access-Control-Allow-Credentials true always; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always; # OPTIONS 预检请求直接返回 if ($request_method = OPTIONS) { return 204; } # 超时配置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; send_timeout 60s; # 上传大小限制 client_max_body_size 100m; } # ================================ # 502 错误页 # ================================ error_page 502 /502.html; } --- ### 评论 5 - hanxi 我也不熟 nginx 配置,建议使用 https://github.com/jc21/nginx-proxy-manager 配置 proxy ,简单的 GUI 操作就行。 --- [链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/533)