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ă