Я пытаюсь перенести сайт с 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
}
Пожалуйста, попробуйте использовать метод ниже и обновите остальную информацию 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;
}
Эта конфигурация делает то, о чем вы просите:
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;
с участием listen 443;
блокировать фактическое содержимое сайта, и server_name www.example.com;
с участием listen 443;
сделать редирект.