Я хочу перенаправить запрос 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 /
звонки.
Оба сервера https
и http
используют один и тот же блок конфигурации, который сообщает nginx о перенаправлении на https: // $ server_name $ request_uri
адрес. Это причина цикла перенаправления.
Вам нужен отдельный блок server
для https
, где вы обслуживаете фактический контент, и у вас есть перенаправление только в http
block.
В вашем случае конфигурация будет выглядеть примерно так:
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;
}
}