Nginx

使用 nginx 反向代理進行重定向

  • February 2, 2020

我有a.b域(例如)並想username.github.io/projecta.b/c. 這意味著我還想將我的瀏覽器 url 保留為a.b/c並顯示username.github.io/project.

我在 nginx 模組中有以下設置

location /c {       
   proxy_pass http://username.github.io/project;
   proxy_redirect http://username.github.io http://a.b;
   proxy_set_header Host $http_host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_buffering off;
}

如果我更改proxy_set_header Host $http_hostproxy_set_header Host $proxy_hostor $host,它只會重定向到http://username.github.io/project我不打算這樣做的地方。我能怎麼做?

只需通過刪除proxy_set_header Host $http_host行將正確的 Host 標頭髮送到您的代理目標。

如果在您的伺服器塊中配置為伺服器名稱,那麼如果您在位置前綴和目標中使用斜杠,則您a.b甚至不需要指令,如文件中所述proxy_redirect``proxy_pass

Syntax:  proxy_redirect default;
         proxy_redirect off;
         proxy_redirect redirect replacement;
Default: proxy_redirect default;
Context: http, server, location

$$ … $$ 預設參數指定的預設替換使用 location 和 proxy_pass 指令的參數。因此,以下兩種配置是等價的:

location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect default;
}

location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect http://upstream:port/two/ /one/;
}

$$ …. $$

所以,這應該這樣做:

server {

   server_name a.b;

   location /c/ {       
       proxy_pass http://username.github.io/project/;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_buffering off;
   }

}

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