优化 Nginx 配置

  1. 优化 Nginx 配置
    关闭不必要的模块:通过编译时配置,禁用不需要的模块,以减小 Nginx 的内存占用和提高性能。比如不需要的 ngx_http_autoindex_module 或 ngx_http_browser_module 等。
    开启 worker 进程优化:使用 worker_processes auto 来让 Nginx 自动调整工作进程的数量,通常根据 CPU 核数来调整。
    优化 worker_connections:worker_connections 配置参数控制每个 worker 进程可以处理的最大连接数。根据机器性能,合理调整这个参数。
worker_processes auto;
worker_connections 1024;
  1. 反向代理缓存
    提高反向代理性能:可以使用 proxy_cache 来缓存反向代理请求,从而减少服务器负载,提高响应速度。
    设置缓存过期时间:通过 proxy_cache_valid 和 expires 来控制缓存内容的过期时间。
location / {
    proxy_pass http://backend;
    proxy_cache my_cache;
    proxy_cache_valid 200 1h;
    expires 1h;
}
  1. 负载均衡
    简单负载均衡:Nginx 提供了几种负载均衡策略,如轮询(默认)、加权轮询、最少连接等。
    加权负载均衡:通过配置权重来设置不同后端服务器的负载能力。例如:
upstream backend {
    server backend1.example.com weight=3;
    server backend2.example.com weight=2;
}

基于 IP 的负载均衡:Nginx 可以通过 ip_hash 实现客户端 IP 地址的粘性负载均衡,确保来自相同 IP 的请求始终分发到同一台后端服务器。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}
  1. 日志优化
    定制日志格式:Nginx 支持自定义日志格式,可以输出请求的详细信息,方便调试和监控。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;

禁用日志:对于某些静态文件请求或某些不重要的请求,可以禁用日志来提高性能。

location /favicon.ico {
    log_not_found off;
    access_log off;
}
  1. 优化静态文件
    启用文件压缩(gzip):Nginx 可以压缩响应体,减小传输数据的大小,从而提高性能。
gzip on;
gzip_types text/plain text/css application/javascript;
gzip_min_length 1000;

配置文件缓存:Nginx 支持通过 expires 指令设置静态文件的缓存时间,减少静态资源的请求次数。

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
    expires 30d;
    access_log off;
}
  1. SSL/TLS 配置
    强制 HTTPS:如果你希望网站强制使用 HTTPS,可以通过重定向 HTTP 请求到 HTTPS 来增强安全性。
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

优化 SSL 设置:Nginx 支持 SSL/TLS 加速,正确配置可以提高 HTTPS 访问性能。

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384';
    ssl_prefer_server_ciphers off;
}
  1. 限流和防止 DDoS 攻击
    请求限制:Nginx 可以限制每个 IP 地址的请求频率,从而防止暴力攻击或 DDoS 攻击。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
    location / {
        limit_req zone=one burst=5;
    }
}

限制连接数:限制每个 IP 地址的连接数,防止滥用。

limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
    location / {
        limit_conn addr 10;
    }
}
  1. 防盗链
    禁止外部站点引用资源:通过设置 referer 来防止盗链,保护网站资源。
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
    valid_referers none blocked yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
}
  1. 请求重写和转发
    使用正则表达式进行请求重写:Nginx 支持使用正则表达式进行 URL 重写。
location /old-url/ {
    rewrite ^/old-url/(.*)$ /new-url/$1 permanent;
}
  1. 缓存与反向代理
    基于 URL 参数的缓存:Nginx 允许根据 URL 参数来缓存不同版本的资源。
location / {
    proxy_cache my_cache;
    proxy_cache_key "$scheme$request_method$host$request_uri";
}
  1. 限流和防止 DDoS 攻击
    请求限制:Nginx 可以限制每个 IP 地址的请求频率,从而防止暴力攻击或 DDoS 攻击。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
    location / {
        limit_req zone=one burst=5;
    }
}

限制连接数:限制每个 IP 地址的连接数,防止滥用。

limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
    location / {
        limit_conn addr 10;
    }
}
  1. 防盗链
    禁止外部站点引用资源:通过设置 referer 来防止盗链,保护网站资源。
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
    valid_referers none blocked yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
}
  1. 隐藏 Nginx 版本信息
    默认情况下,Nginx 会在响应头中返回 Nginx 的版本信息,这可能被攻击者利用。为了避免泄露版本信息,可以在配置文件中禁用这一功能。
server_tokens off;
  1. 限制访问敏感文件
    避免暴露敏感文件(如 .htaccess, .git, .env 等),可以配置 Nginx 阻止对这些文件的访问。
location ~* \.(htaccess|htpasswd|git|env|svn)$ {
    deny all;
}
  1. 禁止目录浏览
    默认情况下,Nginx 允许目录浏览(如果目录中没有 index.html 或其他索引文件)。为了避免泄露目录结构,可以禁用目录浏览。
location / {
    autoindex off;
}
  1. 防止 Clickjacking 攻击
    可以通过设置 X-Frame-Options 响应头来防止站点被嵌入到 中,从而防止 Clickjacking 攻击。
add_header X-Frame-Options "SAMEORIGIN";

也可以使用 DENY 来完全阻止站点被嵌入在 iframe 中。

add_header X-Frame-Options "DENY";
  1. 防止跨站脚本攻击 (XSS)
    通过设置 X-XSS-Protection 响应头,可以启用浏览器的内建 XSS 防护。
add_header X-XSS-Protection "1; mode=block";
  1. 防止 MIME 类型嗅探
    设置 X-Content-Type-Options 为 nosniff,可以防止浏览器自动推断 MIME 类型,降低攻击风险。
add_header X-Content-Type-Options "nosniff";
  1. 防止跨站请求伪造(CSRF)
    为了防止 CSRF 攻击,通常使用防护令牌来保证请求的合法性。不过,Nginx 本身并不提供 CSRF 防护机制,但可以通过限制来源(如设置 Referer)来增强安全性。
location / {
    valid_referers none blocked example.com;
    if ($invalid_referer) {
        return 403;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhu hong yu

让灵感不被饿肚子!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值