配置 nginx,以便所有域都可以 /phpmyadmin

配置 nginx,以便所有域都可以 /phpmyadmin

我正在尝试设置 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/defaultserver_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这里,因为此方法中缺少用于包含证书的固定域名。

相关内容