I've set up Nginx as my main web server and have two Mochiweb based servers behind it. Certain requests are reverse-proxied to these two servers. now, I want to access phpmyadmin (located at /var/www/nginx-default/phpMyAdmin) using nginx, but it keeps saying Error 404 not found. Am I missing something obvious here?
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; } }
The location directive within NGINX server block allows to route request to correct location within the file system. The directive is used to tell NGINX where to look for a resource by including files and folders while matching a location block against an URL.
Every NGINX configuration file will be found in the /etc/nginx/ directory, with the main configuration file located in /etc/nginx/nginx. conf . NGINX configuration options are known as “directives”: these are arranged into groups, known interchangeably as blocks or contexts .
All NGINX configuration files are located in the /etc/nginx/ directory. The primary configuration file is /etc/nginx/nginx. conf .
If you have any recent version of NGINX you should look at try_files which just made life much easier. What we changed is that we try to see if $uri exists without requiring if . Using try_files means that you can test a sequence. If $uri doesn't exist, try $uri/ , if that doesn't exist try a fallback location.
The problem here is that only the "best" location
directive gets taken, in this order:
location = <path> (longest match wins) location ^~ <path> (longest match wins) location ~ <path> (first defined match wins) location <path> (longest match wins)
Using this ruleset, your /phpmyadmin
location
directive is beaten out by the regular expression ".php$
" location
directive, so the former is ignored entirely. Additionally, your php fastcgi directive is hard-wired to your /home/me/dev
directory, which means that phpMyAdmin is totally inaccessible. You can use a rewrite to get the correct root for your phpMyAdmin scripts:
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; }
Set the 'root' directly. Less directives, less computing needed to set more vars. There are also other things (like fastcgi_param DOCUMENT_ROOT) that will not be set correctly in the currently accepted answer. This method will handle all that however:
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; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With