内容大纲
内容大纲
概述
修改 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;
}
注意事项
- 修改配置前务必备份原始文件
- 每次修改后都要运行
sudo nginx -t测试语法 - 使用
systemctl reload nginx而非 restart 来避免服务中断 - 对于生产环境,建议配合防火墙规则增强安全性
- 如果使用 CDN,需要确保 CDN 配置的源站域名正确
喜欢这篇内容吗?