我最近在服务器上安装了 phpmyadmin 和 nginx,但我想让所有域都可以访问它,而无需将其复制到每个域的 Web 根目录。这可能吗?如果可以,怎么做?
编辑:这是我现在的配置,lain
location /phpmyadmin/
{
alias /home/phpmyadmin/;
}
location ~ ^/phpmyadmin/(.+\.php)$
{
alias /home/phpmyadmin/$1;
include fcgi.conf;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
}
答案1
根据nginx 文档,位置不能在块内使用http
。这意味着您必须为每个虚拟主机添加位置。但是,您可以将一组布局保存到单独的文件中,并使用include
命令将其包含。以下是通用虚拟主机的示例:
server {
listen 80;
root /var/www/nginx-default;
include /etc/nginx/global.d/*.conf;
}
你写下所有全球的*.conf
位于下的单独文件中。例如,/etc/nginx/global.d
您的代码可以放置在 中。/etc/nginx/global.d/phpmyadmin.conf
更新:至于您的 PHPMyAdmin 位置:您不应该为每个文件设置别名,而应该按以下方式传递 SCRIPT_FILENAME 变量:
location ~ ^/phpmyadmin/(.+\.php)$ {
include fcgi.conf;
fastcgi_index index.php;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_param SCRIPT_FILENAME /home/phpmyadmin$fastcgi_script_name;
}
请注意,您需要使用/home/phpmyadmin
而不是$document_root
因为别名指令不会更改文档根目录。这意味着对于我的通用虚拟主机(如上所述),请求 URLhttp://localhost/phpmyadmin/test.php
将尝试执行/var/www/nginx-default/phpmyadmin/test.php
,这不是预期的行为。
答案2
将您的 phpmyadmin 放在所有网站都可以访问的公共目录中,然后尝试别名
location /phpmyadmin/ {
alias /path/to/phpmyadmin/;
}
location ~ ^/phpmyadmin/(.+\.php)$ {
alias /path/to/phpmyadmin/$1;
include /path/to/your/fastcgi.config;
fastcgi_pass unix:/tmp/php.socket;
}
如果你不使用 unix 套接字 fastcgi,那么最后一行可能是这样的
fastcgi_pass 127.0.0.1:9000;
答案3
@Rob 您可以将日志级别更改为调试以跟踪 nginx 操作。您必须从 fcgi.conf 文件中修复 SCRIPT_FILENAME 参数,也可以在 conf 文件中进行设置。