J'ai configuré Nginx comme mon serveur Web principal et j'ai deux serveurs basés sur Mochiweb derrière. Certaines demandes sont transmises par procuration inverse à ces deux serveurs. maintenant, je veux accéder à phpmyadmin (situé dans/var/www/nginx-default/phpMyAdmin) en utilisant nginx, mais il continue de dire que l'erreur 404 est introuvable. Suis-je en train de manquer quelque chose d'évident ici?
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;
}
}
Le problème ici est que seule la "meilleure" directive location
est prise, dans cet ordre:
location = <path> (longest match wins)
location ^~ <path> (longest match wins)
location ~ <path> (first defined match wins)
location <path> (longest match wins)
En utilisant cet ensemble de règles, votre /phpmyadmin
location
directive est battue par l'expression régulière ".php$
"location
directive, donc la première est complètement ignorée. De plus, votre directive php fastcgi est câblée à votre /home/me/dev
répertoire, ce qui signifie que phpMyAdmin est totalement inaccessible. Vous pouvez utiliser une réécriture pour obtenir la racine correcte pour vos 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;
}
Définissez directement la "racine". Moins de directives, moins de calcul nécessaires pour définir plus de vars. Il y a aussi d'autres choses (comme fastcgi_param DOCUMENT_ROOT) qui ne seront pas définies correctement dans la réponse actuellement acceptée. Cette méthode gérera tout cela cependant:
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;
}
J'ai lutté avec cela pendant des heures maintenant et aucune des solutions discutées ci-dessus n'a fonctionné dans mon cas (car j'avais besoin d'exécuter index.php, index.php avec des arguments et d'autres scripts php que index.php), mais j'ai finalement atteint les configurations de travail comme suit:
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;
}
Peut-être qu'il recherche index.html? Essayez de passer à
location /phpmyadmin {
root /var/www/nginx-default/phpMyAdmin;
index index.php;
}
et ajoutez la section ci-dessous, pour éviter les problèmes liés au cas
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}