Nginx
是用于 Web
服务、反向代理、缓存、负载平衡、媒体流等的开源软件。在这将提到一些经常使用的 Nginx
经典配置以及安全性的一些配置。请根据您的实际需求对这些配置进行调整。
侦听端口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | server { # 标准HTTP协议 listen 80; # 标准HTTPS协议 listen 443 ssl; # 使用 http2 listen 443 ssl http2; # 使用IPv6 监听 80 listen [::]:80; # 仅限使用IPv6 listen [::]:80 ipv6only=on; } |
---|
访问日志
1 2 3 4 5 6 7 8 | server { # 日志文件的相对或完整路径 access_log /path/to/file.log; # 选择 'on' 或者 'off' access_log on; } |
---|
域名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | server { # 监听单个域名 server_name cnsre.cn; # 监听多个域名 server_name cnsre.cn www.cnsre.cn; # 监听所有域名 server_name *.cnsre.cn; # 监听所有顶级域名 server_name cnsre.*; # 监听未指定的主机名(侦听IP地址本身) server_name ""; } |
---|
静态资源
1 2 3 4 5 6 7 8 9 | server { listen 80; server_name cnsre.cn; location / { root /path/to/website; } } |
---|
重定向
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | server { listen 80; server_name www.cnsre.cn; return 301 http://cnsre.cn$request_uri; } server { listen 80; server_name www.cnsre.cn; location /redirect-url { return 301 http://otherdomain.com; } } |
---|
反向代理
1 2 3 4 5 6 7 8 9 10 11 | server { listen 80; server_name cnsre.cn; location / { proxy_pass http://0.0.0.0:3000; # 其中 0.0.0.0:3000 是您的应用程序服务器(例如:node.js)绑定在 0.0.0.0 上,监听端口 3000 } } |
---|
负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | upstream node_js { server 0.0.0.0:3000; server 0.0.0.0:4000; server 1.1.1.1; } server { listen 80; server_name cnsre.cn; location / { proxy_pass http://www.cnsre.cn; } } |
---|
SSL 协议
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | server { listen 443 ssl; server_name cnsre.cn; ssl on; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/privatekey.pem; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /path/to/fullchain.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_session_timeout 1h; ssl_session_cache shared:SSL:50m; add_header Strict-Transport-Security max-age=15768000; } # HTTP 到 HTTPS 的永久重定向 server { listen 80; server_name cnsre.cn; return 301 https://$host$request_uri; } |
---|
禁止任何敏感的请求路径
1 2 3 4 5 6 7 8 9 | location ~ /.git { deny all; } ## Disable .htaccess and other hidden files location ~ /.(?!well-known).* { deny all; access_log off; log_not_found off; } |
---|
禁止不必要的 HTTP 请求方法
最常用的 HTTP 请求方法是 GET、POST、HEAD。对于任何其他未使用的方法,我们应该返回 444。
1 2 3 4 5 6 | #只允许这些请求方法 if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } # 不接受删除,搜索和其他方法 |
---|
添加请求速率限制
限速 会拦截很多恶意请求,也是防御网站的网络级和应用级DDoS攻击的常用工具。我们可以为单个 IP 添加最大请求限制。
1 2 3 4 5 6 7 8 9 | limit_req_zone $binary_remote_addr zone=ip:10m rate=5r/s; server { listen 80; location / { limit_req zone=ip burst=12 delay=8; proxy_pass http://cnsre.cn; } } |
---|
点击劫持攻击
点击劫持攻击 会导致用户在不知不觉中下载恶意软件、访问恶意网页、提供凭据或敏感信息。
我们可以X-FRAME-OPTIONS
在 HTTP Header
中注入以防止点击劫持攻击(甚至可以通过某些方式绕过)。这是通过在 nginx.conf
文件中添加以下内容来实现的
1 | add_header X-Frame-Options "SAMEORIGIN"; |
---|
X-XSS 保护
注入具有 X-XSS
保护的 HTTP
标头以减轻跨站点脚本攻击。修改 nginx.conf
文件添加以下内容
1 | add_header X-XSS-Protection "1; mode=block"; |
---|