我一直在尝试使用以下方法在我的 nginx 服务器上设置 phpmyadmin这个过时的教程来自 DigitalOcean。想法是进行以下配置:
http(s)://example.com
=>/usr/share/nginx/html
http(s)://example.com/phpmyadmin
=>/usr/share/phpmyadmin
本教程的“解决方案”是创建一个/usr/share/nginx/html
指向的符号链接/usr/share/phpmyadmin
。这与这个问题。不幸的是,这造成了一些其他问题这里我就不多说了。
我觉得我应该能够使用单独的location
块来控制这种行为。我尝试了建议的方法这里:
server {
listen 80 default;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html index.htm index.nginx-debian.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
location /phpmyadmin {
root /usr/share/phpmyadmin;
}
location ~ /phpmyadmin/.+\.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
}
}
我仍然可以访问 nginx 的默认页面http://example.com
,甚至可以通过 等 URL 执行 PHP 脚本http://example.com/info.php
。不幸的是,每当我尝试访问任何http://example.com/*
URL 时,都会出现 404 错误。
我应该如何正确配置它?我在 Ubuntu 服务器上运行带有 PHP-FPM 的 PHP7.0。
答案1
我在下面提出了一些建议。免责声明:它尚未经过测试。
server {
listen 80 default;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-php.conf;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ^~ /phpmyadmin {
root /usr/share;
try_files $uri $uri/ =404;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
你的root
说法是错误的,除非 phpmyadmin 在下面/usr/share/phpmyadmin/phpmyadmin
。
您可以嵌套PHP
位置块,并使用^~
修饰符,这样看起来更整洁。请参阅这个文件了解详情。
我添加了一些try_files
语句, 依据最佳实践. 此外,location /
处理块普通的URI。
您可能想要将其中一些=404
代码更改为默认操作。