Nginx 常用配置以及安全配置案例

2022-02-25 17:13:21 浏览数 (1)

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-OPTIONSHTTP 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";

0 人点赞