本文通过一些最佳实践,让 Nginx 服务器运行的更安全。
1:使用HTTPS
HTTPS可以保护数据安全,对通信进行加密,防止窃听。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate 和 ssl_certificate_key 分别放置证书文件和私钥;ssl_protocols 表示启用的SSL协议版本;ssl_ciphers 表示优先启用的加密套件。
2:安全头部
安全的HTTP头部可以保护服务器免受XSS等攻击。
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "DENY";
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
X-Content-Type-Options 表示防止 MIME 类型嗅探,让浏览器按照头部按照 Content-Type 头确认文件类型,避免错误地解释为可执行脚本。
X-Frame-Options 防止点击劫持,避免攻击者在网页中放入一个 iframe,在用户不知情的情况下点击。
X-XSS-Protection 防止 XSS 攻击,避免在网页中执行恶意脚本。
Strict-Transport-Security 强制启用HTTPS。
3:防范 DDoS 和暴力攻击
速率限制通过控制客户端的请求数来防止滥用。
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20;
}
api_limit 限制一个IP每秒最高请求数,burst 允许在速率限制生效前可以增加到 20 个请求。
还可以限制IP黑名单:
/etc/nginx/blacklist.conf
增加指令 deny 192.168.1.1;
然后在 /etc/nginx/nginx.conf
下加载:
http {
include /etc/nginx/blacklist.conf;
}
4:使用 Fail2Ban 提高安全性
Fail2Ban 可监控日志文件并封禁显示恶意行为(如反复尝试登录失败)的 IP
编辑 /etc/fail2ban/jail.local
文件:
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
然后重启服务:
$ apt install fail2ban
$ systemctl restart fail2ban
然后查看哪些ip有问题。
$ fail2ban-client status nginx-http-auth
5:定期安全维护
定期升级:
$ apt update && sudo apt upgrade nginx
移除一些没有用到的模块。
监控日志:
$ tail -f /var/log/nginx/access.log
$ tail -f /var/log/nginx/error.log
过往相关文章:
文章转载自虞大胆的叽叽喳喳,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




