配置目标
默认情况下,Nginx 服务器可能会响应来自服务器 IP 地址或任何指向该 IP 但未在配置中明确绑定的域名的请求。这可能导致安全风险、内容重复或流量劫持。本指南将介绍如何配置 Nginx,使其仅响应已绑定的域名请求,并拒绝来自 IP 地址或未绑定域名的访问。
配置步骤
1. 编辑 Nginx 主配置文件
首先,找到并编辑 Nginx 的主配置文件。通常位于以下路径之一:
/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf
更常见的做法是在 /etc/nginx/sites-available/ 目录下创建独立的站点配置文件(例如 default 或你的域名),然后在 /etc/nginx/sites-enabled/ 中创建符号链接。本示例以修改主配置文件或默认站点配置文件为例。
2. 配置已绑定的域名服务器块
确保你有一个或多个正常的 server 块来服务你的网站。请根据你的实际情况修改以下参数:
server {
listen 80;
# 将 `server_name` 替换为你的实际域名,可以列出多个,用空格分隔
server_name youquso.com www.youquso.com blog.youquso.com;
# 指定网站根目录
root /home/wwwroot/your_site;
index index.html index.htm index.php;
# 此处添加其他配置,如 location 块、SSL 配置等
# ...
}
重要说明:
server_name指令用于指定该服务器块响应的域名列表。请确保域名拼写正确。- 如果使用 HTTPS,需要相应的
listen 443 ssl;配置和 SSL 证书路径。
3. 禁止 IP 及未绑定域名访问
为了阻止通过服务器 IP 地址或任何未在 server_name 中列出的域名进行访问,我们需要添加一个“默认”或“捕获所有”的服务器块。
方法一:直接返回错误状态码(推荐)
此方法直接向未授权的请求返回 HTTP 错误码(如 444, 403, 500),消耗资源最少,也最安全。
server {
# 监听所有 IPv4 地址的 80 端口
listen 80 default_server;
# 监听所有 IPv6 地址的 80 端口(如果启用)
listen [::]:80 default_server;
# 使用下划线 `_` 作为通配符,匹配任何未在其他 server 块中定义的域名
server_name _;
# 返回 444 状态码(Nginx 自定义,直接关闭连接,不发送响应头)
return 444;
# 或者返回其他标准错误码
# return 403;
# return 500;
}
说明: 使用 return 444; 是 Nginx 特有的高效方式,客户端会收到连接重置。使用 403 Forbidden 或 500 Internal Server Error 是更通用的标准错误码。
方法二:重定向到指定域名(谨慎使用)
此方法将所有未绑定的请求重定向到你的主域名。虽然有时用于“规范化”流量,但不推荐作为安全措施,因为它会暴露你的主域名并可能被滥用。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# 301 永久重定向到你的主站
return 301 https://youquso.com$request_uri;
# 或者使用 rewrite 指令(旧式写法)
# rewrite ^(.*) https://youquso.com$1 permanent;
}
注意: 如果配置了 HTTPS,请确保此默认块也监听 443 端口并做出相应处理,或者确保它不会干扰你的 HTTPS 服务器块。
4. 检查配置并重启 Nginx
在保存配置文件后,务必执行以下步骤:
- 测试配置语法: 运行
sudo nginx -t或nginx -t。如果输出显示“syntax is ok”和“test is successful”,则说明配置文件语法正确。 - 重新加载或重启 Nginx:
- 平滑重载(不中断服务):
sudo nginx -s reload或sudo systemctl reload nginx - 完全重启:
sudo systemctl restart nginx
- 平滑重载(不中断服务):
验证配置
配置生效后,请通过以下方式验证:
- 使用浏览器或
curl命令,通过你的服务器 IP 地址访问。预期应收到 403、500、444 错误或连接被拒。 - 使用一个未绑定到该服务器的域名(通过 hosts 文件指向你的服务器 IP)访问。预期应收到同样的错误。
- 使用你已绑定的域名(如
youquso.com)访问。预期应正常显示网站内容。
总结
通过添加一个 default_server 块并返回错误码,可以有效阻止通过 IP 或未知域名对 Nginx 服务器的访问,提升服务器的安全性和专业性。这是生产环境部署中一项基础且重要的安全加固措施。
Pingback: nginx做静态文件下载服务器之安装与配置-老牛博客