Por que meu alias nginx não está funcionando?

9

Estou tentando configurar um alias para que, quando alguém acessar /phpmyadmin/ , nginx o extraia de /home/phpmyadmin/ e não da raiz de documentos comum. No entanto, toda vez que eu puxar o URL, ele me dá um 404 em todos os itens não puxados através de fastcgi. O fastcgi parece estar funcionando bem, enquanto o resto não está. strace está me dizendo que está tentando extrair todo o resto da raiz do documento usual, mas não consigo entender o porquê. Alguém pode fornecer algum insight?

Aqui está a parte relevante da minha configuração:

            location ~ ^/phpmyadmin/(.+\.php)$
            {
                    include fcgi.conf;
                    fastcgi_index index.php;
                    fastcgi_pass  unix:/tmp/php-cgi.sock;
                    fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
            }

            location /phpmyadmin
            {
                    alias /home/phpmyadmin/;
            }
    
por Rob 01.04.2012 / 06:30

4 respostas

12

Descobri um caminho. Não tenho certeza se é o melhor, mas certamente está funcionando agora.

Veja o que eu fiz:

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }
    
por 03.04.2012 / 07:03
1

Não tenho certeza, mas você já tentou escrever desta forma:

location /phpmyadmin/
        {
                alias /home/phpmyadmin/;
        }

Além disso, qual é o URI do qual você está tentando acessá-lo?

Tanto quanto eu entendo, você tem que usar o URI

/home/phpmyadmin/

e não apenas

/phpmyadmin/

Você pode ler mais sobre isso aqui: link

    
por 02.04.2012 / 22:30
1

Tente

location ^~ /phpMyAdmin/
{
    alias /home/phpmyadmin/;

    location ~ \.php$
    {
        include fcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
    }
}
    
por 29.03.2015 / 19:09
1

O motivo pelo qual isso não funciona é que o servidor está escolhendo o local baseado em regex e não o local baseado em prefixo que possui o alias nele.

Ele só escolherá um. Existe um operador que você pode usar para obter um local baseado em prefixo para superar um regex, mas você verá que o php não funcionará. A solução será uma como a resposta do kervin, onde o regex do PHP é aninhado dentro do local com a diretiva alias.

Suspeito, no entanto, que sua configuração de SCRIPT_FILENAME possa não funcionar, pois há uma capitalização diferente na URL e no diretório com alias.

    
por 02.11.2017 / 22:44

Tags