[英]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.