当 Nginx 反向代理到 IP 地址时禁用 https

当 Nginx 反向代理到 IP 地址时禁用 https

我在我的服务器上为某个站点(例如 example.com)配置了 Nginx 作为反向代理

我希望客户端使用 IP 地址访问我的网站,例如http://192.0.2.67

问题在于 example.com 网站上有一个重定向,将 HTTP 设置为重定向到 HTTPS。(此 example.com 使用 Cloudflare)
当客户端从访问我的网站时,http://192.0.2.67他们会被重定向到https://example.com

如何在我的 Nginx 反向代理上禁用 HTTP 重定向到 HTTPS?

我的代码如下:

server {
   listen 80;

   location / {
       proxy_pass http://example.com;
   }
}

答案1

我没有在问题中发布的代码中看到重定向。这意味着重定向是在 example.com 端完成的。

取决于重定向是如何完成的。如果重定向只是“http TCP/80 => https TCP/433”并且没有以下检查,您可以尝试直接代理到 https:

server {
   listen 80;

   location / {
       proxy_pass https://example.com;
   }
}

如果这没有帮助,恐怕你成功的机会不大,因为你不是实现 https 重定向力量的节点。

如果页面中有 HTTP 严格传输安全 (HSTS) 标头,则重定向在浏览器级别完成,这样您跳过 ip 的机会也很小(理论上您可以尝试过滤掉此标头)。

答案2

在我看来,是页面在重定向,而不是 Web 服务器在重定向。通过 PHP,可以使用以下方法实现重定向:

<?php header('Location: http://google.com') ?>

在这种情况下,很难通过网络服务器本身来禁止这种行为。

答案3

Nginx 不会在此处重定向。发送此 HTTP 重定向的是原始服务器。使用 Nginx,你可以将发送的重定向替换为你自己重定向目标:

server {
    listen 80;

    location / {
        proxy_pass http://example.com;
        # replace redirects
        proxy_redirect http://example.com http://192.0.2.67;
    }
}

有关详细信息,请参阅ngx_http_proxy_module 文档

相关内容