一、核心安全配置1. 编译安装nginx编译安装nginx可以自定义模块和优化性能。标准步骤见nginx核心功能https://blog.csdn.net/2601_94969852/article/details/158970288?fromshareblogdetailsharetypeblogdetailsharerId158970288sharereferPCsharesource2601_94969852sharefromfrom_link2. 隐藏版本号隐藏版本号可减少信息泄露风险(1) 查看nginx版本号使用命令curl -I http://localhost在响应头中查找Server: nginx/版本号(2) 修改配置文件 验证再次运行curl -I http://localhost应看不到版本号。编辑nginx主配置文件通常为/usr/local/nginx/conf/nginx.conf在http块中添加server_tokens off;重载配置/usr/local/nginx/sbin/nginx -s reload3. 限制危险请求方法限制HTTP方法可防止恶意请求(1) HTTP常用方法常见方法包括GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE。危险方法如PUT、DELETE可能被滥用(2) GET和POST区别GET用于获取数据参数在URL中可见长度有限可缓存POST用于提交数据参数在请求体中更安全长度无限制不可缓存(3) 修改配置和验证编辑nginx配置文件在server块中添加if ($request_method !~ ^(GET|POST)$) { return 405; }这会限制只允许GET和POST其他方法返回405错误重载配置后测试curl -X PUT http://localhost应返回405 Method Not Allowed4. 请求限制使用模块限制请求速率防止DDoS攻击(1) 使用nginx的limit_req模块限制请求速率在http块中定义共享内存区limit_req_zone $binary_remote_addr zonemylimit:10m rate10r/s;zonemylimit:10m定义10MB共享区rate10r/s限制每秒10个请求在server或location块中应用location / { limit_req zonemylimit burst20; # 其他配置 }burst20允许突发20个请求重载配置生效(2) 压力测试验证使用工具如abApache Bench测试ab -n 1000 -c 100 http://localhost/观察输出如果请求被拒绝或延迟则限制生效。日志中可能显示503 Service Unavailable5. 防盗链配置验证防盗链阻止外部网站盗用资源配置编辑nginx配置文件在location块中添加location ~ .*\.(gif|jpg|jpeg|png)$ { valid_referers none blocked server_names ~\.example\.com; if ($invalid_referer) { return 403; } }valid_referers指定允许的引用来源如example.com非法引用时返回403验证访问图片URL如果从非法站点访问应返回403。测试curl -I http://localhost/image.jpg -H Referer: http://bad.com应返回403 Forbidden二、高级防护1. 动态黑名单动态黑名单可实时拦截恶意IP(1) 编辑黑名单配置文件创建文件/usr/local/nginx/conf/blacklist.conf内容为IP列表deny 192.168.1.100; deny 10.0.0.50;每行一个deny指令(2) 编辑主配置文件在nginx主配置的http块中引入黑名单include blacklist.conf;在server块中应用location / { # 其他配置 }黑名单自动生效(3) 测试从黑名单IP访问curl http://localhost应返回403 Forbidden。非黑名单IP正常访问2. nginx https配置HTTPS提供加密通信(1) https概念HTTPS是HTTP的安全版本使用SSL/TLS协议加密数据确保传输安全(2) 安全通信四大原则机密性数据加密防止窃听完整性确保数据不被篡改使用哈希算法如SHA-256身份验证验证服务器身份防止中间人攻击不可否认性通过数字签名确保行为可追溯(3) HTTPS通信原理基于SSL/TLS协议过程包括握手阶段客户端和服务器交换密钥验证证书密钥交换使用非对称加密如RSA建立会话密钥数据传输使用对称加密如AES加密数据。 数学基础涉及离散对数问题$$ \text{例如Diffie-Hellman密钥交换} g^{a} \mod p \text{ 和 } g^{b} \mod p \text{ 交换后生成共享密钥 } g^{ab} \mod p $$3. nginx配置https证书获取证书使用Lets Encrypt免费证书sudo apt install certbot certbot certonly --standalone -d example.com证书保存在/etc/letsencrypt/live/example.com/配置nginx编辑配置文件在server块中添加server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 其他配置 }4. nginx启用https重定向HTTP到HTTPS添加一个新server块server { listen 80; server_name example.com; return 301 https://$host$request_uri; }重载配置/usr/local/nginx/sbin/nginx -s reload5. 验证测试HTTPScurl -I https://example.com应返回200 OK并查看证书信息openssl s_client -connect example.com:443输出中显示SSL/TLS握手成功浏览器验证访问https://example.com地址栏显示锁图标
nginx安全防护与HTTPS部署实战
一、核心安全配置1. 编译安装nginx编译安装nginx可以自定义模块和优化性能。标准步骤见nginx核心功能https://blog.csdn.net/2601_94969852/article/details/158970288?fromshareblogdetailsharetypeblogdetailsharerId158970288sharereferPCsharesource2601_94969852sharefromfrom_link2. 隐藏版本号隐藏版本号可减少信息泄露风险(1) 查看nginx版本号使用命令curl -I http://localhost在响应头中查找Server: nginx/版本号(2) 修改配置文件 验证再次运行curl -I http://localhost应看不到版本号。编辑nginx主配置文件通常为/usr/local/nginx/conf/nginx.conf在http块中添加server_tokens off;重载配置/usr/local/nginx/sbin/nginx -s reload3. 限制危险请求方法限制HTTP方法可防止恶意请求(1) HTTP常用方法常见方法包括GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE。危险方法如PUT、DELETE可能被滥用(2) GET和POST区别GET用于获取数据参数在URL中可见长度有限可缓存POST用于提交数据参数在请求体中更安全长度无限制不可缓存(3) 修改配置和验证编辑nginx配置文件在server块中添加if ($request_method !~ ^(GET|POST)$) { return 405; }这会限制只允许GET和POST其他方法返回405错误重载配置后测试curl -X PUT http://localhost应返回405 Method Not Allowed4. 请求限制使用模块限制请求速率防止DDoS攻击(1) 使用nginx的limit_req模块限制请求速率在http块中定义共享内存区limit_req_zone $binary_remote_addr zonemylimit:10m rate10r/s;zonemylimit:10m定义10MB共享区rate10r/s限制每秒10个请求在server或location块中应用location / { limit_req zonemylimit burst20; # 其他配置 }burst20允许突发20个请求重载配置生效(2) 压力测试验证使用工具如abApache Bench测试ab -n 1000 -c 100 http://localhost/观察输出如果请求被拒绝或延迟则限制生效。日志中可能显示503 Service Unavailable5. 防盗链配置验证防盗链阻止外部网站盗用资源配置编辑nginx配置文件在location块中添加location ~ .*\.(gif|jpg|jpeg|png)$ { valid_referers none blocked server_names ~\.example\.com; if ($invalid_referer) { return 403; } }valid_referers指定允许的引用来源如example.com非法引用时返回403验证访问图片URL如果从非法站点访问应返回403。测试curl -I http://localhost/image.jpg -H Referer: http://bad.com应返回403 Forbidden二、高级防护1. 动态黑名单动态黑名单可实时拦截恶意IP(1) 编辑黑名单配置文件创建文件/usr/local/nginx/conf/blacklist.conf内容为IP列表deny 192.168.1.100; deny 10.0.0.50;每行一个deny指令(2) 编辑主配置文件在nginx主配置的http块中引入黑名单include blacklist.conf;在server块中应用location / { # 其他配置 }黑名单自动生效(3) 测试从黑名单IP访问curl http://localhost应返回403 Forbidden。非黑名单IP正常访问2. nginx https配置HTTPS提供加密通信(1) https概念HTTPS是HTTP的安全版本使用SSL/TLS协议加密数据确保传输安全(2) 安全通信四大原则机密性数据加密防止窃听完整性确保数据不被篡改使用哈希算法如SHA-256身份验证验证服务器身份防止中间人攻击不可否认性通过数字签名确保行为可追溯(3) HTTPS通信原理基于SSL/TLS协议过程包括握手阶段客户端和服务器交换密钥验证证书密钥交换使用非对称加密如RSA建立会话密钥数据传输使用对称加密如AES加密数据。 数学基础涉及离散对数问题$$ \text{例如Diffie-Hellman密钥交换} g^{a} \mod p \text{ 和 } g^{b} \mod p \text{ 交换后生成共享密钥 } g^{ab} \mod p $$3. nginx配置https证书获取证书使用Lets Encrypt免费证书sudo apt install certbot certbot certonly --standalone -d example.com证书保存在/etc/letsencrypt/live/example.com/配置nginx编辑配置文件在server块中添加server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 其他配置 }4. nginx启用https重定向HTTP到HTTPS添加一个新server块server { listen 80; server_name example.com; return 301 https://$host$request_uri; }重载配置/usr/local/nginx/sbin/nginx -s reload5. 验证测试HTTPScurl -I https://example.com应返回200 OK并查看证书信息openssl s_client -connect example.com:443输出中显示SSL/TLS握手成功浏览器验证访问https://example.com地址栏显示锁图标