У меня включен гибкий режим Cloudflare, как перенаправить на HTTPS для сервера Nginx

Вопрос или проблема

Если я получаю доступ напрямую через https, все работает, но сайт по-прежнему доступен через HTTP. Как заставить весь трафик HTTP перенаправлять на HTTPS?

Я использовал плагин WordPress HTTPS, но он не перенаправляет на https.

Я настроил nginx следующим образом:

server {

    listen       xxx.x.xxx.xxx:80;
    listen       127.0.0.1:80;

    server_name mydomain.com;


    root   /var/www/html/mydomian.com/;
    index  index.html index.htm index.php;
    charset utf-8;



    location / {
            try_files $uri $uri/ /index.php?$args;
    rewrite ^(.*)$ https://$http_host$request_uri redirect;
  }
   ...

Но это перенаправление приведет к бесконечному циклу. Я установил
CloudFlare Flexible SSL, который, как сказано, решает проблему с бесконечным циклом, но все равно не помогает.

Есть ли другие способы принудительно перенаправить http на https?

ОБНОВЛЕНИЕ

Мой блок ssl:

   server {

       listen       xxx.x.xxx.xxx:443 ssl;
       listen       xxx.x.x.x:443 ssl;

    server_name  $hostname xxx.x.xxx.xxx;


    ssl                    on;
    ssl_certificate         /etc/nginx/ssl.crt/server.crt.combined;
    ssl_certificate_key     /etc/nginx/ssl.key/server.key;

    root   /var/www/html;
    index  index.html index.htm index.php;


    location ~^/~(?<userdir_user>.+?)(?<userdir_uri>/.*)?$ {
            alias /home/$userdir_user/private_html$userdir_uri;
            index index.html index.htm index.php;
            autoindex on;

            location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                include /etc/nginx/fastcgi_params;
                fastcgi_index index.php;

                #try_files не работает после директивы alias
                if (!-f $request_filename) {
                    return 404;
                }

                fastcgi_param DOCUMENT_ROOT /home/$userdir_user/private_html;
                fastcgi_param SCRIPT_FILENAME $request_filename;

                fastcgi_pass 127.0.0.1:9000;

            }
    } 



    location ~ \.php$ {
            try_files $uri =404;

            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include /etc/nginx/fastcgi_params;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #fastcgi_pass unix:/usr/local/php55/sockets/webapps.sock;
          fastcgi_pass 127.0.0.1:9000;

    }


    include /etc/nginx/nginx-info.conf;
    include /etc/nginx/webapps.ssl.conf;
}

Существует несколько способов включить https на вашем сайте WordPress.

Вы должны обновить URL вашего сайта, включив в него https, если у вас есть доступ к вашей панели управления.

Скриншот страницы настроек WordPress

Вы также можете определить как WP_SITEURL, так и WP_HOME в вашем тестовом wp-config.php

define( 'WP_SITEURL', 'http://example.com.mytestdomain.com' );
define( 'WP_HOME', 'http://example.com.mytestdomain.com' );

Что касается конфигурации nginx:

Вы можете использовать блок if вместо вложения перезаписи в вашу базовую локацию.

if ($host ~* ^example\.com$) {
    rewrite ^(.*)$ https://example.com$1 permanent;
}

Ответ или решение

Чтобы принудительно перенаправлять трафик с HTTP на HTTPS в Nginx, особенно когда используется Cloudflare с режимом Flexible SSL, требуется быть осторожным, чтобы избежать бесконечных циклов редиректов. Ниже приведены подробные шаги для настройки вашего Nginx-сервера:

1. Обновление конфигурации Nginx

Вам нужно настроить ваш блок server, который слушает на 80 порту (HTTP) так, чтобы он перенаправлял все запросы на HTTPS. Ваша конфигурация может выглядеть следующим образом:

server {
    listen       80; 
    server_name  mydomain.com www.mydomain.com; 

    # Перенаправление всех HTTP-запросов на HTTPS
    return 301 https://$host$request_uri;
}

Эта конфигурация выполнит перенаправление всего HTTP-трафика на HTTPS, используя статус код 301 (постоянное перенаправление).

2. Конфигурация блока для HTTPS

Убедитесь, что блок для HTTPS настроен корректно. У вас уже есть хорошее начало, вот пример того, как он должен выглядеть:

server {
    listen       443 ssl; 
    server_name  mydomain.com www.mydomain.com;

    ssl_certificate         /etc/nginx/ssl.crt/server.crt.combined; 
    ssl_certificate_key     /etc/nginx/ssl.key/server.key;

    root   /var/www/html; 
    index  index.html index.htm index.php; 

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

3. Настройка Cloudflare

С Cloudflare в режиме Flexible SSL ваш сервер не получает запроса через HTTPS, поэтому важно, чтобы настройки перенаправления работали только на уровне вашего Nginx и учитывали особенности работы с Cloudflare. Вам не нужно добавлять дополнительный плагин для WordPress, так как вы можете управлять этим через конфигурацию Nginx.

4. Обновите ваш WordPress

Не забудьте изменить адреса вашего сайта в админ-панели WordPress на HTTPS:

  • Перейдите в Настройки > Основные и измените URL вашего WordPress и сайта на https://.

Вы также можете добавить эти строки в файл wp-config.php, чтобы жестко задать адреса:

define('WP_HOME', 'https://mydomain.com');
define('WP_SITEURL', 'https://mydomain.com');

5. Проверка

После внесения всех изменений, проверьте конфигурацию Nginx на наличие синтаксических ошибок:

sudo nginx -t

Если ошибок нет, перезагрузите Nginx для применения изменений:

sudo systemctl reload nginx

6. Заключение

Теперь ваш Nginx-сервер должен корректно перенаправлять все HTTP-запросы на HTTPS, и ваш сайт будет доступен только по защищенному протоколу. Убедитесь, что все ссылки внутри вашего сайта указывают на HTTPS, чтобы избежать смешанного контента.

Оцените материал
Добавить комментарий

Капча загружается...