1. 找到对应网站的 Nginx 配置文件
在宝塔面板中,每个网站的配置文件通常位于以下路径:
/www/server/nginx/conf/vhost/
在该目录下,你会看到以 .conf
结尾的文件,每个文件对应一个网站的 Nginx 配置。例如,如果你有一个网站 example.com
,对应的配置文件可能是:
/www/server/nginx/conf/vhost/example.com.conf
2. 编辑网站的 Nginx 配置文件
打开对应的网站配置文件,例如 example.com.conf
,并根据需求修改其中的配置。
如果你想为该网站配置负载均衡,可以在该 .conf
文件中加入 upstream
负载均衡配置。示例如下:
2.1. 基础负载均衡与代理配置
首先,我们定义了一个 upstream
后端服务器组,配置了健康检查和故障转移。
# 定义后端服务器组 upstream backend_servers { server 192.168.1.2 max_fails=3 fail_timeout=30s; # 后端服务器 1 server 192.168.1.3 max_fails=3 fail_timeout=30s; # 后端服务器 2 server 192.168.1.4 max_fails=3 fail_timeout=30s; # 后端服务器 3 } server { listen 80; server_name www.example.com; # 设置域名 # 代理转发请求到后端服务器 location / { proxy_pass http://backend_servers; # 将请求转发到 upstream 定义的服务器组 # 设置代理头,确保正确传递客户端信息 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; # 代理设置 proxy_buffering on; # 开启缓冲 proxy_cache off; # 关闭缓存 proxy_connect_timeout 10s; # 连接超时 proxy_read_timeout 30s; # 读取超时 proxy_send_timeout 30s; # 发送超时 } # 错误页面配置 error_page 502 503 504 /custom_50x.html; location = /custom_50x.html { root /usr/share/nginx/html; internal; } }
2.2. 启用 HTTPS 和 SSL 配置
为了启用 SSL,我们将服务器监听端口 443
,并配置 SSL 证书和私钥。
server { listen 443 ssl http2; server_name www.example.com; # 设置域名 # SSL 配置 ssl_certificate /path/to/ssl/certificate.crt; # SSL 证书路径 ssl_certificate_key /path/to/ssl/private.key; # SSL 私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 启用的 SSL/TLS 协议 ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256'; # 强加密套件 # 将 HTTP 请求重定向到 HTTPS location / { proxy_pass https://backend_servers; # 将流量转发到后端的 HTTPS 服务器 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 强制跳转到 HTTPS server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; # 强制所有 HTTP 请求跳转到 HTTPS }
2.3. 流量限制与防止滥用
使用 limit_req
限制每秒请求的数量,防止过多请求导致的服务器压力。
http { # 定义限流区域 limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; # 每秒最多 10 个请求 server { listen 80; server_name www.example.com; # 限制每个 IP 地址的请求频率 location / { limit_req zone=req_limit_per_ip burst=20 nodelay; # 限制流量,最多突发 20 个请求 proxy_pass http://backend_servers; } } }
2.4. 日志配置与自定义日志格式
日志配置包括自定义日志格式,以及设置访问日志和错误日志路径。
http { # 自定义日志格式 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 /www/wwwlogs/access.log main; # 访问日志 error_log /www/wwwlogs/error.log warn; # 错误日志 server { listen 80; server_name www.example.com; location / { proxy_pass http://backend_servers; } } }
2.5. 缓存与静态文件优化
为了提升性能,可以缓存静态资源,减轻后端负担。
server { listen 80; server_name www.example.com; # 配置静态资源缓存 location /static/ { root /var/www/html; # 设置静态文件根目录 expires 30d; # 设置缓存过期时间为 30 天 add_header Cache-Control public; # 设置缓存控制头部 } # 动态请求转发到后端服务器 location / { proxy_pass http://backend_servers; } }
2.6. 健康检查与故障转移
Nginx 本身没有原生的健康检查机制,但我们可以通过 max_fails
和 fail_timeout
来实现基础的故障转移。这里我们定义了服务器失败的最大次数和失败时间窗口。
upstream backend_servers { # 健康检查配置:最大失败次数为 3,超时 30 秒 server 192.168.1.2 max_fails=3 fail_timeout=30s; server 192.168.1.3 max_fails=3 fail_timeout=30s; server 192.168.1.4 max_fails=3 fail_timeout=30s; }
2.7. 完整的配置示例
http { # 定义后端服务器组 upstream backend_servers { server 192.168.1.2 max_fails=3 fail_timeout=30s; # 后端服务器 1 server 192.168.1.3 max_fails=3 fail_timeout=30s; # 后端服务器 2 server 192.168.1.4 max_fails=3 fail_timeout=30s; # 后端服务器 3 } # 自定义日志格式 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 /www/wwwlogs/access.log main; # 访问日志 error_log /www/wwwlogs/error.log warn; # 错误日志 # 限流配置 limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; # 设置最大请求头部大小 client_max_body_size 10M; server { listen 80; server_name www.example.com; # 配置静态文件缓存 location /static/ { root /var/www/html; expires 30d; add_header Cache-Control public; } # 限制每个 IP 地址的请求频率 location / { limit_req zone=req_limit_per_ip burst=20 nodelay; # 限制流量,最多突发 20 个请求 proxy_pass http://backend_servers; 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; } # 错误页面配置 error_page 502 503 504 /custom_50x.html; location = /custom_50x.html { root /usr/share/nginx/html; internal; } } # HTTPS 配置 server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /path/to/ssl/certificate.crt; ssl_certificate_key /path/to/ssl/private.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256'; location / { proxy_pass https://backend_servers; 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; } }
3. 保存配置并重载 Nginx
配置修改完成后,保存文件,然后在宝塔面板的 Nginx 设置 页面点击 重载配置 使更改生效。
4.总结
负载均衡配置需要写在 对应网站的 .conf
配置文件 中,通常是在 /www/server/nginx/conf/vhost/
目录下。每个 .conf
文件对应一个站点,你可以在该文件中添加 upstream
配置和负载均衡规则。配置完成后,别忘了重载 Nginx 使其生效。
如果你有多个网站需要配置负载均衡,每个网站的配置文件都可以单独进行修改。