不需要的 nginx 重定向到 https

Posted

技术标签:

【中文标题】不需要的 nginx 重定向到 https【英文标题】:Unwanted nginx redirect to https 【发布时间】:2017-04-17 02:02:10 【问题描述】:

我有一个这样的 nginx 设置:

/etc/nginx/sites-available/default-ssl.conf:

server 

  listen 443 ssl;

  server_name my.server.name;

  ssl_certificate /etc/letsencrypt/live/my.server.name/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/my.server.name/privkey.pem;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

#  root /usr/share/nginx/html;
  root /var/www/html;
  index index.html index.htm;

  location / 
    try_files $uri $uri/ =404;
  

  location /proxiedhost/ 
    rewrite ^/proxiedhost(/.*)$ $1 break;
    proxy_pass  http://127.0.0.1:6080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_redirect    off;
  
  <<<< A couple more of these blocks >>>>

  server 
  listen 80;
  server_name origin.ticktockhouse.co.uk;
  return 301 https://$host$request_uri;

/etc/nginx/sites-available/aptrepo.conf:

server 
        listen   80; ## listen for ipv4; this line is default and implied

        root /home/aptrepo/;
        index index.html index.htm;

        server_name aptrepo.server.name;

我的问题是,当我浏览到http://aptrepo.server.name 时,它会自动重定向到https://aptrepo.server.name,我没有为它提供letsencrypt 证书。当然,我可以得到一个,但我并不特别需要它,并且想弄清楚为什么会发生这种情况。

我愿意相信它是 default-ssl.conf 中的服务器块,但我对为什么另一个服务器块不是完全独立的东西感到困惑。我四处寻找解释,但不幸的是,大多数文章/问题都是关于如何让 https 重定向到 http - 显然我已经解决了一个问题!

【问题讨论】:

我在您的 aptrepo.server.name 配置中看不到 https 服务器部分。这是所有服务器的完整配置吗?你使用 HSTS 吗? 如果可能的话,我希望 aptrepo.server.name 只能是 HTTP 当然可以。你使用 HSTS 吗?显示curl -I http://aptrepo.server.name 的结果。你在哪里包括/etc/nginx/sites-available/aptrepo.conf 【参考方案1】:

可能是 nginx 没有选择正确的server 块。

仅出于测试目的,请尝试注释掉 return 301 https://$host$request_uri; 并查看这是否解决了 aptrepo.server.name 上的问题

【讨论】:

谢谢,我试过了,它确实有效。我还添加了 return 301 行,它似乎按照我最初的意愿工作。我不想要它作为 http 的原因是为了迎合没有安装 apt-transport-https 的 Debian 机器。

以上是关于不需要的 nginx 重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章

nginx 代理https到http重定向失败的问题

如何在 NGINX 上将 HTTPS 重定向到 HTTP?

宝塔的nginx开启强制https老是无限重定向

将 HTTP 重定向到 HTTPS(中间件重定向 vs Nginx)

NGINX 将 http 重定向到 https,将非 www 重定向到 ww

在闪亮的服务器不工作的情况下,在 NGINX 中将 HTTP 重定向到 HTTPS