¿Por qué mi alias nginx no funciona?

10

Estoy tratando de configurar un alias para que cuando alguien acceda /phpmyadmin/, nginx lo extraiga /home/phpmyadmin/de la raíz del documento habitual en lugar de hacerlo. Sin embargo, cada vez que extraigo la URL, me da un 404 en todos los elementos que no se extraen a través de fastcgi. fastcgi parece estar funcionando bien, mientras que el resto no. straceme dice que está tratando de extraer todo lo demás de la raíz del documento habitual, pero no puedo entender por qué. ¿Alguien puede proporcionar alguna idea?

Aquí está la parte relevante de mi configuración:

            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/;
            }
Robar
fuente
Como usuario de Apache desde hace mucho tiempo nuevo en nginx, encuentro esto realmente extraño e innecesariamente complicado. Pasé varias horas revisando la documentación para tratar de entender por qué. ¿Alguien puede explicar este comportamiento? Los alias deberían ser solo eso: un alias de una ubicación.
tu-Reinstate Monica-dor duh
Por lo que yo entiendo, los alias son "solo eso", aunque tenga en cuenta que si omite el seguimiento /en el alias y la locationdirectiva, la solicitud /phpmyadminfilerealmente lo atrapará /home/phpmyadminfile. En cuanto a por qué la configuración en la pregunta no funciona, me parece correcta, por lo que sospecho que hay otra locationdirectiva que no se muestra y que coincide cuando no está prevista. En este caso, como aliastermina con el locationprefijo, los documentos nginx sugieren usar en su root /home;lugar .
Scott Stevens

Respuestas:

12

Descubrí un camino. No estoy seguro de si es el MEJOR, pero ciertamente está funcionando en este momento.

Esto es lo que hice:

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

No estoy seguro, pero ¿has intentado escribirlo de esta manera?

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

Además, ¿cuál es el URI desde el que está intentando acceder?

Por lo que yo entiendo, tienes que usar el URI

/home/phpmyadmin/

y no solo

/phpmyadmin/

Puede leer más sobre esto aquí: http://wiki.nginx.org/HttpCoreModule

Black-Pixel
fuente
Gracias por una respuesta, al menos. Pero sí. Lo he intentado La misma cosa.
Rob el
Quizás tenga que agregar el alias a la otra ubicación. Puede comparar su configuración con las de allí: serverfault.com/questions/223028/…
Black-Pixel
1

Tratar

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;
    }
}
Kervin
fuente
1

La razón por la que esto no funciona es que el servidor está eligiendo la ubicación basada en expresiones regulares y no la ubicación basada en prefijos que tiene el alias.

Solo elegirá uno. Hay un operador que puede usar para obtener una ubicación basada en prefijo para superar a una expresión regular, pero luego encontrará que php no funcionará. La solución será como la respuesta de kervin, donde la expresión regular de PHP está anidada dentro de la ubicación con la directiva alias.

Sin embargo, sospecho que su configuración SCRIPT_FILENAME puede no funcionar allí ya que hay diferentes mayúsculas en la URL y el directorio con alias.

thomasrutter
fuente