Nginx仅靠端口虚拟主机无法实现安全隔离,需结合IP访问控制、禁用危险HTTP方法与路径、连接/请求限速及隐藏版本号等策略。

在 Nginx 中仅靠“基于端口的虚拟主机”本身并不能提供实质性的安全隔离,因为端口只是网络通信的入口标识,不自带访问控制能力。真正的安全性加固,必须结合明确的访问限制策略——比如限制哪些 IP 能访问该端口、禁止敏感路径暴露、关闭不必要的 HTTP 方法、启用连接限制等。
限制指定 IP 或网段访问特定端口
通过 allow / deny 指令,在 server 块中精确控制谁能连接该端口服务。注意:需确保 deny all 作为兜底规则,且指令顺序不可颠倒。
- 只允许运维网段(如 192.168.10.0/24)访问管理端口 8080:
server {
listen 8080;
allow 192.168.10.0/24;
deny all;
...
}
- 若使用云环境,还需同步配置云防火墙或安全组,避免绕过 Nginx 直连端口。
禁用非必要 HTTP 方法与敏感路径
开放端口后,攻击者常尝试 OPTIONS、TRACE、PUT、DELETE 等方法探测或上传文件。同时,应主动屏蔽 /.git、/wp-config.php、/nginx.conf 等高危路径。
- 在 server 块内添加:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS)$ ) {
return 405;
}
location ~ ^/(\.git|\.ht|\.svn|\.env|wp-config\.php|nginx\.conf|config\.php) {
deny all;
}
启用连接数与请求速率限制
防止暴力扫描或 DDoS 攻击针对特定端口发起大量连接。使用 limit_conn 和 limit_req 实现基础防护。
- 在 http 块中定义限制区域:
limit_conn_zone $binary_remote_addr zone=addr:10m; limit_req_zone $binary_remote_addr zone=req_rate:10m rate=10r/s;
- 在对应 server 块中启用:
limit_conn addr 10; limit_req zone=req_rate burst=20 nodelay;
表示单 IP 最多 10 个并发连接,每秒最多 10 个请求,突发允许 20 个但不延迟响应。
关闭服务器标识并隐藏版本号
减少攻击面,避免因已知 Nginx 版本漏洞被针对性利用。
- 在 http 块中添加:
server_tokens off;
- 确认系统级未通过其他方式(如错误页模板、响应头自定义)泄露版本信息。










