Comportamento inesperado com localização aninhada, alias e upstream do php-fpm

1

Boa noite,

~ O que eu gostaria de fazer ~

Eu preciso de um bloco de localização padrão que corresponda a qualquer coisa, location / {} , eu acho, este bloco tem seu próprio diretório raiz. ele tem que servir qualquer arquivo estático e interpretar quaisquer arquivos php dentro de sua raiz ou subpastas de documentos. (Eu configurei isso e parece funcionar bem)

E aqui é onde eu preciso de ajuda :(

Dentro deste mesmo bloco de servidores, eu gostaria de hospedar um aplicativo symphony do php servido ao atingir mydomain.foo/panel/ area. Então eu adicionei um ^~ /panel/ location (uri começa com / panel /)

Meu problema é que o try_files não se comporta como eu esperava (redirecionamento interno para o último local aninhado no caso de uri não corresponder ao local aninhado). Veja os comentários do código abaixo.

~ Minha configuração como está ... ~

upstream phpfcgi {
    server unix:/var/run/php5-fpm.sock;
}

server {
    listen 80;
    server_name domain.tld;

    ## Default locations
    location / {
        root /home/me/sites/default/www;
        index index.php;
        location ~ \.php$ {
            include fastcgi.conf;
            fastcgi_pass phpfcgi;
        }
        location ~ /(.+) {
            try_files $uri $1 =404;
        }
    }

    ## panel area
    location ^~ /panel/ {
        # Public files are located in sf/web sub-directory
        alias /home/me/sites/sf/web/;

        # Since uri starts with '/panel/', I expect NGINX to execute try_files as a last resort.
        # if nested location do not match, and uri is not an existing file,
        # shouldn't nginx do an internal redirect with the 2nd try_files argument
        # and finally hit the nested location (triggering fastcgi_pass) ?
        # But try_files is ignored and nginx falls back to "/" location above instead.
        try_files $uri /panel/app_dev.php$is_args$args;

        # FastCGIpass to upstream
        location ~ (app_dev|config)\.php(/|$) {
            try_files $fastcgi_script_name =404;
            set $path_info $fastcgi_path_info;
            fastcgi_param PATH_INFO $path_info;
            include fastcgi.conf;
            fastcgi_pass phpfcgi;
        }
    }

    # Custom errors
    error_page 403 404 =404 @null;
    error_page 324 500 502 503 504 =500 @null;
    location @null {
        root /home/me/sites/_;
        rewrite ^.+$ /$status.html break;
        try_files $uri 444;
    }
}

Se minha configuração for muito desajeitada, como posso atender aos meus requisitos? (local padrão com a raiz do documento e uma área especial servindo meu aplicativo php, no mesmo servidor)?

A documentação do NGINX está melhorando, mas ainda há coisas que não entendo no fluxo de processamento da solicitação.

Alguma solução / sugestão / melhoria?

Obrigado :)

    
por Stphane 11.01.2016 / 00:49

1 resposta

0

Você está usando blocos de localização aninhados. Eu não os usei porque eu realmente não os entendo, mas eles parecem estar adicionando complexidade. Tente usar blocos de localização que não estão aninhados. Sua configuração parece bem diferente de qualquer outra que eu já vi, mas minha experiência nginx é limitada.

Eu tenho um exemplo da minha configuração nesta pergunta.

Problema do Nginx HHVM Wordpress com a execução do PHP em um subdiretório intermediário

Há algumas práticas recomendadas aqui .

Essa pergunta também inclui um exemplo de como depurar essas coisas, adicionando cabeçalhos e olhando para eles. Torna as coisas muito mais fáceis de entender e depurar. Se isso é tudo o que você recebe da minha resposta, acho que será valioso.

    
por 11.01.2016 / 01:55

Tags