Nginx 求助 location 多路径后,无法加载 js css 文件

ddmonk · 2017年08月12日 · 最后由 akin520 回复于 2017年08月14日 · 7575 次阅读

求助: 本人有需求要利用 nginx 做反向代理。 源网址为:10.111.12.13:8080 现想代理为:10.111.13.11:8088/test

server配置文件如下:
    server {
        listen       8088;
        #listen       somename:8080;
        server_name        10.111.13.11;

        location /test/ {
            root /test/
            index  index.html index.htm;
            proxy_pass http://10.111.12.13:8080/;
          #  proxy_redirect off;
#            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_pass http://10.139.5.134:8080;

        }

但是发现,在加载页面时,js/css 访问的路径为 10.111.13.11:8088 并非是 10.111.13.11:8088/test。 请问有什么办法能够将 js/css 代理的路径设置为 10.111.13.11:8088/test

Markdown 排版

A 办法:加回你的 proxy_set_header, 在 10.111.12.13 的代码中判断如果请求是否是从 proxy 过来的,是就就改掉 js/css (如果有图片字体图标等等的路径也一起改...)

B 办法:加上 body_filter_by_lua 替换掉 html / js / css 中的路径 (有点痛苦)

luikore 回复

谢谢。我是 nginx 小白,能具体点吗?我发现在 10.111.13.11:8088/test 中页面的跳转也是不会加上 test 的。您有好的解决办法么? 是否有一种方式,使访问 10.111.13.11:8088/test 就和访问http://10.111.12.13:8080/ 一样

ddmonk 回复

办法就是我说的那么简单,但挨个改链接是个很费事的工作,你去搜搜说不定有人做过可以给你复制粘贴一下

B 方案 碰到 redirect 的时候还要 rewrite header

A 方案比较好办一些,如果你的 8080 端口的服务是 rails 就更好办了,改一下 asset host, 直接 mount 在 /test/ 就好,都不用 proxy_pass 了

luikore 回复

8080 的服务是 jetty。

location / {} 下面写 proxy_pass http://10.111.12.13:8080/;

需要 登录 后方可回复, 如果你还没有账号请 注册新账号