Nginx代理服务概述
代理我们往往并不陌⽣, 该服务我们常常⽤到如(代理租房、代理收货等等)
火车票代售点、代购、第三方
那么在互联⽹请求⾥⾯, 客户端⽆法直接向服务端发起请求, 那么就需要⽤到代理服务, 来实现客户端和服务通信
Nginx 作为代理服务可以实现很多的协议代理, 我们主要以 http 代理为主
正向代理(内部上⽹) 客户端<–>代理->服务端
1、客户端知道代理服务器的存在
2、一般用于公司客户端上网
反向代理 客户端->代理<–>服务端
1、客户端不知道代理的存在
2、代理一般是由服务端设置,加快客户端的访问速度的
代理区别
区别在于代理的对象不⼀样
正向代理代理的对象是客户端
反向代理代理的对象是服务端
Nginx代理配置语法
1.Nginx 代理配置语法
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
http://localhost:8000/uri/
http://192.168.1.2:8000/uri/
http://unix:/tmp/backend.socket:/uri/
2.类似于 nopush 缓冲区
//尽可能收集所有头请求,
Syntax: proxy_buffering on | off;
Default:
proxy_buffering on;
Context: http, server, location
//扩展:
proxy_buffer_size
proxy_buffers
proxy_busy_buffer_size
3.跳转重定向
Syntax: proxy_redirect default;
proxy_redirect off;proxy_redirect redirect replacement;
Default: proxy_redirect default;
Context: http, server, location
NGINX的proxy_redirect功能比较强大,其作用是对发送给客户端的URL进行修改。
以例子说明:
server {
listen 80;
server_name test.abc.com;
location / {
proxy_pass http://10.10.10.1:9080;
}
}
这段配置一般情况下都正常,但偶尔会出错, 错误在什么地方呢?
抓包发现服务器给客户端的跳转指令里加了端口号,如 Location: http://test.abc.com:9080/abc.html 。
因为nginx服务器侦听的是80端口,所以这样的URL给了客户端,必然会出错.针对这种情况, 加一条proxy_redirect指令: proxy_redirect http://test.abc.com:9080/ / ,把所有“http://test.abc.com:9080/”的内容替换成“/”再发给客户端,就解决了。
proxy_redirect http://test.abc.com:9080/ /
server {
listen 80;
server_name test.abc.com;
proxy_redirect http://test.abc.com:9080/ /;
location / {
proxy_pass http://10.10.10.1:9080;
}
}
4.头信息
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
//扩展:
proxy_hide_header
proxy_set_body
客户端请求web服务,客户端:
ip:192.168.1.3
nginx作为反向代理服务器:
192.168.1.1
nginx作为后端web服务器:
192.168.1.2
proxy_set_header Host $host; $host就是nginx代理服务器,也就是客户端请求的host。
proxy_set_header Host $proxy_host; proxy_host就是代理服务器请求的host也就是后端服务器208
proxy_set_header X-Real-IP $remote_addr; $remote_addr的值为客户端的ip
proxy_set_header Host $host:$proxy_port; $host代表转发服务器,$proxy_port代表207转发服务器请求后端服务器的端口,也就是80
5.代理到后端的 TCP 连接超时
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
//扩展
proxy_read_timeout /