本文介绍如何通过优化 Nginx 配置,提高 Nginx Web 服务器的安全性和用户访问效率
配置
http {
server_tokens off; # 隐藏 nginx 版本号
autoindex off
# 避免点击劫持
add_header X-Frame-Options "SAMEORIGIN";
# 防止 XSS 攻击
add_header X-XSS-Protection "1; mode=block";
# 禁止嗅探文件类型
add_header X-Content-Type-Options "nosniff";
limit_conn_zone $binary_remote_addr zone=z1:8m; # 根据客户端 Ip 限制并发连接数
limit_conn_zone $server_name zone=z2:16m; # 根据nginx 虚拟服务器名称限制并发连接数
limit_req_zone $binary_remote_addr zone=z3:32m rate=20r/s; # 根据客户端 Ip 限制平均每秒的请求数
# 限制缓冲区大小, 防止缓冲区溢出
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 20 20;
send_timeout 10;
?
server {
listen 443 ssl;
server_name www.test1.com;
root /opt/www/www.test1.com;
?
ssl_certificate "/opt/www/www.test1.comssl/ssl/www.test1.com.pem";
ssl_certificate_key "/opt/www/www.test1.com/ssl/www.test1.com.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
?
location / {
# 限制请求方法
if ($request_method !~ ^(GET|POST)$ ) {
return 405;
}
# 限制特定 user-agent
if ($http_user_agent ~* ApacheBench|wget|curl|python-requests|Scrapy|nmap|perl|ruby|bash|httpclient) {
return 406;
}
# 防止 http头攻击漏洞
if ( $host !~* 'test1.com' ) {
rewrite ^/(.*)$ http://test1.com/$1 permanent;
}
# url 参数过滤敏感字
if ($query_string ~* "union.*select.*\(") {
rewrite ^/(.*)$ $host permanent;
}
if ($query_string ~* "concat.*\(") {
rewrite ^/(.*)$ $host permanent;
}
?
limit_conn z1 10; # 同一IP同一时间只允许10个并发连接
limit_conn z2 3000; # 限制某一 nginx 虚拟服务器的总连接数 3000
limit_rate 300k; # 限制单个连接带宽为 300k
limit_req zone=z3 burst=30 nodelay; # 限制每秒20并发请求 + 30个请求排队,其余连接直接拒绝
?
deny 192.168.31.0/24; # 拒绝 IP 段
allow 192.168.32.0/24; # 允许 IP 段
?
# 清除不安全的HTTP响应头, 需要安装 ngx_headers_more 模块
more_clear_headers "X-Powered-By";
more_clear_headers "Server";
more_clear_headers "ETag";
more_clear_headers "Connection";
more_clear_headers "Date";
more_clear_headers "Accept-Ranges";
more_clear_headers "Last-Modified";
?
}
# 图片防盗链, referers 验证, 仅允许如下指定域名访问 images 路径
location /images/ {
valid_referers none blocked www.test1.com test1.com;
if ($invalid_referer) {
# 返回状态码 407
return 407;
# 或重定向请求到某特定图片
# rewrite ^/images/.*.(gif|jpg|png)$ /static/defaults.jpg last;
}
}
# 静态资源
location ~* \.(js|css|flash|media|jpg|png|gif)$ {
# 缓存30天
add_header Cache-Control "max-age=2592000";
}
# 静态页面
location ~* \.html$ {
# 不缓存
add_header Cache-Control "no-cache";
}
?
}
}
?