🚀 版本上新 比比工房Wordrpess主题1.5.0发布。点击查看更新介绍 →

修改 Nginx 配置使其只允许特定域名访问

漫川 发表于 1 天前 浏览 24 字数 1401 阅读时长 8分钟

方案一:使用 server_name 指令(推荐)

这是最标准且高效的方法,通过配置不同的 server 块来处理不同域名的请求。

编辑 Nginx 配置文件

sudo nano /etc/nginx/sites-available/default

修改配置内容
在配置文件中添加或修改以下内容:

# 允许访问的域名配置
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com; # 替换为你的允许域名
    
    root /var/www/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

# 拒绝其他所有域名的访问
server {
    listen 80 default_server;
    server_name _; # 匹配所有未指定的域名
    return 403; # 返回禁止访问状态码
}

保存并测试配置

sudo nginx -t  # 测试配置语法

重启 Nginx 服务

sudo systemctl reload nginx

方案二:使用 if 语句(备选)

如果需要在同一个 server 块内处理,可以使用条件判断:

server {
    listen 80;
    server_name _; # 匹配所有域名

    # 检查请求域名是否在允许列表中
    if ($host !~* ^(yourdomain.com|www.yourdomain.com)$) {
        return 403; # 禁止访问
    }

    # 正常配置
    root /var/www/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

验证配置是否生效

使用 curl 测试允许的域名

curl -I -H "Host: yourdomain.com" http://服务器IP
# 应返回 200 OK

测试不允许的域名

curl -I -H "Host: otherdomain.com" http://服务器IP
# 应返回 403 Forbidden

检查 Nginx 访问日志

tail -f /var/log/nginx/access.log
# 观察不同域名的访问状态

高级配置(HTTPS 支持)

如果使用 HTTPS,需要修改 SSL 配置:

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;
    
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
    # 其他配置...
}

server {
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate /etc/nginx/ssl/default.crt; # 需要创建默认证书
    ssl_certificate_key /etc/nginx/ssl/default.key;
    return 403;
}

注意事项

  1. 修改配置前务必备份原始文件
  2. 每次修改后都要运行 sudo nginx -t 测试语法
  3. 使用 systemctl reload nginx 而非 restart 来避免服务中断
  4. 对于生产环境,建议配合防火墙规则增强安全性
  5. 如果使用 CDN,需要确保 CDN 配置的源站域名正确

喜欢这篇内容吗?