You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Nginx使phpMyAdmin仅可通过指定子域名访问

问题诊断与解决方案

这是Nginx内部配置问题,和DNS无关

DNS仅负责将域名解析到服务器IP,而哪些域名能访问对应站点内容,完全由Nginx的路由规则控制,和DNS记录没有关系。

问题原因

你的phpMyAdmin配置仅指定了data.domain.com的server块,但当访问其他子域名或服务器IP时,Nginx找不到匹配的server块,就会使用默认server块(如果没有显式设置,会用第一个加载的server块)。如果你的phpmyadmin.conf是Nginx优先加载的配置,所有不匹配的请求都会被导向phpMyAdmin目录,导致其他域名/IP也能访问。

修复步骤

1. 修正phpmyadmin.conf的语法错误

你的配置中ssl_ciphers行存在语法问题,缺少闭合单引号和分号,会导致Nginx配置失效:
原错误行:

ssl_ciphers 'CIPHERS-here>

修改为(可替换成推荐加密套件,或保持你的实际套件,确保语法正确):

ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';

2. 添加默认拒绝的server块

创建或修改Nginx的默认配置文件(比如/etc/nginx/sites-available/default),添加一个作为默认server的块,拒绝所有不匹配data.domain.com的请求:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    # 若没有对应SSL证书,可使用自签证书,或仅配置80端口的default_server
    # 自签证书可通过`openssl req -x509 -newkey rsa:4096 -keyout /etc/nginx/ssl/key.pem -out /etc/nginx/ssl/cert.pem -days 365 -nodes`生成
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    server_name _; # 匹配所有未被其他server块匹配的域名/IP

    return 403; # 直接返回禁止访问
}

3. 启用配置并重启Nginx

  • 确保默认配置已启用:sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/(如果之前没启用)
  • 测试配置语法:sudo nginx -t
  • 重启Nginx:sudo systemctl restart nginx

4. 验证效果

访问node.domain.com或服务器IP,应该返回403禁止访问;访问data.domain.com则正常加载phpMyAdmin。

内容的提问来源于stack exchange,提问作者barismo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:52:44