Я запустил тест Pingdom на своем 1 простом сайте с файлом html и получил за это оценку F:
Удалите следующую цепочку переадресации, если возможно:
http://example.com/
http://www.example.com/
https://www.example.com/
И единственное перенаправление в моем .conf:
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
Следующий блок - SSL и все остальное.
server {
listen 443 ssl http2;
etc...
}
Других конфигураций нет. Все, что мне нужно, это перенаправить не-www на www и всегда только https и пройти тест.
Обновлено: Full .conf
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5';
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
root /var/www/example.com/htdocs;
server_name example.com www.example.com;
location / {
autoindex on;
try_files $uri $uri/ =404;
}
location ~* /img/.*\.gif$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
}
Просто измените $ scheme
на https
, я не могу сказать, почему это вообще есть, потому что вы вряд ли получите что-то другое чем http
через порт 80, если только ваши пользователи не делают что-то странное.
РЕДАКТИРОВАТЬ: Добавить отсутствующее перенаправление https-> https.
Не заметил, что у вас на самом деле нет явного default_server
.
Выберите что-нибудь вроде:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
Ответ Ашиша может сработать, но я бы держался подальше от if
насколько это возможно (прочтите If is Evil ).
Думаю, ваше имя godaddy cname или записи A подойдут для nginx, попробуйте следующий код.
server {
listen 80 default_server;
listen [::]:80 default_server;
if ($http_x_forwarded_proto != 'https') {
rewrite ^(.*) https://www.example.com$1 redirect;
}
}
Если вы хотите сделать это за один раз, используйте этот способ, но это очень плохой способ чтобы решить эту проблему. Добавьте модуль карты поверх блока конфигурации и местоположения в блоке сервера 80.
map $http_host $new {
'www.abc.com' '1';
}
server {
listen 80 default_server;
listen [::]:80 default_server;
if ($http_x_forwarded_proto != 'https') {
rewrite ^(.*) https://$host$1 redirect;
}
location / {
if ($new != '1') {
rewrite ^(.*) https://www.example.com$1 redirect;
}
}
}