阻止 phpmyadmin 从互联网访问,仅允许从 nginx 中的局域网访问

阻止 phpmyadmin 从互联网访问,仅允许从 nginx 中的局域网访问

我在 LEMP 堆栈上运行 2 个网站,并将 nginx 配置为反向代理服务器。我已成功将 phpmyadmin 安装在我的一个网站根目录的根文件夹中。当我转到www.example.com/phpmyadmin,我可以在公共互联网和局域网上访问 phpmyadmin 登录页面。我想要做的是配置 nginx 以阻止任何不来自局域网的 phpmyadmin 流量。目前,我的站点根目录中还有一个 /admin 文件夹,并且我已成功设置了一种方法,以阻止所有不来自局域网的该文件夹流量。我认为使用与阻止 /admin/ 目录相同的 ngninx 虚拟配置行,从外部阻止 phpmyadmin 会很容易,但只需将位置更改为 /phpmyadmin 即可。但是,执行此操作时,phpmyadmin 仍然在本地网络上被阻止。

以下是我为 example.com 配置的 nginx 虚拟主机的相关部分。您可以看到哪些阻止配置有效,哪些无效,如注释中所述。帮我修复 #Not working 行。注意:我的服务器的本地 IP 地址是192.168.1.20

server {   
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        server_name example.com  www.example.com;
        root /var/www/example.com;

        index index.php;
    
        location / {
        # try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php?$args;
        }


        # Disallow PHP In Upload Folder
        location /wp-content/uploads/ {
                location ~ \.php$ {
                        deny all;
                }
        }
        # LAN ONLY ACCESS WORKING
        location ^~ /admin {
                allow 192.168.1.0/24;
                deny all;
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }
        # LAN ONLY ACCESS NOT WORKING!!!
        location ^~ /phpmyadmin {
                allow 192.168.1.0/24;
                deny all;
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass local_php;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
        }

        location ~ \.php$ {
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass local_php;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
        }
}

我必须对虚拟主机配置文件进行哪些编辑才能正确地将 phpmyadmin 限制在 Nginx 中的 LAN 上?

答案1

试试这个,对我有用。

location ~phpmyadmin {
            allow 192.168.1.0/24;
            deny all;
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
}

答案2

不幸的是,@JRA 的答案没有奏效。奏效的方法是将限制指令添加到 .conf 文件中服务器块的最顶部,而不将它们用作位置指令,如下所示...

server {
  # Restrict access to LAN.
  allow 192.168.1.0/24;
  deny all;
  error_page 403 =444;
  
  listen 80;
  listen [::]:80;
  server_name example.com  www.example.com;
  return 301 https://$host$request_uri;
}

server {
  # Restrict access to LAN.
  allow 192.168.1.0/24;
  deny all;
  error_page 403 =444;

  ####
  # SSL configuration
  ####

  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  ...

答案3

你的问题是nginx 应用位置块的顺序。具体来说,~.php$ 位置在 ~/phpmyadmin 块之前进行处理。假设 phpmyadmin 目录位于您的 webroot 中,使用文字前缀而不是正则表达式应该会产生您期望的行为......

location /phpmyadmin {

尽管 /admin 目前的行为符合您的预期,但将其设为文字前缀也是一个好主意。

相关内容