Вопрос или проблема
Если я получаю доступ напрямую через 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, если у вас есть доступ к вашей панели управления.
Вы также можете определить как 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, чтобы избежать смешанного контента.