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

2014-08-20 21:17:18 +08:00
 sandtears

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

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

13602 次点击
所在节点    问与答
7 条回复
sampeng
2014-08-20 21:46:53 +08:00
rewrite
sandtears
2014-08-20 21:51:33 +08:00
@sampeng

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

似乎没有什么效果。。。
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
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
2014-08-20 22:23:53 +08:00
第3行换成"rewrite ^/webapp/(.+)$ /$1 break;"试试?
sandtears
2014-08-20 22:28:22 +08:00
@XiaoxiaoPu
改成这样也没效果。。 可能是 App 用了什么奇怪的跳转方式。。
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;
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129032

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX