簡體   English   中英

Nginx 確實重定向,而不是代理

[英]Nginx does redirect, not proxy

我想將 Nginx 設置為 https 服務的反向代理,因為我們有一個特殊的用例,我們需要“取消 https”連接:

http://nginx_server:8080/myserver ==> https://mysecureservice

但是實際的 https 服務沒有被代理。 Nginx 確實將我重定向到實際服務,因此瀏覽器中的 URL 會發生變化。 我想與 Nginx 交互,因為它是實際的服務,只是沒有 https。

這就是我所擁有的:

server {
    listen 0.0.0.0:8080 default_server;
    location /myserver {
        proxy_pass https://myserver/;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
    }
}

您必須使用proxy_redirect來處理重定向。

 Sets the text that should be changed in the “Location” and “Refresh” header fields of a 
 proxied server response. Suppose a proxied server returned the header field 
 “Location:https://myserver/uri/”. The directive
 will rewrite this string to “Location: http://nginx_server:8080/uri/”. 

例子:

 proxy_redirect https://myserver/ http://nginx_server:8080/;

來源: http : //nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

如果您不希望服務器進行重定向,您可以像這樣設置 nginx:

server
{
    listen 80;
    server_name YOUR.OWN.DOMAIN.URL;
    location / {
        proxy_pass http://THE.SITE.URL.YOU.WANT.TO.DELEGAGE/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

對我來說,這個配置就足夠了:

events {
}

http {
    server {
        location / {
            resolver 8.8.8.8;
            proxy_pass https://www.example.com$request_uri;
        }
    }
}

(請注意, resolver指令與 OP 中的問題無關,我只需要它能夠代理外部域,例如example.com

對我來說,問題只是我錯過了www. www.example.com 在 Firefox 開發人員的控制台中,我可以看到對localhost的 GET 請求以 301 返回,因此我認為 NGINX 正在發出 301 而不只是鏡像example.com 不是這樣:實際上問題是example.com返回 301s 以重定向到www.example.com ,NGINX 盡職盡責地鏡像這些 301s,然后 Firefox 直接“更改了 URL”(跟隨重定向)從localhostwww.example.com

我遇到了類似的問題。 就我而言,我能夠通過向proxy_pass URL 添加尾部斜杠來解決該問題:

server {
  location / {
    proxy_pass http://example.com/path/to/some/folder;
  }
}

server {
  location / {
    # added trailing slash
    proxy_pass http://example.com/path/to/some/folder/;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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