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


10

Estou tentando configurar um alias para que, quando alguém acessar /phpmyadmin/, o nginx o extraia da /home/phpmyadmin/raiz do documento habitual, e não da mesma. No entanto, toda vez que eu pego a URL, é exibido um erro 404 em todos os itens não extraídos do fastcgi. fastcgi parece estar funcionando bem, enquanto o resto não está. straceestá me dizendo que está tentando extrair todo o resto da raiz usual do documento, mas não consigo entender o porquê. Alguém pode fornecer algumas dicas?

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

Como um usuário apache de longa data, novato no nginx, acho isso realmente estranho e desnecessariamente complicado. Passei várias horas examinando a documentação para tentar entender o porquê. Alguém por favor pode explicar esse comportamento? Aliases devem ser exatamente isso - um alias para um local.
tu Reinstala Monica-dor duh 28/10

Pelo que entendi, os aliases são "apenas isso", embora observe que, se você omitir a trilha /no alias e na locationdiretiva, a solicitação /phpmyadminfilerealmente o levará /home/phpmyadminfile. Quanto ao motivo pelo qual a configuração da pergunta não funciona, parece correta para mim, então suspeito que haja outra locationdiretiva não mostrada que corresponda quando não pretendida. Neste caso, como as aliasextremidades com o locationprefixo, os documentos sugerem o uso de nginx root /home;vez .
21417 Scott

Respostas:


12

Descobri uma maneira. Não tenho certeza se é o MELHOR, mas certamente está funcionando agora.

Aqui está o que eu fiz:

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }

2

Não tenho certeza, mas você já tentou escrevê-lo desta maneira:

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

Além disso, qual é o URI a partir 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: http://wiki.nginx.org/HttpCoreModule


Obrigado por uma resposta, pelo menos. Mas sim. Eu tentei isso. Mesma coisa.
Rob

Talvez você precise adicionar o alias ao outro local. Você poderia comparar o seu config para aqueles lá: serverfault.com/questions/223028/...
Black-Pixel

1

Experimentar

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

1

A razão pela qual isso não funciona é que o servidor está escolhendo o local baseado em regex e não o local baseado em prefixo que contém o alias.

Ele escolherá apenas 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á semelhante à resposta do kervin, em que o regex do PHP está aninhado dentro do local com a diretiva de alias.

Eu suspeito, no entanto, sua configuração SCRIPT_FILENAME pode não funcionar lá, pois existe uma capitalização diferente na URL e no diretório alias.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.