Am configurat cu succes un site wordpress care rulează pe un nginx dockerizat. Când site-ul wordpress este în funcțiune, pot merge la pagina de pornire: https://domeniul_meu.com
sau orice link-uri sau după wp-admin/...
fără nici o problemă.
Dar când merg la https://domeniul_meu.com/sample-page
sau https://domeniul_meu.com/post-id
sau orice rută cu excepția după \wp-admin
atunci:
redirecționează imediat către domeniul rădăcină http://domeniul_meu.com
daca am setat:
try_files $uri $uri/ /index.php$is_args$args;
sau nu redirecționați automat către domeniul rădăcină, ci reveniți 500 Eroare internă a server-ului
dacă am setat (adăugați un /
după index.php):
try_files $uri $uri/ /index.php/$is_args$args;
cu excepția rutei /wp-admin/
când este accesat redirecționează corect către https://my_domain.com/wp-admin/login.php
dacă nu te-ai autentificat și la https://domeniul_meu.com/wp-admin/
dacă sunteți autentificat, în toate cele 2 cazuri de try_files de mai sus.
Iată configurația mea nginx la /nginx/default.conf:
Server {
asculta 80;
asculta [::]:80;
nume_server domeniul_meu.com www.domeniul_meu.com;
Locație / {
returnează 301 https://my_domain.com$request_uri;
}
}
Server {
asculta 443 ssl http2;
asculta [::]:443 ssl http2;
nume_server domeniul_meu.com www.domeniul_meu.com;
index index.php index.html index.htm;
rădăcină /var/www/html/wordpress;
ssl activat;
server_tokens dezactivat;
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 activat;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
add_header X-Frame-Options „SAMEORIGIN” întotdeauna;
add_header X-XSS-Protection „1; mod=bloc” întotdeauna;
add_header X-Content-Type-Options „nosniff” întotdeauna;
add_header Politica de referință „no-referrer-when-downgrade” întotdeauna;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" întotdeauna;
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" întotdeauna;
# activați securitatea strictă a transportului numai dacă înțelegeți implicațiile
Locație / {
try_files $uri $uri/ /index.php$is_args$args;
proxy_pass http://wordpress_host:80;
proxy_set_header Gazdă $http_host;
proxy_set_header X-Forwarded-Proto $schema;
}
locație ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
proxy_pass http://wordpress_host:80;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
proxy_set_header Gazdă $http_host;
proxy_set_header X-Forwarded-Proto $schema;
}
locație ~ /\.ht {
nega totul;
}
locație = /favicon.ico {
log_not_found off; access_log off;
}
locație = /robots.txt {
log_not_found off; access_log off; permite tuturor;
}
locație ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expira max;
log_not_found off;
}
}
Configurez și la wp-config.php:
define('FORCE_SSL_ADMIN', true);
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='activat';
define('WP_SITEURL', 'https://www.my_domain.com/');
define('WP_HOME', 'https://www.my_domain.com/');
Actualizați:
Aici fișierul de compunere docker:
versiunea: '3';
Servicii:
nginx:
imagine: nginx:stable-alpine
porturi:
- „80:80” # nginx ascultă pe 80
- „443:443”
volume:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./wordpress/app:/var/www/html/wordpress
db:
imagine: mysql:8.0
container_name: db-example
reporniți: dacă nu este oprit
fișier_env: ./wordpress/app/.env
mediu inconjurator:
- MYSQL_DATABASE=exemplu
volume:
- ./wordpress/dbdata:/var/lib/mysql
#- ./wordpress/db/db.sql:/docker-entrypoint-initdb.d/install_wordpress.sql #dacă aveți db.sql de intrare pentru proiect aici
comandă: „--default-authentication-plugin=mysql_native_password”
wordpress_host:
depinde de:
- db
imagine: wordpress
container_name: wordpress_host
porturi:
- „8080:80”
reporniți: dacă nu este oprit
fișier_env: ./wordpress/app/.env
mediu inconjurator:
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=rădăcină
- WORDPRESS_DB_PASSWORD=rădăcină
- WORDPRESS_DB_NAME=exemplu
volume:
- ./wordpress/app:/var/www/html/wordpress
volume:
wordpress-host:
dbdata
:
fișier .env:
MYSQL_ROOT_PASSWORD=rădăcină
MYSQL_USER=exemplu
MYSQL_PASSWORD=parolă