Я успешно настроил сайт WordPress, работающий на докеризованном nginx. Когда сайт WordPress запущен и работает, я могу перейти на домашнюю страницу: https://мой_домен.com
или любые ссылки или после wp-админ/...
без каких-либо проблем.
Но когда я иду в https://мой_домен.com/пример-страницы
или же https://мой_домен.com/post-id
или любой маршрут, кроме после \wp-админ
тогда:
сразу перенаправляет на корневой домен http://мой_домен.com
если я установлю:
try_files $uri $uri/ /index.php$is_args$args;
или не перенаправлять автоматически на корневой домен, а возвращать внутренняя ошибка сервера 500
если я установлю (добавлю /
после index.php):
try_files $uri $uri/ /index.php/$is_args$args;
с маршрутом исключения /вп-админ/
при доступе перенаправляет правильно на https://мой_домен.com/wp-admin/логин.php
если вы не вошли в систему и https://мой_домен.com/wp-admin/
если вы вошли в систему, во всех двух случаях try_files выше.
Вот мой конфиг nginx в /nginx/default.conf:
сервер {
слушать 80;
слушать [::]:80;
имя_сервера мой_домен.com www.мой_домен.com;
место расположения / {
вернуть 301 https://my_domain.com$request_uri;
}
}
сервер {
слушать 443 ssl http2;
слушать [::]:443 ssl http2;
имя_сервера мой_домен.com www.мой_домен.com;
индекс index.php index.html index.htm;
корень /var/www/html/wordpress;
SSL включен;
server_tokens отключены;
ssl_certificate /etc/nginx/ssl/live/my_domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/my_domain.com/privkey.pem;
ssl_dhparam /etc/nginx/dhparam/dhparam-2048.pem;
ssl_buffer_size 8k;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers включен;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
add_header X-Frame-Options «SAMEORIGIN» всегда;
add_header X-XSS-Защита "1; режим = блок" всегда;
add_header X-Content-Type-Options «нюхать» всегда;
add_header Referrer-Policy «без реферера при понижении» всегда;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" всегда;
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# включайте строгую транспортную безопасность, только если вы понимаете последствия
место расположения / {
try_files $uri $uri/ /index.php$is_args$args;
proxy_pass http://wordpress_host:80;
proxy_set_header Хост $http_host;
proxy_set_header X-Forwarded-Proto $ схема;
}
расположение ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
proxy_pass http://wordpress_host:80;
fastcgi_index index.php;
включить fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
proxy_set_header Хост $http_host;
proxy_set_header X-Forwarded-Proto $ схема;
}
местоположение ~ /\.ht {
отрицать все;
}
местоположение = /favicon.ico {
log_not_found выключен; доступ_лог выключен;
}
местоположение = /robots.txt {
log_not_found выключен; доступ_лог выключен; позволять все;
}
расположение ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
истекает макс.;
log_not_found выключен;
}
}
Я также настраиваю в wp-config.php:
определить('FORCE_SSL_ADMIN', правда);
если ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='включено';
определить('WP_SITEURL', 'https://www.my_domain.com/');
определить('WP_HOME', 'https://www.my_domain.com/');
Обновлять:
Здесь файл компоновки докера:
версия: «3»;
Сервисы:
нгинкс:
изображение: nginx: стабильный-альпийский
порты:
- "80:80" # nginx слушает на 80
- "443:443"
тома:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./wordpress/приложение:/var/www/html/wordpress
дБ:
изображение: MySQL: 8.0
имя_контейнера: пример базы данных
перезапуск: если не остановлен
env_file: ./wordpress/app/.env
среда:
- MYSQL_DATABASE=пример
тома:
- ./wordpress/dbdata:/var/lib/mysql
#- ./wordpress/db/db.sql:/docker-entrypoint-initdb.d/install_wordpress.sql #если у вас есть db.sql ввода проекта здесь
команда: '--default-authentication-plugin=mysql_native_password'
wordpress_host:
зависит от:
- дб
изображение: вордпресс
имя_контейнера: wordpress_host
порты:
- "8080:80"
перезапуск: если не остановлен
env_file: ./wordpress/app/.env
среда:
-WORDPRESS_DB_HOST=дб:3306
- WORDPRESS_DB_USER=корень
- WORDPRESS_DB_PASSWORD=корень
- WORDPRESS_DB_NAME=пример
тома:
- ./wordpress/приложение:/var/www/html/wordpress
тома:
wordpress-хост:
dbdata
:
.env-файл:
MYSQL_ROOT_PASSWORD = корень
MYSQL_USER=пример
MYSQL_PASSWORD=пароль