文字:
proxy模块
HTTP反向代理处理流程
proxy模块
功能:对上游服务器使用http/https协议进行反向代理。
语法:proxy_pass URL;
上下文:if,if in location
URL规则
必须以http或者https开头,接下来是域名|IP地址|Unix socket|upstream的名字。
域名和IP地址后边可以加端口。
最后可以带上可选的URI
URL参数中带有URI会导致法向上游的URL不同
不携带URI,则将客户端请求中的URL直接发送给上游服务器。
携带URI,则对用户请求中的URL做如下操作:
将location中匹配上的一段替换为该URI。
小例子:
upstreamproxyups {
server127.0.0.1:8012 weight=1;
keepalive2;
}
server{
set_real_ip_from 192.168.188.60;
real_ip_headerX-Forwarded-For;
listen8080;
location/a {
proxy_http_version1.1;
proxy_set_headerConnection"";
}
上例中,我配置上游服务器,返回$uri的内容。
上边proxy_pass的配置下:curl 192.168.188.60:8080/a/c,会输出 uri:/a/c,会原封不动地把URI发送给上游服务器。
如果上边第一个proxy_pass的注释打开,注释掉第二条。curl 192.168.188.60:8080/a/c,会输出:uri:/www/c,在location中先进行URI替换,然后再发送给上游服务器。
根据指令修改发往上游的请求
生成发往上游的请求行
proxy_method指令
语法:proxy_method method;
上下文:http,server,location。
作用:设置传给上游服务器的http请求的方法。
proxy_http_version
语法proxy_http_version 1.0|1.1
默认:proxy_http_version 1.0;
如果使用keepalive功能的时候,就必须使用proxy_http_version 1.1。
proxy_pass_requests_headers
作用:是否把用户请求的头部发给上游。如果设置为off,那么就不再把用户请求的header发给上游服务器了。
默认:proxy_pass_requests_headers on;
proxy_pass_requests_body
作用:是否把用户请求的包体发给上游。
默认:proxy_pass_requests_body on;
proxy_set_header
默认:proxy_set_header Host $proxy_host; proxy_set_header Connection close;
作用:在上边proxy_pass_requests_headers为on的情况下,我可以自己设置传给上游服务器的header的头部内容。
proxy_set_body
作用:作用:在上边proxy_pass_requests_body为on的情况下,我可以自己设置传给上游服务器的body的内容。
小例子:
反向代理配置
upstreamproxyups {
server127.0.0.1:8012 weight=1;
}
server{
listen8080;
location/a {