WordPress utilise un système de réécriture d’URL bien spécifique. Ainsi, lorsque l’on installe le CMS à la racine de son espace Web, tout fonctionne Out Of The Box. Mais lorsqu’il est nécessaire de l’installer dans un sous dossier, quelques ajustements sont nécessaires.

Configuration par défaut pour utiliser WordPress sous Nginx

La configuration Nginx par défaut pour un vhost WordPress est relativement simple à trouver. Voici donc un exemple qui est basé sur PHP FPM, avec un Pool FPM dédié, ainsi qu’une redirection des flux web HTTP vers HTTPS, compatible HTTP2 :

upstream monsiteweb.com {
  server            unix:/var/run/php/monsiteweb.com.sock;
}
server {
  listen 80;
  server_name monsiteweb.com;
  return 301 https://monsiteweb.com$request_uri;

  access_log /var/www/html/monsiteweb.com/log/nginx/access.log combined if=$log_ua;
  error_log /var/www/html/monsiteweb.com/log/nginx/error.log notice;
}
server {
  listen            443 ssl http2;
  server_name       monsiteweb.com;

  set $root "/var/www/html/monsiteweb.com/web";

  root              $root;

  index		  index.php index.html;

  client_max_body_size 256M;

  include snippets/maintenance.conf;
  include snippets/static_files.conf;
  #include snippets/exclusion.conf;
  #include snippets/errors.conf;
  include snippets/letsencrypt.conf;
  include snippets/logging.conf;

  ssl_certificate /etc/letsencrypt/live/monsiteweb.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/monsiteweb.com/privkey.pem;

  proxy_buffer_size   128k;
  proxy_buffers   4 256k;
  proxy_busy_buffers_size   256k;

  location / {
    try_files     $uri $uri/ /index.php?$args;
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Accept-Encoding' 'gzip';
  }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    if (!-f $document_root$fastcgi_script_name) {
      return 404;
    }
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k; 
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_read_timeout 600;
    include       fastcgi.conf;
    fastcgi_pass  monsiteweb.com;
  }

  access_log /var/www/html/monsiteweb.com/log/nginx/access.log combined if=$log_ua;
  error_log /var/www/html/monsiteweb.com/log/nginx/error.log notice;
}

 

Configuration Nginx pour WordPress dans un sous dossier

Pour la mise en place d’un WordPress dans un sous dossier, admettons qu’un site statique ou un autre CMS soit déjà en place à la racine, une nouvelle location doit être ajoutée :

upstream monsiteweb.com {
  server            unix:/var/run/php/monsiteweb.com.sock;
}
server {
  listen 80;
  server_name monsiteweb.com;
  return 301 https://monsiteweb.com$request_uri;

  access_log /var/www/html/monsiteweb.com/log/nginx/access.log combined if=$log_ua;
  error_log /var/www/html/monsiteweb.com/log/nginx/error.log notice;
}
server {
  listen            443 ssl http2;
  server_name       monsiteweb.com;

  set $root "/var/www/html/monsiteweb.com/web";

  root              $root;

  index		  index.php index.html;

  client_max_body_size 256M;

  include snippets/maintenance.conf;
  include snippets/static_files.conf;
  #include snippets/exclusion.conf;
  #include snippets/errors.conf;
  include snippets/letsencrypt.conf;
  include snippets/logging.conf;

  ssl_certificate /etc/letsencrypt/live/monsiteweb.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/monsiteweb.com/privkey.pem;

  proxy_buffer_size   128k;
  proxy_buffers   4 256k;
  proxy_busy_buffers_size   256k;

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

  location / {
    try_files     $uri $uri/ /index.php?$args;
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Accept-Encoding' 'gzip';
  }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    if (!-f $document_root$fastcgi_script_name) {
      return 404;
    }
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k; 
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_read_timeout 600;
    include       fastcgi.conf;
    fastcgi_pass  monsiteweb.com;
  }

  access_log /var/www/html/monsiteweb.com/log/nginx/access.log combined if=$log_ua;
  error_log /var/www/html/monsiteweb.com/log/nginx/error.log notice;
}