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

ddmonk · August 12, 2017 · Last by akin520 replied at August 14, 2017 · 7573 hits

求助: 本人有需求要利用 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 中的路径 (有点痛苦)

Reply to luikore

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

Reply to ddmonk

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

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

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

Reply to luikore

8080 的服务是 jetty。

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

You need to Sign in before reply, if you don't have an account, please Sign up first.