博客 / Linux/ Nginx 服务器安全配置:禁止通过 IP 或未绑定的域名访问

Nginx 服务器安全配置:禁止通过 IP 或未绑定的域名访问

Nginx 服务器安全配置:禁止通过 IP 或未绑定的域名访问

配置目标

默认情况下,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 Forbidden500 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

在保存配置文件后,务必执行以下步骤:

  1. 测试配置语法: 运行 sudo nginx -tnginx -t。如果输出显示“syntax is ok”和“test is successful”,则说明配置文件语法正确。
  2. 重新加载或重启 Nginx:
    • 平滑重载(不中断服务):sudo nginx -s reloadsudo systemctl reload nginx
    • 完全重启:sudo systemctl restart nginx

验证配置

配置生效后,请通过以下方式验证:

  • 使用浏览器或 curl 命令,通过你的服务器 IP 地址访问。预期应收到 403、500、444 错误或连接被拒。
  • 使用一个未绑定到该服务器的域名(通过 hosts 文件指向你的服务器 IP)访问。预期应收到同样的错误。
  • 使用你已绑定的域名(如 youquso.com)访问。预期应正常显示网站内容。

总结

通过添加一个 default_server 块并返回错误码,可以有效阻止通过 IP 或未知域名对 Nginx 服务器的访问,提升服务器的安全性和专业性。这是生产环境部署中一项基础且重要的安全加固措施。

发表评论

您的邮箱不会公开。必填项已用 * 标注。