在IDC运维工作中,Nginx 是最常用的 Web 服务器和反向代理工具。当你的网站流量增长到单台服务器扛不住时,反向代理和负载均衡就是必须掌握的技能。
<h2>一、反向代理是什么</h2>
反向代理(Reverse Proxy)位于客户端和真实服务器之间,客户端不直接访问后端服务器,而是通过反向代理转发请求。
反向代理的好处:
<ul>
<li>隐藏后端服务器真实 IP,提升安全性</li>
<li>可以统一 SSL 证书管理</li>
<li>实现负载均衡,分发流量到多台后端</li>
<li>缓存静态内容,减轻后端压力</li>
</ul>
<h2>二、Nginx 反向代理基本配置</h2>
<pre><code>server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
</code></pre>
几个关键配置说明:
<ul>
<li><code>proxy_pass</code>:指定后端服务器的地址</li>
<li><code>proxy_set_header</code>:传递客户端的真实信息给后端</li>
<li><code>X-Real-IP</code>:后端能获取客户端真实 IP</li>
</ul>
<h2>三、负载均衡配置</h2>
当后端有多台服务器时,用 upstream 定义服务器组:
<pre><code>upstream backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=2;
server 192.168.1.12:8080 backup;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
</code></pre>
Nginx 支持的负载均衡策略:
<ul>
<li><strong>轮询(默认)</strong>:依次分发,请求均匀</li>
<li><strong>weight</strong>:按权重分配,性能好的多分请求</li>
<li><strong>ip_hash</strong>:同一 IP 固定分配同一后端,解决 Session 问题</li>
<li><strong>least_conn</strong>:优先分配给连接数最少的服务器</li>
</ul>
<h2>四、健康检查</h2>
<pre><code>upstream backend {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}
</code></pre>
<code>max_fails=3</code> 连续失败 3 次判为不可用,<code>fail_timeout=30s</code> 30 秒后重试。
<h2>五、SSL 终结和 WebSocket 代理</h2>
反向代理统一管理 SSL 证书,后端不用操心:
<pre><code>server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / { proxy_pass http://backend; }
}
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
</code></pre>
<h2>六、常见问题排查</h2>
<ol>
<li><strong>502 Bad Gateway</strong>:后端服务没启动或端口不通</li>
<li><strong>504 Gateway Timeout</strong>:后端响应超时,加 <code>proxy_read_timeout 60s;</code></li>
<li><strong>静态资源 404</strong>:检查 proxy_pass 路径是否带了斜杠</li>
</ol>
<h2>总结</h2>
Nginx 反向代理和负载均衡是 IDC 运维的标配技能。配好健康检查和负载策略,网站的高可用性就有了基本保障。
(这个工具是我们自己写的:[七亿批量远程管理工具](https://blog.7ehl.com/index.php/archives/3/),免费,Windows 端,一台电脑批量管服务器。)
评论