Nginx

Nginx 根據位置塊重定向所有傳入的請求

  • October 11, 2022

我使用 Nginx 作為反向代理。我假設我有一個像 test.com 這樣的域和一個像 /test 這樣的路徑的位置塊。該位置將 proxy_pass 到另一個網站,例如http://test2.com。當我在瀏覽器上鍵入 URL 時,它會將第一個請求重定向到應用程序(http://test.com/test/ –> http://test2.com/)。但是,所有傳入的請求都將在沒有我在 Nginx 上定義的位置的情況下發送。如何使所有傳入請求都遵循該路徑?我想要這樣的東西:

server {
listen 80;
charset utf-8;
server_name test.com;
location = /auth/test{
    internal;
    proxy_pass http://test.com/test/decisions/;
    proxy_pass_request_body off;
    proxy_set_header Content-Length '';
    proxy_set_header X-Original-URI $request_uri;
}
location = /test/decisions/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_set_header Authorization $http_authorization;
    proxy_pass http://valid.domain/test/api/authorization;
}
location /test/ {
    auth_request /auth/test;
    auth_request_set $auth_status $upstream_status;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_set_header Authorization $http_authorization;
    proxy_pass https://test2.com/;
    proxy_pass_header Server;
    proxy_http_version 1.1;
    proxy_redirect default;
    access_log /var/log/nginx/access.log;
    client_max_body_size 10240M;
}
}

術語“傳入請求”在這裡令人困惑。我假設你的意思是:

  1. 瀏覽器向 發出請求http://example.com/test/,由 nginx 代理到http://2.example.com/
  2. 瀏覽器直接發出後續請求http://2.example.com/statfile.js,當您希望發出請求時http://example.com/test/statfile.js

對於這個問題陳述,最佳解決方案是修改2.example.com伺服器配置,以便它創建指向example.com/test的 URL,而不是指向的 URL 2.example.com。大多數情況下,Web 應用程序中有一個可以修改的根 URL 設置。

不太可靠和性能更差的選項是使用sub_filter模組替換塊中所有出現的2.example.comwith 。example.com/test/``proxy_pass

但是,這可能會產生意想不到的副作用。

引用自:https://serverfault.com/questions/1112795