《nginx反向代理配置讲解》
一、解决方案
当我们的服务器架构中,有多个后端服务需要提供给外部访问,或者为了实现负载均衡、隐藏后端服务真实地址等需求时,Nginx的反向代理功能就非常有用。通过合理的配置Nginx,可以将来自客户端的请求转发给指定的后端服务器,并将后端服务器的响应返回给客户端,整个过程对客户端来说是透明的。
二、单个后端服务器反向代理
这是最简单的情况。假设我们有一个后端Web应用运行在192.168.1.100:8080上。
```nginx
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://192.168.1.100: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;
}
}
``
listen 80;
表示Nginx监听80端口,
servername设置域名。在location块中,
proxypass指定了后端服务器的地址;后面几个
proxysetheader`指令用于设置一些头部信息,例如将客户端的真实IP等信息传递给后端服务器,这对于后端服务器进行日志记录、安全检查等很有帮助。
三、基于路径的反向代理到不同后端
如果有不同的后端服务对应不同的路径。比如/api/开头的请求要转发给一个提供API服务的后端(192.168.1.200:8081),其他请求转发给一个静态资源服务器(192.168.1.201:8082)。
```nginx
server {
listen 80;
server_name www.example.com;
location /api/ {
proxy_pass http://192.168.1.200:8081;
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;
}
location / {
proxy_pass http://192.168.1.201:8082;
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;
}
}
```
四、负载均衡的反向代理
当有多个相同功能的后端服务器时,可以使用Nginx实现简单的轮询负载均衡。
```nginx
upstream backend_servers {
server 192.168.1.300:8080;
server 192.168.1.301:8080;
}
server {
listen 80;
server_name www.example.com;
location / {
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;
}
}
``
upstream`定义了一个名为backendservers的后端服务器组,包含两台服务器,Nginx会按照默认的轮询方式将请求分发给这两台服务器。当然还可以根据需求调整负载均衡算法,如iphash等。