![当 Nginx 反向代理到 IP 地址时禁用 https](https://linux22.com/image/747600/%E5%BD%93%20Nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%88%B0%20IP%20%E5%9C%B0%E5%9D%80%E6%97%B6%E7%A6%81%E7%94%A8%20https.png)
我在我的服务器上为某个站点(例如 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 文档