反向代理是一个Web服务器,它接受客户端的连接请求,然后将请求转发给上游服务器,并将从服务器得到的结果返回给连接的客户端。下面简单的反向代理的例子:
server {
listen 80;
server_name localhost;
client_max_body_size 1024M; # 允许客户端请求的最大单文件字节数
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr; # HTTP的请求端真实的IP
proxy_set_header X-Forwarded-Proto $scheme; # 为了正确地识别实际用户发出的协议是 http 还是 https
}
}
复杂的配置
server {
#侦听的80端口
listen 80;
server_name git.example.cn;
location / {
proxy_pass http://localhost:3000;
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
}
}
代理到上游服务器的配置中,最重要的是proxy_pass指令。以下是代理模块中的一些常用指令:
指令 | 说明 |
---|---|
proxy_connect_timeout | Nginx从接受请求至连接到上游服务器的最长等待时间 |
proxy_send_timeout | 后端服务器数据回传时间(代理发送超时) |
proxy_read_timeout | 连接成功后,后端服务器响应时间(代理接收超时) |
proxy_cookie_domain | 替代从上游服务器来的Set-Cookie头的domain属性 |
proxy_cookie_path | 替代从上游服务器来的Set-Cookie头的path属性 |
proxy_buffer_size | 设置代理服务器(nginx)保存用户头信息的缓冲区大小 |
proxy_buffers | proxy_buffers缓冲区,网页平均在多少k以下 |
proxy_set_header | 重写发送到上游服务器头的内容,也可以通过将某个头部的值设置为空字符串,而不发送某个头部的方法实现 |
proxy_ignore_headers | 这个指令禁止处理来自代理服务器的应答。 |
proxy_intercept_errors | 使nginx阻止HTTP应答代码为400或者更高的应答。 |