Назад | Перейти на главную страницу

Nginx перезаписывает каталог в приложение Symfony, но удаляет каталог хоста

У меня есть виртуальная машина с несколькими приложениями для разработки. Базовый веб-каталог выглядит так:

/var/web/subdoms/:
    index.php
    MyApp/
    SomeOtherApp/

У меня есть файл конфигурации Nginx, в котором корень указан как / var / web / subdoms, например:

http://myserver/  -> /var/web/subdoms/index.php.

В подкаталоге MyApp находится проект Symfony2. В каталоге SomeOtherApp находится общее приложение perl-cgi

http://myserver/SomeOtherApp  -> /var/web/subdoms/SomeOtherApp/index.pl

Запросы к MyApp необходимо перенаправлять в подкаталог, например:

http://myserver/MyApp/    ->  /var/web/subdoms/MyApp/symfony/web/

Оттуда запросы необходимо переписать, чтобы запросы доставлялись в app.php ala:

http://myserver/MyApp/          -> /var/web/subdoms/MyApp/symfony/web/app.php
http://myserver/MyApp/hello/you -> /var/web/subdoms/MyApp/symfony/web/app.php/hello/you

Я могу сделать это, установив свой корень: / var / web / subdoms / MyApp / symfony / web / и запросив без «MyApp», следуя примерам из документации Symfony. Однако, когда я пытаюсь вложить приложение в один каталог (чтобы мой сервер мог обслуживать несколько приложений в одном домене вместо того, чтобы доминировать над приложением Symfony), часть «MyApp» добавляется к url ​​ala:

http://myserver.com/MyApp/hello/you  -> /var/web/subdoms/MyApp/symfony/web/app.php/MyApp/hello/you

Затем symfony жалуется, что не может найти маршрут «MyApp / hello / you». Я мог бы решить эту проблему, добавив «MyApp» ко всем моим маршрутам Symfony, но это кажется неуклюжим. Я бы предпочел найти способ через Nginx перенаправить каталог без URL-адреса в Symfony.

Если это поможет, вот моя текущая конфигурация nginx (с удаленными другими приложениями):

server {
    listen          80;
    server_name myserver;

    root /var/web/subdoms;
    error_log /var/log/nginx/rr_error.log;
    access_log /var/log/nginx/rr_access.log;

    location /MyApp/ {
        rewrite ^/MyApp/(.*)$ /MyApp/symfony/web/app_dev.php/$1 last;
    }

    #was the way to redirect requests to app_dev.php when MyApp/Symfony/web was root
    location @rewriteRR {
        rewrite ^(.*)$ /app_dev.php/$1 last;
    }

    location ~ \.php(/|$) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_pass 127.0.0.1:9000;
    }

    location ~ /\.ht {
        deny all;
    }

}

В заключение я понимаю, что, вероятно, лучше всего использовать субдомен для разделения приложений (или нескольких доменов), но, как было сказано ранее, это сервер разработки. Разделение его между поддоменами, разными хостами и т. Д. Было бы слишком дорогостоящим для того, что это такое. Мне нужно хранить все это на одном и том же хосте / домене по соображениям стоимости (сертификаты SSL / плата за хостинг), избегая при этом самоподписывания моих сертификатов (потому что во время разработки приложения используются другими людьми в случайном контексте и самозаверяющие ошибки раздражают их).