Configurer WordPress et Rails dans Nginx

J’ai mis en place nginx pour l’application Rails qui fonctionne parfaitement pour moi. Maintenant, je souhaite déplacer mon blog WordPress de blog.website.com vers website.com/blog afin que les robots d’exploration du Web le considèrent comme faisant partie du site.

J’ai créé un lien symbolique dans le répertoire public/ mon application Rails et ajouté ce qui suit à ma configuration nginx:

 # Rails server server { root /project/path/current/public; server_name project.com; passenger_enabled on; rails_env production; client_max_body_size 20m; if ($http_x_forwarded_proto != 'https') { return 301 https://$host$request_uri; } location /blog { index index.html index.php; try_files $uri $uri/ /blog/index.php?q=$uri&$args; if (!-e $request_filename) { rewrite ^.+?(/blog/.*.php)$ $1 last; rewrite ^ /blog/index.php last; } } location ~ \.php$ { try_files $uri =404; fastcgi_intercept_errors on; include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php5-fpm.sock; } } 

Cela fonctionne très bien. Mais ce que je voudrais faire, c’est sauter la partie du lien symbolique. Je voudrais que nginx achemine directement vers le répertoire wordpress. J’ai essayé de changer le bloc /blog pour:

 location ^~ /blog { root /home/ubuntu/apps/blog; index index.html index.php; try_files $uri $uri/ /blog/index.php?q=$uri&$args; if (!-e $request_filename) { rewrite ^.+?(/blog/.*.php)$ $1 last; rewrite ^ /blog/index.php last; } } 

Cela fonctionne, car je suis correctement redirigé vers le dossier wordpress mais mon serveur ne sait pas quoi faire avec les fichiers php et les envoie à mon navigateur sous forme de fichiers à télécharger.

J’ai essayé d’ \.php$ emplacement \.php$ emplacement /blog , mais cela entraîne une erreur 404.

Qu’est-ce qui ne va pas avec le morceau suivant et comment le réparer?

 location ^~ /blog { root /home/ubuntu/apps/blog; index index.html index.php; try_files $uri $uri/ /blog/index.php?q=$uri&$args; if (!-e $request_filename) { rewrite ^.+?(/blog/.*.php)$ $1 last; rewrite ^ /blog/index.php last; } location ~ \.php$ { try_files $uri =404; fastcgi_intercept_errors on; include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php5-fpm.sock; } } 

Je n’ai pas corrigé l’extrait de la question mais j’ai réussi à résoudre le problème avec la configuration de nginx sans utiliser de lien symbolique en utilisant deux blocs de server .

 server { location / { proxy_pass http://localhost:82/; } location /blog { root /var/proj/blog/current; fastcgi_intercept_errors on; include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php5-fpm.sock; } } # Rails server server { listen 82; root /var/proj/site/current/public; server_name site.com; passenger_enabled on; rails_env staging; client_max_body_size 20m; # other configuration }