Nginx 配置技巧汇总

发布于:2024-06-16 ⋅ 阅读:(21) ⋅ 点赞:(0)

前言

Nginx 是一款非常流行的高性能 web 和反向代理服务器,它以其稳定性、低资源消耗以及高并发能力而闻名。
本教程中将分享一些实用的 Nginx 配置技巧,这些技巧可以帮助你优化服务器性能和管理网络请求。

1. 配置静态文件缓存

为了提高网站加载速度和降低服务器负载,对静态文件(如图片、JS 和 CSS 文件)进行缓存是一种有效的方法。以下是一个简单的配置示例:

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    access_log off;
    add_header Cache-Control "public";
}

这里我们设置了 expires 指令为 30 天,这意味着浏览器将缓存这些文件30天。我们还通过 access_log off; 禁用了访问日志,以减少磁盘 I/O。

2. 优化 SSL 配置

使用 SSL/TLS 不仅可以保证数据安全,还可以通过启用 HTTP/2 来提高性能。这是一个优化 SSL 配置的示例:

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;
    
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    
    ssl_protocols TLSv1.2 TLSv1.3;
}

这里我们启用了 HTTP/2 并指定了 SSL 证书的位置。我们还设置了 SSL 会话缓存以提高性能,并明确了使用的加密套件和协议版本。

3. 配置反向代理

Nginx 常用作反向代理服务器以增强后端服务的安全性和性能。以下是反向代理的基本配置:

location / {
    proxy_pass http://backend_server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

在这个配置中,所有进入 / 的请求都会被转发到 http://backend_server。同时,我们还设置了几个 HTTP 头部,以确保后端服务可以接收到正确的客户端信息。

4. 限制请求速率

为了保护应用程序免受恶意攻击,如洪水攻击,我们可以使用 Nginx 的 limit_req 模块来限制请求速率:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    
    server {
        location /login {
            limit_req zone=one burst=5;
        }
    }
}

这里我们定义了一个名为 one 的请求速率限制区域,将允许的请求率设置为每秒 1 次请求。在 /login 路径下,我们应用了这个限制,并允许请求在短时间内爆发到 5 次请求。

5. 启用 Gzip 压缩

为了提高网站的响应速度和减少传输数据量,可以在 Nginx 中启用 Gzip 压缩。以下是相关的配置示例:

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary on;
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_comp_level 6;
}

在这个配置中,我们启用了 Gzip 并指定了需要压缩的 MIME 类型。gzip_min_length 指令设置了最小压缩长度,这里是 10KB。我们还通过 gzip_proxied 指定了在何种代理情况下启用压缩。

6. 设置错误页面

为了增强用户体验,我们可以为服务器错误设置自定义错误页面。这样,当错误发生时,用户会看到一个更友好的通知,而不是默认的错误信息。

server {
    error_page 404 /custom_404.html;
    location = /custom_404.html {
        root /usr/share/nginx/html;
        internal;
    }

    error_page 500 502 503 504 /custom_50x.html;
    location = /custom_50x.html {
        root /usr/share/nginx/html;
        internal;
    }
}

这里我们为 404 和 50x 错误指定了自定义页面。internal 指令确保这些页面只能由内部重定向访问。

7. 使用地理位置阻止请求

如果需要根据用户的地理位置来允许或阻止访问某些内容,可以使用 Nginx 的 GeoIP 模块。以下是一个基础配置示例:

http {
    geo $block_country {
        default 0;
        CN 1;
    }

    server {
        if ($block_country) {
            return 403;
        }
    }
}

在这个示例中,我们阻止了来自中国(国家代码 “CN”)的所有请求。default 0 意味着默认不阻止任何国家,除非明确指定。

8. 启用访问日志和错误日志

为了对网站的访问及错误进行记录和分析,我们可以在 Nginx 中配置访问日志和错误日志:

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

默认情况下,Nginx 已经启用了日志记录,但你可以根据需要更改日志文件的位置和日志级别。

总结

Nginx 的配置灵活多变,通过适当的配置,可以显著提高网站的性能和安全性。以上只是一些基本的配置技巧,实际应用中你可能还需要根据具体需求调整配置。希望这些技巧能帮你更好地利用 Nginx 提升你的 web 应用。