Я видел, что у многих людей возникла проблема с настройкой одного сервера nginx на несколько приложений symfony2. Тем не менее, никто не хотел того же самого и имел ту же проблему, что и я. Я хочу сделать несколько приложений в одном домене. Одно основное приложение ответит непосредственно на домен, а остальные будут в подкаталоге псевдонима. со схемой:nginx с несколькими приложениями symfony2
http://mydomain/ -> main app
http://mydomain/subdir1 -> another app
http://mydomain/subdir2 -> yet another app
Я пытался сам сделать это, и главное приложение работает отлично. Но подкаталоги большую часть времени перехватываются основным приложением, которое выдает 404. Когда я пытаюсь добавить app.php в URL-адрес подкаталога (например, http://mydomain/subdir1/app.php/my/route
), сервер возвращается 404.
Это то, что я до сих пор:
server {
listen 80;
server_name mydomain;
root /server/www/main-app/web;
location/{
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
location /subdir1/ {
alias /server/www/other-app1/web;
# try to serve file directly, fallback to app.php
try_files $uri /server/www/other-app1/web/app.php$is_args$args;
# PROD
location ~ ^/other-app1/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
}
Спасибо, что обратились за помощью!
EDIT 26/12/2014: Для тех, кто не понял, что именно я хочу: Я хочу разместить несколько приложений Symfony2 на такое же доменное имя без субдомена. Без субдомена я должен использовать подкаталог. До этого я пробовал nginx, я использовал Apache2, и было легко сделать трюк с Alias.
Я сделал больше поиска и узнал, что «псевдоним» и «try_files» не очень хорошие друзья (см. Этот отчет об ошибке: http://trac.nginx.org/nginx/ticket/97). Поэтому я активировал режим отладки и много тестов. Теперь я почти сделал это. Основные приложения больше не перехватывают подкаталоги, а остальные приложения отвечают. Но те другие приложения ответили на 404, поэтому я посмотрел их журналы. И я узнал, что они искали шаблон URL с подкаталогом в нем. Например, они искали /subdir1/login
вместо /login
. Так что это моя новая конфигурация:
server {
listen 80;
server_name mydomain;
root /server/www/main-app/web;
location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}
location /subdir1/ {
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;
}
}
Как вы можете видеть, хитрость заключается в том, чтобы не использовать $ DOCUMENT_ROOT для SCRIPT_FILENAME и я создал свой собственный вместо. Я не знаю, как маршрутизатор symfony2 просматривает шаблон в URL-адресе, но с моей предыдущей конфигурацией (Apache2) у меня никогда не было этой проблемы. Так что, может быть, это еще один трюк, чтобы отправить правильный путь к скрипту app.php.
Еще раз благодарю вас за помощь!
Благодаря вашей помощи я пришел к аналогичному решению. Я попробовал миллион вещей, но это было то, что работало (см. Отдельный ответ) – Nilz11