修改 Nginx 配置使其只允许特定域名访问,请按照以下详细步骤操作:
方案一:使用 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;
}
注意事项
- 修改配置前务必备份原始文件
- 每次修改后都要运行
sudo nginx -t测试语法 - 使用
systemctl reload nginx而非 restart 来避免服务中断 - 对于生产环境,建议配合防火墙规则增强安全性
- 如果使用 CDN,需要确保 CDN 配置的源站域名正确
重要提示:方案一(使用多个 server 块)是 Nginx 官方推荐的最佳实践,性能更好且更安全。方案二(使用 if)虽然简单,但在某些复杂配置中可能导致意外行为。
3314

被折叠的 条评论
为什么被折叠?



