Сила 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