V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sandtears
V2EX  ›  问与答

请教一下关于 Nginx 反向代理到虚拟目录时如何处理使用绝对路径的静态文件

  •  
  •   sandtears · 2014-08-20 21:17:18 +08:00 · 13601 次点击
    这是一个创建于 3746 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有一个 Web App,监听在本机的 8888 端口,我想把它放到 80 端口的某虚拟目录下,
    即通过形如 http://example.com/webapp/ 的地址访问。

    但是这个 Web App 中静态资源大量使用形如 /static/main.css 的地址,浏览器就会去访问 http://example.com/static/main.css然后 404,除了把这个 App 反代到根目录和修改 App 代码,有没有什么办法解决这个问题?

    7 条回复    2014-08-20 22:33:15 +08:00
    sampeng
        1
    sampeng  
       2014-08-20 21:46:53 +08:00
    rewrite
    sandtears
        2
    sandtears  
    OP
       2014-08-20 21:51:33 +08:00
    @sampeng

    具体应该怎么写呢?我使用了
    rewrite ^/(.+\....) /webapp/$1;

    似乎没有什么效果。。。
    XiaoxiaoPu
        3
    XiaoxiaoPu  
       2014-08-20 21:54:30 +08:00
    以 Nginx 为例

    location /webapp/ {
    rewrite ^/webapp/(.+)$ /$1 break;
    proxy_pass http://127.0.0.1:8888;
    }
    sandtears
        4
    sandtears  
    OP
       2014-08-20 22:14:12 +08:00
    @XiaoxiaoPu
    还是不好用,我的配置文件如下:

    location /webapp/ {
    proxy_pass http://127.0.0.1:8888/;
    proxy_redirect / /webapp/;
    rewrite ^/(.+)$ /$1 break;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    }

    其中 proxy_redirect 是为了解决 302 问题,下面三行是为了支持 websocket
    XiaoxiaoPu
        5
    XiaoxiaoPu  
       2014-08-20 22:23:53 +08:00
    第3行换成"rewrite ^/webapp/(.+)$ /$1 break;"试试?
    sandtears
        6
    sandtears  
    OP
       2014-08-20 22:28:22 +08:00
    @XiaoxiaoPu
    改成这样也没效果。。 可能是 App 用了什么奇怪的跳转方式。。
    XiaoxiaoPu
        7
    XiaoxiaoPu  
       2014-08-20 22:33:15 +08:00
    curl 调试一下?我用下面的配置反向代理Google Fonts都没问题的。

    location /google/fonts/ {
    sub_filter_types text/css;
    sub_filter_once off;
    sub_filter //fonts.gstatic.com/ //cdn.***.net/google/fonts-gstatic/;
    rewrite ^/google/fonts/(.+)$ /$1 break;
    expires 10d;
    proxy_pass https://fonts.googleapis.com;
    proxy_set_header Host "fonts.googleapis.com";
    proxy_set_header Accept-Encoding "";
    proxy_cache cache;
    proxy_cache_valid 200 302 10m;
    }
    location /google/fonts-gstatic/ {
    rewrite ^/google/fonts-gstatic/(.+)$ /$1 break;
    expires 10d;
    proxy_pass https://fonts.gstatic.com;
    proxy_set_header Host "fonts.gstatic.com";
    proxy_set_header Accept-Encoding "";
    proxy_cache cache;
    proxy_cache_valid 200 302 10m;
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:35 · PVG 02:35 · LAX 10:35 · JFK 13:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.