Nginx reescreve o diretório para o Symfony App mas remove o diretório do host

1

Eu tenho uma VM com vários aplicativos de desenvolvimento vivendo nela. O diretório web básico se parece com:

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

Eu tenho meu arquivo de configuração do Nginx especificando a raiz como / var / web / subdoms, de modo que:

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

No subdiretório MyApp, é um projeto do Symfony2. No diretório SomeOtherApp é um aplicativo genérico perl-cgi

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

As solicitações para o MyApp precisam ser redirecionadas para um subdiretório, como:

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

A partir daí, as solicitações precisam ser reescritas para que as solicitações sejam entregues no 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

Eu posso fazer isso quando eu definir minha raiz: / var / web / subdoms / MyApp / symfony / web / e solicitar sans 'MyApp' seguindo os exemplos nas documentações do symfony. No entanto, quando tento aninhar o aplicativo em um diretório (para que meu servidor possa servir vários aplicativos no mesmo domínio, em vez de ser dominado pelo aplicativo symfony), a parte "MyApp" é adicionada à ala de URL:

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

E então o symfony reclama que não pode encontrar a rota "MyApp / hello / you". Eu poderia resolver isso adicionando 'MyApp' a todas as minhas rotas do symfony, mas isso parece desajeitado. Eu prefiro encontrar um caminho através do Nginx para encaminhar o diretório url sans para o Symfony.

Se isso ajudar, aqui está minha configuração atual do nginx (com os outros aplicativos removidos):

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;
    }

}

Como conclusão, eu sei que provavelmente é melhor usar um subdomínio para separar os aplicativos (ou vários domínios), mas como dito anteriormente, este é um servidor de desenvolvimento. Dividindo-o entre sub-domínios, hosts diferentes, etc seria muito caro para o que é. Eu preciso manter tudo no mesmo host / domínio por motivos de custo (SSL Certs / taxas de hospedagem), evitando auto-assinar meus certificados (porque enquanto o desenvolvimento, os aplicativos são usados por outras pessoas em um contexto casual e os erros auto-assinados irritá-los).

    
por Fodagus 16.10.2013 / 17:33

0 respostas

Tags