Я пытаюсь перенести сайт с HTTP на HTTPS, однако мой nginx (версия: 1.10. 3) похоже, что конфигурация не работает.
Требуется следующее поведение:
http://www.example.com/path/to/content
должен перенаправлять на https: // example .com / path / to / content
http://example.com/path/to/content
должен перенаправлять на https://example.com/path/to/content
https. : //www.example.com/path/to/content
должен перенаправить на https://example.com/path/to/content
С моей текущей конфигурацией браузеры не будут подключаться к сайту, используя HTTPS:
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com;
# redirects both www and non-www to https
rewrite ^(.*) https://www.example.com$1 permanent;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
# redirects non-www to www
rewrite ^(.*) https://www.example.com$1 permanent;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
charset utf-8;
# rest of my config
}
Эта конфигурация делает то, о чем вы спрашиваете:
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com;
# redirects both www and non-www to https
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.example.com;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
# redirects www to non-www
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
charset utf-8;
# rest of my config
}
Я изменил rewrite
на return
, так как это немного более эффективно.
С return
нужно использовать $ request_uri
, чтобы получить путь запроса и аргументы в URL перенаправления.
Затем я изменил server_name example.com;
с слушать 443;
блок для обслуживания фактического содержимого сайта и имя_сервера www.example.com;
с слушать 443;
для перенаправления.
Попробуйте использовать метод ниже и обновите остальную информацию ssl:
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;
}
И для ssl укажите путь ключа ssl:
server {
listen 443 ssl;
ssl on;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /path of certificate;
ssl_certificate_key /path of server.key;
}