[英]NGINX proxy_pass rewrite asset uri
我正在尝试通过subdomian到localhost / folder做一个基本的NGINX反向代理,并且很困惑让它重写我的资产和链接。
我的http:// localhost:8080 / myapp /就像一个超级按钮一样工作,但是通过NGINX +子域,它在子文件夹资产上失败了。
我相信我对NGINX的'rewrite'子句感到困惑。
如何重写去客户端浏览器以删除/ myapp /上下文的HTML?
server {
listen 443 ssl;
server_name app1.domain.com;
location / {
rewrite ^/myapp/(.*) /$1 break; # this line seems to do nothing
proxy_pass http://localhost:8080/myapp/;
}
}
我期望我生成的HTML(通过https://app1.domain.com )在没有子文件夹/ myapp /的情况下被重写,因此当请求资产时,可以找到它们,而不是针对https://app1.domain的404。 .com / myapp / assets / 。 它应该只是https://app1.domain.com/assets/ (如果我手动去那里,它们会起作用)
- 谢谢。
从Ivan的反馈中得出并最终确定我的解决方案为:
server {
listen 443 ssl;
server_name app1.domain.com;
location / {
sub_filter '/myapp/' '/'; # rewrites HTML strings to remove context
sub_filter_once off; # ensures it loops through the whole HTML (required)
proxy_pass http://localhost:8080/myapp/;
}
}
如nginx proxy_pass
文档所述 :
在某些情况下,无法确定请求URI中要替换的部分:
...
当使用rewrite指令在代理位置内更改URI时,将使用相同的配置来处理请求(中断):
location /name/ { rewrite /name/([^/]+) /users?name=$1 break; proxy_pass http://127.0.0.1; }
在这种情况下,伪指令中指定的URI将被忽略,并将更改后的完整请求URI传递到服务器。
因此,使用此配置块,将/myapp/assets/some_asset
URI重写为/assets/some_asset
并使用break
标志后,nginx会忽略proxy_pass
指令上的/myapp/
后缀,并将/assets/some_asset
请求传递到后端。 不管它多么奇怪,您需要使用以下重写规则:
rewrite ^(/myapp/.*)$ $1 break;
另一个(可能更好)的解决方案是使用两个location
块:
location / {
proxy_pass http://localhost:8080/myapp/;
}
location /myapp/ {
proxy_pass http://localhost:8080;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.