我想将 localhost 请求重定向到 HTTPS。我的 .conf 如下所示:
server {
listen 80;
listen 443 ssl;
ssl_certificate /etc/ssl/localhost.crt;
ssl_certificate_key /etc/ssl/localhost.key;
server_name localhost;
return 301 https://$server_name$request_uri;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
我在 Docker 容器中运行它,-p 80:80 -p 443:443
但是从浏览器调用服务器会导致https://localhost/
调用循环。
答案1
您的https
和http
服务器共享相同的配置块,该配置块告诉 nginx 重定向到https://$server_name$request_uri
地址。这就是重定向循环的原因。
您需要有一个单独的server
块https
,在其中提供实际内容,并且块中只有重定向http
。
在你的情况下,配置看起来会像这样:
server {
listen 80;
server_name localhost;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/ssl/localhost.crt;
ssl_certificate_key /etc/ssl/localhost.key;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}