【Nginx 进阶】Nginx 高级配置
【Nginx进阶】系列文章目录
【Nginx 进阶】1、Nginx 高级配置(本文)
【Nginx 进阶】2、模块化设计
【Nginx 进阶】3、负载均衡策略
【Nginx 进阶】4、SSL/TLS 配置
【Nginx 进阶】5、Nginx 性能优化
【Nginx 进阶】6、Nginx 与第三方服务集成
【Nginx 进阶】7、安全配置
【Nginx 进阶】8、Nginx 高可用性
【Nginx 进阶】9、监控和调试
在完成了 Nginx 的入门系列后,我们已经掌握了 Nginx 的基本使用和配置方法。在本章中,我们将深入探讨 Nginx 的高级配置,帮助你更加灵活和高效地管理和优化你的 Nginx 服务器。
1. 高级配置概述
Nginx 的高级配置涉及多个方面,包括增强的负载均衡策略、高级缓存配置、自定义错误页面、动态内容处理、静态和动态内容分离等。这些配置可以帮助你更好地利用 Nginx 的强大功能,提升服务器的性能和可靠性。
2. 负载均衡策略
Nginx 提供了多种负载均衡策略,可以根据不同的需求选择合适的策略:
2.1 轮询 (Round Robin)
这是默认的负载均衡策略,Nginx 按照顺序将请求依次分配给每个后端服务器:
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
2.2 最少连接 (Least Connections)
将请求分配给当前活动连接数最少的服务器:
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
2.3 IP 哈希 (IP Hash)
根据客户端 IP 地址分配请求,确保同一客户端的请求总是分配到同一台服务器:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
2.4 健康检查
配置健康检查,确保请求只分配给健康的服务器:
upstream backend {
server backend1.example.com;
server backend2.example.com;
# 配置健康检查
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
3. 高级缓存配置
Nginx 的缓存功能可以显著提高网站性能,减少后端服务器的负载:
3.1 配置缓存路径
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
3.2 启用缓存
server {
listen 80;
server_name example.com;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3.3 缓存清理
使用 proxy_cache_purge
指令启用缓存清理功能:
location /purge/ {
allow 127.0.0.1; # 只允许本地主机清理缓存
deny all;
proxy_cache_purge my_cache "$scheme://$host$request_uri";
}
4. 自定义错误页面
自定义错误页面可以提升用户体验:
server {
listen 80;
server_name example.com;
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;
}
}
5. 动态内容处理
Nginx 通常与其他服务器(如 PHP-FPM、Node.js 等)配合处理动态内容:
5.1 PHP-FPM 配置
server {
listen 80;
server_name example.com;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
5.2 Node.js 配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
6. 静态和动态内容分离
为了优化性能,可以将静态内容和动态内容分离到不同的服务器:
server {
listen 80;
server_name static.example.com;
location / {
root /usr/share/nginx/static;
}
}
server {
listen 80;
server_name dynamic.example.com;
location / {
proxy_pass http://backend_dynamic;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
7. 完整示例
下面是一个综合了高级配置的完整示例:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
upstream backend {
least_conn;
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name example.com;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /images/ {
root /data;
}
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;
}
}
8. 总结
在本章中,我们详细介绍了 Nginx 的高级配置,包括负载均衡策略、高级缓存配置、自定义错误页面、动态内容处理以及静态和动态内容的分离。通过掌握这些高级配置,你可以更好地利用 Nginx 的强大功能,提升服务器的性能和可靠性。在接下来的教程中,我们将探讨 Nginx 的模块化设计,敬请期待!