Nginx反向代理
反向代理(reverse proxy):指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
常用指令 | 说明 | 示例 |
---|---|---|
proxy_pass | 用来设置将请求转发给的后端服务器的主机,可以是主机名、IP地址:端口的方式,也可以代理到通过upstream设置的主机组; | 如示例一 |
proxy_hide_header | Nginx会将上游服务器的响应转发给客户端,但默认不会转发以下HTTP头部字段:Date、Server、X-Pad和X-Accel-*。使用proxy_hide_header后可以任意地指定哪些HTTP头部字段不能被转发。 注:如果是nginx直接作为web服务器,要隐藏版本信息的话,使用fastcgi_hide_header: | |
proxy_pass_header | 将原来禁止转发的header设置为允许转发。 | |
proxy_pass_request_body | 是否向后端服务器发送HTTP包体部分,可以设置在http/server或location块。 | |
proxy_pass_request_headers | 是否将客户端的请求头部转发给后端服务器,可以设置在http/server或location块。 | |
proxy_set_header | 可以更改或添加客户端的请求头部信息内容,并转发之后端服务器,比如在后端服务器想要获取客户端的真实IP的时候,就要更改每一个报文的头部。 | |
proxy_set_body | 更改nginx服务器接收到的客户端请求的请求内容,然后将修改后的请求转发给后端的服务器。 | |
proxy_ip | Nginx 0.8.22版本及以上支持此功能,用于Nginx配置了多个基于域名或IP的主机的情况下,可以指定代理连接到特定的主机处理,就是强制将客户端请求绑定到指定的IP地址。 | |
proxy_connect_timeout | 配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒。 | |
proxy_read_time | 配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间。 | |
proxy_send_time | 配置nginx向后端服务器或服务器组发起write请求后,等待的超时时间。 | |
proxy_http_version | 用于设置nginx提供代理服务的HTTP协议的版本。 | |
proxy_method | 设置nginx服务器请求后端服务器时使用的方法,一般为POST或者GET,客户端的请求方法将被忽略。 | |
proxy_ignore_client_abort | 设置在客户端网络中断请求时,nginx服务器是否中断对被代理服务器的请求。 | |
proxy_ignore_headers | 设置nginx不处理后端服务器返回的数据中包含某些指定字段的报文,可以指定的有:”X-Accel-Redirect”, “X-Accel-Expires”, “Expires”或”Cache-Control”; | |
proxy_redirect | 修改后端服务器返回的响应头部中的location或refresh,与proxy_pass配合使用。 | |
proxy_intercept_errors | 设置nginx服务器返回客户端的错误状态,当后端服务器返回大于等于400的错误码的是,如果本功能是打开的,则nginx服务器返回自定义的错误页面(使用error page定义的),如果没有开启就将后端服务器返回的HTTP状态直接返回给客户端,默认为关闭; | |
proxy_headers_hash_max_size | 设置nginx保存HTTP报文头的hash表的上限,默认为512字节; | |
proxy_headers_hash_bucket_size | 申请nginx保存HTTP报文头的hash表的空间大小,默认为64个字节。 | |
proxy_net_upstream | 当使用了upstream的时候,可以定义在发生了特定的情况下将请求依次交给下一个组内的服务器处理,状态包括: | 示例二 |
proxy_ssl_session_reuse | 配置是否基于SSL协议与后端服务器建立连接; | |
示例一:
upstream webserver {
#ip_hash;
server 192.168.0.201 weight=1 max_fails=2 fail_timeout=2;
server 192.168.0.202 weight=1 max_fails=2 fail_timeout=2;
server 127.0.0.1:9008 backup;
}
server {
server_name hfnginx.chinacloudapp.cn;
#access_log logs/host.access.log main;
location / { #静态网页在本机
root html;
index index.html;
}
location ~* ^/form { #指定目录在后端服务器
proxy_pass http://webserver; #此处http://webserver后面不能加/,如果加了会提示语法错误
proxy_set_header X-Real-IP $remote_addr;
}
}
示例二:
proxy_next_upstream http_404 http_502; //让404报错进入max_fails计数
upstream online {
sticky;
server 172.28.70.161:8080 max_fails=0 fail_timeout=3s ;
server 172.28.70.163:8080 max_fails=0 fail_timeout=3s ;
check interval=3000 rise=2 fall=1 timeout=1000 type=http;
check_http_send "GET / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
upstream backup {
server 172.28.22.29:7777 max_fails=0 fail_timeout=3s;
}