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

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

求助: 本人有需求要利用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

共收到 6 条回复

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/;

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