Сила www. и https в nginx.conf(SSL)
После покупки SSL-сертификата я пытаюсь заставить все страницы защитить https и www.
https://www.exampl.com работает и защищается, но только если он точно указан. www.example.com или example.com все еще указывают на http.
Мы используем nginx в качестве прокси-сервера и должны вводить здесь переписывание. У меня есть SSH/root доступ через Putty. Я получил доступ к nginx.conf путем ввода в putty.
Теперь что? Я могу ввести команды nginx на этой странице? Начиная с курсора? Любые командные строки сначала?
HTTPS:
.htacess - Исходный код, который я получил, прежде чем я узнал, что мне нужно было ввести nginx
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Конвертер кода Nginx -. Это показано на конвертере. Все ли на правильных строках?
# nginx configuration location / {
if ($http_host ~* "^example.com"){
rewrite ^(.*)$ http://example.com/$1 redirect; } }
а затем
WWW
.htacess - Исходный код, который я получил, прежде чем я узнал, что мне нужно было ввести nginx
#Force www:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
Конвертер кода Nginx -. Это показано на конвертере. Все ли на правильной линии?
# nginx configuration location / {
if ($http_host ~* "^example.com"){
rewrite ^(.*)$ http://www.example.com/$1 redirect; }
}
Сохраняю ли я затем? Перезапуск?
Любая помощь будет принята с благодарностью. Я боролся с этим несколько недель. Моя хостинговая компания помогала, насколько это было возможно, теперь я учусь на лету.... Или я должен просто остановиться и нанять разработчика? $$$
Спасибо
Ответы
Ответ 1
Лучший способ реализации перенаправления WWW и HTTPS - создать новый раздел server
в конфигурации Nginx:
server {
listen 80; #listen for all the HTTP requests
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
Вам также придется выполнить https://example.com в https://www.example.com. Это может быть сделано с кодом, подобным следующему:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate ssl.crt; #you have to put here...
ssl_certificate_key ssl.key; # ...paths to your certificate files
return 301 https://www.example.com$request_uri;
}
И, конечно же, после каждого изменения вы должны перезагрузить конфигурацию Nginx. Вот несколько полезных команд:
проверьте наличие ошибок в конфигурации:
sudo service nginx configtest
перезагрузить конфигурацию (этого было бы достаточно, чтобы изменения "работали" ):
sudo service nginx reload
перезапустить весь веб-сервер:
sudo service nginx restart
Важное примечание:
Все разделы server
должны находиться внутри раздела http
(или в файле, включенном в раздел http
):
http {
# some directives ...
server {
# ...
}
server {
# ...
}
# ...
}
Ответ 2
Следующее решение кажется ясным и простым, все, что определено в одном блоке сервера. Таким образом, с этой настройкой я принудительно все https://www.domain.tld, поэтому оба обработчика здесь не HTTPS и не-WWW на HTTPS.
Есть два варианта IF, но если вы не хотите дублировать весь блок SSL два раза, чтобы справиться с этим... это способ сделать это.
server {
listen 80;
listen 443 ssl;
server_name domain.tld www.domain.tld;
# global HTTP handler
if ($scheme = http) {
return 301 https://www.domain.tld$request_uri;
}
# global non-WWW HTTPS handler
if ($http_host = domain.tld){
return 303 https://www.domain.tld$request_uri;
}
}
И даже лучшее решение, чтобы избежать IF:
# Redirect all traffic from HTTP to HTTPS
server {
listen 80;
server_name example.com www.example.com;
# Destination redirect base URI
set $RURI https://www.example.com;
location / {return 301 $RURI$request_uri;}
}
# Redirect non-WWW HTTPS traffic to WWW HTTPS
server {
listen 443 ssl;
# NOTE: SSL configuration is defined elsewhere
server_name example.com;
return 301 $scheme://www.$host$request_uri;
}
# MAIN SERVER BLOCK
server {
listen 443 ssl;
# NOTE: SSL configuration is defined elsewhere
server_name www.example.com;
}
Ответ 3
Если у вас есть каталог с поддержкой сайтов, не используйте директиву "http". Просто создайте другой файл (с любым именем) в каталоге с поддержкой сайта, который имеет:
server {
listen 80; #listen for all the HTTP requests
server_name example.com www.example.com;
return 301 https://www.example.com$request_uri;
}
и закомментируйте строку
listen 80;
где имя_сервера одинаково в другом файле, который обслуживает www.example.com