I just switched from Apache2 to Nginx and I met some issues having the
same
configuration. What I want to do is having multiple Symfony2 apps on the
same domain name. Each app will have a subdirectory and a main app will
be
on the domain name itself. For instance : http://mydomain/ → main app http://mydomain/subdir1 → another app http://mydomain/subdir2 → yet another app
One of Symfony2 feature is to have only three php files to be executed,
and
all the URL are rewritten to those files. You can found basic
configuration
for Symfony2 at this address if you need more information : Symfony | NGINX
Now after many hours of configuration, with the help of debug logs, I
almost
did it. This is my current configuration :
server {
listen 80;
server_name mydomain;
root /server/www/main-app/web;
location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}
location /subdir1/ {
# alias /server/www/other-app1/web;
set $root "/server/www/other-app1/web";
# try to serve file directly, fallback to app.php
try_files $uri @rewriteapp;
}
location / {
index app.php;
set $root "/server/www/main-app/web";
# try to serve file directly, fallback to app.php
try_files $uri @rewriteapp;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Why did I create a variable “$root” ? Because when I was using the root
(or
alias) directive in a location block and the variable $document_root, I
found out that this variable has as final value (in the location
app.php)
the first root directive in the server or the default root location.
With this configuration, it almost work. The main app works and the
subdirectories are correctly sent to their directory. The last problem
is
that the URI processed by the file app.php also contains the
subdirectory in
it, so the others apps send 404 for all the URL. I tried to fix that by
changing “REQUEST_URI” parameter, but with that the app.php generate
wrong
URL without the subdirectory.
So is their a way to achieve this configuration ? Thanks you !
all the URL are rewritten to those files. You can found basic configuration
location @rewriteapp {
location / {
the first root directive in the server or the default root location.
With this configuration, it almost work. The main app works and the
subdirectories are correctly sent to their directory. The last problem is
that the URI processed by the file app.php also contains the subdirectory in
it, so the others apps send 404 for all the URL. I tried to fix that by
changing “REQUEST_URI” parameter, but with that the app.php generate wrong
URL without the subdirectory.
So is their a way to achieve this configuration ? Thanks you !