Nginx反向代理服务
Nginx反向代理服务
Nginx代理服务基本概述
什么是代理
代理一词往往并不陌生, 该服务我们常常用到如(代理理财、代理租房、代理收货等等),如下图所示
没有代理情况
在没有代理模式的情况下,客户端和Nginx
服务端,都是客户端直接请求服务端,服务端直接响应客户端
企业场景
那么在互联网请求里面,客户端往往无法直接向服务端发起请求,那么就需要用到代理服务,来实现客户端和服务通信,如下图所示
Nginx代理服务常见模式
Nginx作为代理服务,按照应用场景模式进行总结,代理分为正向代理、反向代理
正向代理
正向代理,(内部上网)客户端<—>代理->服务端
反向代理
反向代理,用于公司集群架构中,客户端->代理<—>服务端
正向代理与反向代理的区别
1.区别在于形式上服务的”对象”不一样
2.正向代理代理的对象是客户端,为客户端服务
3.反向代理代理的对象是服务端,为服务端服务
Nginx代理服务支持协议
Nginx作为代理服务,可支持的代理协议非常的多,具体如下图
反向代理使用协议
如果将Nginx作为反向代理服务,常常会用到如下几种代理协议,如下图所示
反向代理模块
反向代理模式与Nginx代理模块总结如表格所示
反向代理模式 | Nginx****配置模块 |
---|---|
http、websocket、https | ngx_http_proxy_module |
fastcgi | ngx_http_fastcgi_module |
uwsgi | ngx_http_uwsgi_module |
grpc | ngx_http_v2_module |
环境准备
主机名 | 角色 | 外网IP | 内网IP |
---|---|---|---|
lb01 | 反向代理服务器 | 10.0.0.5 | 172.16.1.5 |
web01 | 被代理的服务器 | 10.0.0.7 | 172.16.1.7 |
部署代理服务器
# 1.安装nginx
[root@lb01 ~]# yum install -y nginx
# 2.修改nginx的配置文件
[root@lb01 ~]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name blog.drz.com;
location / {
proxy_pass http://172.16.1.7:80;
}
}
# 3.本地域名解析C:\Windows\System32\drivers\etc\hosts
10.0.0.5 blog.drz.com
## 代理172.16.1.7的80端口
proxy_pass http://172.16.1.7:80;
## 存在问题,后端网站是通过IP访问的,没有通过域名
proxy_set_header Host $http_host; ## 将域名放入请求头中,带到后端
server{
listen 80;
server_name zh.drz.com;
location / {
proxy_pass http://172.16.1.7:80;
proxy_set_header Host $http_host;
}
}
## 存在问题,后端无法获取真实用户IP,只能获取代理服务器IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ## 透传用户的真实ip到web服务器
server{
listen 80;
server_name zh.drz.com;
location / {
proxy_pass http://172.16.1.7:80;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
## 减少代理的配置
[root@lb01 nginx]# vim /etc/nginx/proxy_params
## 将域名放入请求头中,带到后端
proxy_set_header Host $http_host;
## 透传用户的真实ip到web服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# http1.1版本
proxy_http_version 1.1;
# 代理到web服务器的连接超时时间
proxy_connect_timeout 60;
# web服务器回传数据给代理服务器的超时时间
proxy_send_timeout 60;
# 代理服务器等待web服务器的响应时间
proxy_read_timeout 60;
# 开启缓冲区
proxy_buffering on;
# 请求头缓冲区的大小
proxy_buffer_size 32k;
# 开启4个缓冲区,每个缓冲区大小为128k
proxy_buffers 4 128k;
## 代理配置文件
[root@lb01 nginx]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name zh.drz.com;
location / {
proxy_pass http://172.16.1.7:80;
include /etc/nginx/proxy_params;
}
}