【问题标题】:Nginx reverse proxy with 301 redirect under https在 https 下使用 301 重定向的 Nginx 反向代理
【发布时间】:2017-01-18 23:14:05
【问题描述】:

我是Nginx的新手,我的目标是:

当我访问127.0.0.1:8080/proxy/git/Https://127.0.0.1/proxy/git/ 时,Nginx(反向)代理可以到达https://github.com

我的 nginx conf 被炸了:

http {

    server {   
    listen  8080 default backlog=2048;  
    listen  443 ssl;

    server_name  127.0.0.1;  

    ssl_certificate /etc/nginx/xxxxxxx.crt;
    ssl_certificate_key /etc/nginx/xxxxxxx.key;

    location /proxy/git/ {   
        proxy_pass https://github.com/;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass_header Server;
        proxy_redirect off;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;

        }
        error_page   500 502 503 504  /50x.html;   
   }

    ##
    # Basic Settings
    ##

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64; 
    # server_name_in_redirect off;

当我进入或在我的chrome地址栏中,我得到一个301重定向,地址变成了,我认为它变成了直接访问,但我想要代理访问,这是一个图片:

但是,当我重定向到 http&static 网站时,没问题。

我在网站上搜了很多,有人说是因为proxy_redirect,我测试了proxy_redirect / /;或者删掉,把proxy_set_header Host $host;改成proxy_set_header Host $http_host;,都没有意义。

特别是,如果我同时删除proxy_redirectline 并将$host 更改为$http_hosts,,如下所示:

        proxy_pass https://github.com/;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass_header Server;
        #proxy_redirect default;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;

似乎它会做 301 beteewn 我自己和我自己???

所以,我的问题是:

  1. 谁能告诉我如何反向代理到 127.0.0.1 下的 github? (想象一下我在一个必须使用这种反向代理的地方)

  2. 如果你能用简单的词来解释我们为什么要这样做,我也想知道原因。

  3. 我的英文很差,为了说清楚,能不能把github叫做“目标服务器”或者“目标网站”,把127.0.0.1叫做“代理服务器”或者“nginx”

衷心感谢任何愿意帮助我的人!

【问题讨论】:

    标签: redirect nginx proxy reverse-proxy


    【解决方案1】:

    我找到了原因。

    Github 需要 Https 和 HOST:github.com

    proxy_set_header Host $http_host;不能帮你改这个主机头,应该改用proxy_set_header Host $proxy_host;。这会将主机标头更改为 github。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多