簡體   English   中英

NGINX proxy_pass重寫資產uri

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM