redirect - https 下带有 301 重定向的 Nginx 反向代理

标签 redirect nginx proxy reverse-proxy

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

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

我的 nginx 配置被破坏了:

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重定向,地址变成了 ,我认为它变成了直接访问,但我想要代理访问,这是一张图片:

enter image description here

但是,当我重定向到 http&static 网站时,就可以了。

我在网站上查了很多,有人说是因为proxy_redirect,我测试了一下为proxy_redirect//; 或者删除它,并更改 >proxy_set_header Host $host;proxy_set_header Host $http_host; 但都没有意义。

特别是,如果我删除 proxy_redirect 行并将 $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???

enter image description here

所以,我的问题是:

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

  2. 您能用简单的语言解释我们为什么要这样做,真是太好了,我也想知道原因。

  3. 我的英语很差,所以为了说清楚,我们可以将github称为“目标服务器”或“目标网站”,并将127.0.0.1称为“代理服务器”或“nginx”

衷心感谢所有愿意帮助我的人!

最佳答案

我已经找到原因了。

Github 需要 Https 和 HOST:github.com

proxy_set_header Host $http_host;无法帮助您更改此主机 header ,应使用proxy_set_header Host $proxy_host;代替。这会将主机 header 更改为 github。

关于redirect - https 下带有 301 重定向的 Nginx 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39434674/

相关文章:

node.js - 支持 HTTPS 的 NodeJS 代理服务器

c# - WCF 代理生成 : svcutil. exe 与 wsdl.exe

ios - Alamofire:遵循 HTTP 重定向(或不遵循)

android - 将 G-WAN 用于 Web 服务

jsf - 通过 request.login() 的编程登录在失败的情况下不会重定向到 <form-error-page>

ssl - Nginx 使用 SSL 服务错误的根目录

django - Nginx、SSL、Django、CSRF验证失败(自定义端口)

object - 在 clojure 中为对象的特定实例创建代理

php - 重定向,但隐藏推荐人

grails - 如何在grails index gsp之前调用我的登录GSP View ?