不需要的 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的主要内容,如果未能解决你的问题,请参考以下文章
将 HTTP 重定向到 HTTPS(中间件重定向 vs Nginx)