我正在尝试设置 nginx,以便每个 vhost 都可以访问 phpmyadmin,因此
example.com/phpmyadmin
我尝试使用此配置,但没有成功,
这是我的默认文件
server {
#return 404;
location /phpmyadmin {
root /usr/share/nginx/phpmyadmin/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/nginx/phpmyadmin/;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/nginx/phpmyadmin/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}
}
谢谢。
答案1
据我所知,nginx 不允许服务器之间共享位置。您应该在每个服务器部分(针对每个域)添加 phpmyadmin 位置,或者将 nginx 配置为侦听其他端口(例如listen 88
),并为 phpmyadmin 配置位置,使其位于所有域上,但位于另一个端口上。
答案2
据我所知,您需要location /phpmyadmin {...}
为每个服务器、每个虚拟主机设置这些指令,您不能只设置一次就对所有块生效server {}
。
最简单的方法可能是创建一个phpmyadmin.include
从每个服务器加载的文件:
# conf/phpmyadmin.conf
location /phpmyadmin {
root /usr/share/nginx/phpmyadmin/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/nginx/phpmyadmin/;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/nginx/phpmyadmin/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}
进而
server {
listen 80;
server_name example.com www.example.com;
include conf/phpmyadmin.conf;
}
server {
listen 80;
server_name example.org www.example.org;
include conf/phpmyadmin.conf;
}
答案3
出于安全原因,最好使用它alias
而不是根目录。/phpmyadmin/
并且可以在 nginx 默认配置文件(位于/etc/nginx/sites-available/default
)server_name _;
的以下行后添加一个别名:
location /secretpath {
alias /usr/share/phpmyadmin/;
index index.html index.htm index.php;
location ~ ^/secretpath(.+\.php)$ {
alias /usr/share/phpmyadmin$1;
#### here I'm using php8.2 with php8.2-fpm beside nginx webserver
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; #OR fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$1;
include fastcgi_params;
fastcgi_intercept_errors on;
}
}
然后您可以使用类似的 URLhttp://anyhosteddomain.com/secretpath
来访问 phpmyadmin。您需要使用http
协议而不是https
这里,因为此方法中缺少用于包含证书的固定域名。