Nginx、Weblogic 和按路徑反向代理

Nginx、Weblogic 和按路徑反向代理

在 nginx 中使用路徑時,我在使反向代理正常工作時遇到問題。我想做的是為應用程式提供一個地址,並用路徑來指定環境。根據路徑,它將指向不同的伺服器。使用直接連結時,我可以使反向代理正常工作,但使用路徑時會出現 404 錯誤。

app.foo.bar/dev = 404 錯誤 devapp.foo.bar = 成功

我在 app.foo.bar/dev 上做錯了什麼?

這是正在運行的反向代理設置,但我不想使用:

server  {
  listen  80;   # DEV Application Proxy
  server_name  devapp.foo.bar;
  location  / {
    proxy_pass  http://appserver.foo.bar:7010;
    proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-for $remote_addr;
        port_in_redirect off;
        proxy_redirect   http://appserver.foo.bar:7010/ /;
        proxy_connect_timeout 300;
    }
  }

這是我想要透過使用路徑執行的操作的一部分,但出現 404 錯誤。

# APP Environment Proxy

server {

  listen 80;
  server_name app.foo.bar;
     location /dev {
      proxy_pass http://appserver.foo.bar:7010;
      proxy_set_header    Host            $host;
      proxy_set_header    X-Real-IP       $remote_addr;
      proxy_set_header    X-Forwarded-for $remote_addr;
      port_in_redirect off;
      proxy_redirect     http://appserver.foo.bar:7010 /;
      proxy_connect_timeout 300;

  }
}

我已經用谷歌搜尋過這種類型的設置,但找不到解決方案。預先感謝您的任何幫助。

答案1

當您有 時proxy_pass http://appserver.foo.bar:7010;,nginx 會將規範化的 URI 附加到傳遞到後端的請求 URL 中。

因此,當您請求時http://app.foo.bar/dev,請求將轉到http://appserver.foo.bar:7010/dev。如果你的開發伺服器沒有這個路徑,那麼它將回傳 404,nginx 回傳給客戶端。

如果您希望所有以 開頭的請求都http://app.foo.bar/dev轉到,http://appserver.foo.bar:7010以便將 URI 的所有其餘部分新增至後端伺服器 URI,那麼您可以使用以下設定:

location ~ ^/dev(.+)$ {
    proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
    ...
}

因此,我們使用正規表示式將後面的部分捕獲/dev到變數中,然後將該變數新增到proxy_pass路徑末尾。

相關內容