Configuration de WP avec nginx, php-fpm et une dose de ssl

Ayant Symfony3 qui tourne bien, j’ai voulu modifier ma configuration de nginx et non tout refaire. Après de nombreux problèmes et de longues recherches, j’ai réussi à faire fonctionner le tout ce qui n’est pas forcément évident. Je n’ai mis que les parties spécifiques (i.e. location) et non la configuration de base serveur.
Voici donc mon fichier de conf pour avoir sf3 sur / et le WordPress sur /blog :

# Blog at https://openentreprises.fr/blog
	location /blog {
		root /my_path_to_www_not_blog_folder/;
		index index.php;
		try_files $uri $uri/ /blog/index.php?$args;

		location ~ \.php$ {
			try_files $uri =404;
			include /etc/nginx/fastcgi_params;
			fastcgi_param HTTPS off;
			fastcgi_index index.php;
			fastcgi_read_timeout 120;
			fastcgi_pass php7-fpm-sock;
			fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		}
		# If you use a wordpress plugin to manage your sitemap, you need some rewrite rules
		rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/blog/index.php?xml_sitemap=params=$2" last;
		rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/blog/index.php?xml_sitemap=params=$2;zip=true" last;
		rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/blog/index.php?xml_sitemap=params=$2;html=true" last;
		rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/blog/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
	}

	# Symfony at https://openentreprises.fr/
	location / {
		index app.php;
		root /my_path_to_web_in_symfony/;
		# Symfony uses app.php and not index.php
		try_files $uri $uri/ /app.php?$args;

		location ~ \.php$ {
			try_files $uri =404;
			include /etc/nginx/fastcgi_params;
			fastcgi_param HTTPS off;
			fastcgi_index index.php;
			fastcgi_read_timeout 120;
			fastcgi_pass php7-fpm-sock;
			fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		}
	}

 

Par ailleurs pour ceux qui souhaitent utiliser ssl pour des raisons de SEO, sécurité ou autre, nginx ne transfert pas les headers a priori à WordPress. J’ai donc forcé la fonction is_ssl() à true dans le fichier wp-includes/load.php ligne 960 :

function is_ssl() {return true;}

Rien de bien compliqué mais sachez que ce changement empêche toute adaptation automatique du code donc soyez sur que votre serveur est bien configuré.

Leave a Reply

Your email address will not be published. Required fields are marked *