que proceso funcionalidad funciona como nginx

proceso - La directriz de ubicación de Nginx no parece estar funcionando. ¿Me estoy perdiendo de algo?



proceso nginx (4)

Configuré Nginx como mi servidor web principal y tengo dos servidores basados ​​en Mochiweb detrás de él. Ciertas solicitudes son enviadas por proxy inverso a estos dos servidores. ahora, quiero acceder a phpmyadmin (ubicado en / var / www / nginx-default / phpMyAdmin) usando nginx, pero sigue diciendo Error 404 no encontrado. ¿Me estoy perdiendo algo obvio aquí?

server { ############### General Settings #################### listen 80; server_name localhost; access_log /home/me/dev/wwwaccess.log; ############## Document Root ####################### location / { root /home/me/dev; index index.html index.htm index.php; } ############## PHPMyAdmin ####################### location /phpmyadmin { root /var/www/nginx-default/phpMyAdmin; index index.html index.htm index.php; } ############## Proxy Settings for FastCGI Server ##### location ~ /.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/me/dev$fastcgi_script_name; include /etc/nginx/fastcgi_params; } ############# Proxy Settings for Mochi1 ############### location /mochi1 { proxy_pass http://127.0.0.1:8000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 3600; proxy_buffering off; } ############# Proxy Settings for Mochi2 ############### location /mochi2 { proxy_pass http://127.0.0.1:8001; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 3600; proxy_buffering off; } ############# Error redirection pages ################ error_page 500 502 503 504 /50x.html; location = /50x.html { root /home/me/dev; } }


El problema aquí es que solo se toma la "mejor" directiva de location , en este orden:

location = <path> (longest match wins) location ^~ <path> (longest match wins) location ~ <path> (first defined match wins) location <path> (longest match wins)

Al utilizar este conjunto de reglas, la directiva de location /phpmyadmin expulsa a la directiva de location expresión regular " .php$ ", por lo que la primera se ignora por completo. Además, su directiva php fastcgi está conectada a su directorio /home/me/dev , lo que significa que phpMyAdmin es totalmente inaccesible. Puede utilizar una reescritura para obtener la raíz correcta para sus scripts phpMyAdmin:

location ~ /.php$ { set $php_root /home/me/dev; if ($request_uri ~* /phpmyadmin) { set $php_root /var/www/nginx-default/phpMyAdmin; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; }


Establezca la ''raíz'' directamente. Menos directivas, menos informática necesaria para establecer más vars. También hay otras cosas (como fastcgi_param DOCUMENT_ROOT) que no se configurarán correctamente en la respuesta aceptada actualmente. Sin embargo, este método manejará todo eso:

location ~ /.php$ { if ($request_uri ~* /phpmyadmin) { root /var/www/nginx-default/phpMyAdmin; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include /etc/nginx/fastcgi_params; }


Luché con esto durante horas y ninguna de las soluciones discutidas anteriormente funcionó para mi caso (ya que necesitaba ejecutar index.php, index.php con argumentos y otros scripts php que index.php), pero finalmente alcancé las configuraciones de trabajo como el seguiente:

location /php-app { passenger_enabled off; alias /path/to/php-app/$1; index index.php index.html; try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/php-app(.*)$ /index.php?q=$1 last; } location ~ /.php$ { alias /path/to/php-app/$1; rewrite ^/php-app(.*)$ $1 last; passenger_enabled off; fastcgi_pass unix:/tmp/php-fpm.socket; fastcgi_index index.php; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /path/to/php-app$fastcgi_script_name; fastcgi_intercept_errors on; }


Tal vez busca index.html? Intenta cambiar a

location /phpmyadmin { root /var/www/nginx-default/phpMyAdmin; index index.php; }

y agregue la sección a continuación, para evitar problemas relacionados con el caso

location /phpMyAdmin { rewrite ^/* /phpmyadmin last; }