В последнее время я пытаюсь перенаправить на HTTPS с помощью Nginx, но у меня продолжает возникать цикл перенаправления после того, как я пытаюсь посетить свой сайт в браузере. Вот мой полный файл конфигурации блока сервера:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
root /var/www;
index index.php index.html index.htm home.html contact.html projects.html;
# Make site accessible from http://localhost/
server_name melone.co;
return 301 https://$host$request_uri;
ssl_certificate /path/to/ssl;
ssl_certificate_key /path/to/ssl;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
После поисков я обнаружил, что return 301 https://$host$request_uri;
было бы самым простым способом сделать это.
Поэтому я внедрил его в свой файл конфигурации и запустил sudo service nginx restart
. Затем я зашел в свой браузер и получил цикл перенаправления. Как только я удалил эту строку кода, она исчезла. Так что, как мне кажется, я действительно ищу более эффективный способ перенаправления на SSL.
Любая помощь будет оценена. Спасибо
В настоящее время вы перенаправляете весь трафик на https
, что хорошо для http
трафик, но для https
трафик совершенно бессмысленен и приводит к петле перенаправления. Сейчас происходит следующее: http
-> https
-> https
-> https
-> https
-> https
... и так до тех пор, пока ваш браузер не скажет вам: «Достаточно, мы не добьемся успеха».
Вы хотите перенаправить http
трафик в https
, и обработать https
трафик (как и раньше с http
трафик).
Итак, вам нужно разделить ваш конфиг на два server
директивы: одна для http
(который должен выполнить перенаправление), другой для https
, который будет обрабатывать трафик.
Взгляните на этот пример:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name melone.co;
return 301 https://$host$request_uri;
}
Добавь это server
в свою конфигурацию, удалите соответствующие строки в существующем server
блок, и прибыль!
Хорошо, я нашел проблему. Мне нужно два серверных блока. Один слушает порт 80 и перенаправляется на 443.
Я добавил это в начало своей конф:
server {
listen 80 ;
server_name melone.co;
return 301 https://$server_name$request_uri;
}