rewriteengine redirects page examples example convert another nginx

redirects - nginx rewriteengine



NGINX try_files+directivas de alias (3)

Este es un error de larga data en nginx . Pero puede evitar utilizar nuevamente la directiva root . Es un truco, pero al menos funciona.

server { index index.php; root /home/alex/www/test2; server_name local.test.ru; location /blog { root /home/alex/www/test1; try_files $uri $uri/ /blog$is_args$args; } }

Intento servir el subdirectorio de solicitud / blog de un sitio con el código php, ubicado en una carpeta fuera del directorio raíz del documento. Aquí está mi configuración de host:

server { server_name local.test.ru; root /home/alex/www/test2; location /blog { alias /home/alex/www/test1; try_files $uri $uri/ /index.php$is_args$args; location ~ /.php$ { fastcgi_split_path_info ^(/blog)(/.*)$; fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; } } }

Y obtengo solicitudes como

wget -O - http://local.test.ru/blog/nonExisting

solo un código del archivo index.php de / home / alex / www / test2 / folder.

Sin embargo, esta configuración:

server { server_name local.test.ru; root /home/alex/www/test2; location /blog { alias /home/alex/www/test1; try_files $uri $uri/ /blog$is_args$args; index index.php; location ~ /.php$ { fastcgi_split_path_info ^(/blog)(/.*)$; fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; } } }

me da el archivo index.html de / home / alex / www / test2 /. Por favor, dame una pista, ¿por qué? ¿Y cómo puedo forzar a NGINX a procesar /home/alex/www/test1/index.php en su lugar?


Hay otra solución que brinda más flexibilidad. Consiste en una directiva proxy_pass que apunta a 127.0.0.1 y otro bloque de server .

En tu caso, debería verse así:

upstream blog.fake { server 127.0.0.1; } server { server_name local.test.ru; root /home/alex/www/test2; index index.html; location /blog { proxy_pass http://blog.fake/; } } server { server_name blog.fake; root /home/alex/www/test1; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ /.php(/|$) { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+/.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; } }


No pudimos hacerlo funcionar especificando la raíz dentro del bloque de ubicación. La solución para nosotros fue usar alias en su lugar. Tenga en cuenta que es necesario repetir la ruta de la ubicación dos veces en la directiva try_files, y luego también en el bloque de configuración .php:

server { server_name localhost; root /app/frontend/www; location /backend/ { alias /app/backend/www/; # serve static files direct + allow friendly urls # Note: The seemingly weird syntax is due to a long-standing bug in nginx: https://trac.nginx.org/nginx/ticket/97 try_files $uri $uri/ /backend//backend/index.php?$args; location ~ /backend/.+/.php$ { include fastcgi_params; fastcgi_buffers 256 4k; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param HTTPS $proxied_https; fastcgi_pass phpfiles; } } # / location }

Fuente: nginx/conf.d/app.conf de la pila debian-php-nginx en el proyecto docker-stack