Configuration
如何正確使用 NginX 位置指令?
我正在嘗試使用通過 apt 在帶有 NginX 的 Ubuntu 10.10 上安裝的 phpmyadmin 軟體包,雖然我最終讓它工作了,但我認為我做的不正確:
server { listen 80; ## listen for ipv4 server_name vpsnet.dev; error_log /home/robin/dev/vpsnet/error.log; access_log /var/log/nginx/vpsnet.access.log; location / { root /home/robin/dev/vpsnet/webroot; index index.php index.html; if (-f $request_filename) { break; } if (!-f $request_filename) { rewrite ^/(.+)$ /index.php?url=$1 last; break; } } location /phpmyadmin { root /usr/share; index index.php index.html; } location ~ ^/phpmyadmin/.*\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param SERVER_NAME $host; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/robin/dev/vpsnet/webroot/$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param SERVER_NAME $host; } }
我正在談論的部分特別是這部分:
location /phpmyadmin { root /usr/share; index index.php index.html; } location ~ ^/phpmyadmin/.*\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param SERVER_NAME $host; }
如果我將
root
指令/usr/share/phpmyadmin
分別設置為 和fastcgi_param SCRIPT_FILENAME
,/usr/share/phpmyadmin/$fastcgi_script_name;
我會得到 404。我想伺服器正在將
/phpmyadmin/
URL 的一部分傳遞給 fastcgi 伺服器,但我對此感到困惑,因為我來自使用 Apache,而這種事情不是這樣工作的。我只是想知道是否有人可以對此有所了解,為什麼會這樣,以及我是否做錯了什麼。一個“完美”的設置會很棒,或者至少有一些關於如何更好地理解 NginX 配置的資訊。
看看這是否有效:
location /phpmyadmin { alias /usr/share/phpmyadmin; index index.php index.html; } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param SERVER_NAME $host; }
你的配置沒有錯 或任何東西。不建議使用
root
內部location
塊,因為如果你得到很多位置塊,它開始變得混亂(所以最好每個伺服器塊有一個根)但這不是你的情況,並且fastcgi
設置通常以更廣泛的方式完成(對於所有 php 請求)。