反向代理
反向代理(Reverse Proxy
),是指用代理服务器来接受Internet
上的连接请求,然后将 请求转发给内网上的上游服务器,并将从上游服务器上得到的结果返回给Internet
上的请求连接的客户端,此时代理服务器对外的表现就是一个Web
服务器。
Nginx作为反向代理的原因
Nginx
具备高并发高负载能力,因此一般用作前端服务器直接向客户端提供静态文件服务。对于一些复杂业务不适合放在Nginx
服务器上的一般用Apache
、Tomcat
等服务器来处理。此时就需要将Nginx同时配置为静态服务器以及反向代理,不适合Nginx处理的请求就通过反向代理功能转发到上游服务器中处理。
从另一个角度,只有用户的动态请求(不同用户请求结果不同)才会需要反向代理,如果结果一样就是静态资源请求。
Nginx作为反向代理的特点
当客户端发来HTTP
请求时,Nginx
并不会立即转发到上游服务器,而是先把用户的请求(包括HTTP
包体)完整的接收到Nginx
所在服务器的硬盘或内存中,然后再向上游服务器发起连接。
而Squid
等代理服务器则是一边接收客户端请求,一边转发到上游服务器。
Nginx
方式可以降低上游服务器的负载,降低其并发压力。
所需模块
具体配置步骤
以最简单的方式配置一个反向代理。
将上篇搭建的静态服务器改为上游服务器
上游服务器一般是内网服务器。
vim /home/nginx/conf/nginx.conf
修改:
http {
server {
listen 127.0.0.1:8080; # 127.0.0.1表示只能本机进程访问
}
}
停止原来的Nginx进程,并重启
/home/nginx/sbin/nginx -s stop
/home/nginx/sbin/nginx
此版本为1.16.1
用OpenResty搭建反向代理
依据OpenResty® Linux 包界面方式下载、安装OpenResty
。
修改OpenResty下Nginx配置
vim /usr/local/openresty/nginx/conf/nginx.conf
http {
upstream local { # 表示上游服务器地址,将这一批服务器命名为local
server 127.0.0.1:8080 # 其中一台服务器地址,可以有很多
}
server {
sercer_name localhost;
listen 80;
location / { # 对所有的请求
proxy_pass http://local; # 代理到刚才配置的上游服务中
}
}
}
启动OpenResty下的Nginx
/usr/local/openresty/nginx/sbin/nginx
此时访问ip:80
,抓包可以看到请求头是OpenResty
返回的。
配置缓存服务器\响应服务器
http {
upstream local { # 表示上游服务器地址,将这一批服务器命名为local
server 127.0.0.1:8080 # 其中一台服务器地址,可以有很多
}
server {
sercer_name localhost;
listen 80;
location / { # 对所有的请求
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forward_for;
proxy_cache my_cache;
proxy_cache_key $host$uri$is_arfs$args;
proxy_cache_valid 200 304 302 ld;
proxy_pass http://local; # 代理到刚才配置的上游服务中
}
}
}