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

修改 Nginx 配置使其只允许特定域名访问,请按照以下详细步骤操作:

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

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

  1. 编辑 Nginx 配置文件

    sudo nano /etc/nginx/sites-available/default
    
  2. 修改配置内容
    在配置文件中添加或修改以下内容:

    # 允许访问的域名配置
    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; # 返回禁止访问状态码
    }
    
  3. 保存并测试配置

    sudo nginx -t  # 测试配置语法
    
  4. 重启 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;
    }
}

验证配置是否生效

  1. 使用 curl 测试允许的域名

    curl -I -H "Host: yourdomain.com" http://服务器IP
    # 应返回 200 OK
    
  2. 测试不允许的域名

    curl -I -H "Host: otherdomain.com" http://服务器IP
    # 应返回 403 Forbidden
    
  3. 检查 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 配置的源站域名正确

重要提示:方案一(使用多个 server 块)是 Nginx 官方推荐的最佳实践,性能更好且更安全。方案二(使用 if)虽然简单,但在某些复杂配置中可能导致意外行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风吹落叶花飘荡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值