文章目录
展开Nginx反向代理
什么是代理
正向代理:网络代理(代理客户端访问外网)
反向代理:用于公司集群架构,代理服务端
正向代理和反向代理的区别
1.区别在于形式上服务的”对象”不一样
2.正向代理代理的对象是客户端,为客户端服务
3.反向代理代理的对象是服务端,为服务端服务
为什么学代理
当外国的用户想访问你的网站时 网络传输会很慢 效率很低 当外国服务器代理国内服务器以后
外国的用户访问你的网站 实际访问的就是在外国的服务器 效率更高 也可以花钱直接打通两台服务器的内网
代理后端语言的服务(PHP、JAVA、Python...)
反向代理使用的模块
反向代理模块总结
反向代理模式与Nginx代理模块总结如表格所示
反向代理模式 | Nginx配置模块 |
---|---|
http、websocket、https | ngx_http_proxy_module |
fastcgi | ngx_http_fastcgi_module |
uwsg | ngx_http_uwsgi_module |
grpc | ngx_http_v2_module |
nginx反向代理配置
环境准备
主机名 | WanIP | LanIP | 角色 | 应用 |
---|---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | web网站 | nginx |
web02 | 10.0.0.8 | 172.16.1.8 | 反向代理服务器 | nginx |
web01配置文件
## 修改配置文件
[root@web01 ~]# vim /etc/nginx/conf.d/fxdl.conf
server{
listen 80;
server_name www.gouwo.com;
root /blog;
location /{
index index.php index.html;
}
}
## 创建站点目录
[root@web01 ~]# mkdir /blog
## 写入页面显示内容
[root@web01 ~]# echo 'this is web01' > /blog/index.html
## 重启nginx
[root@web01 ~]# systemctl restart nginx
## 访问10.0.0.7
## 修改配置文件
[root@web01 ~]# vim /etc/nginx/conf.d/fxdl.conf
server{
listen 80;
server_name www.gouwo.com;
root /blog;
location /{
index index.php index.html;
}
}
## 创建站点目录
[root@web01 ~]# mkdir /blog
## 写入页面显示内容
[root@web01 ~]# echo 'this is web01' > /blog/index.html
## 重启nginx
[root@web01 ~]# systemctl restart nginx
## 访问10.0.0.7
web02配置
## 安装nginx
[root@web02 ~]# yum install -y nginx
## 修改nginx配置文件
[root@web02 ~]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name blog.gouwo.com;
location /{
proxy_pass http://172.16.1.7:80;
}
}
## 重启
[root@web02 ~]# systemctl start nginx
## 域名解析
10.0.0.8 blog.gouwo.com
## 访问blog.gouwo.com
## 安装nginx
[root@web02 ~]# yum install -y nginx
## 修改nginx配置文件
[root@web02 ~]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name blog.gouwo.com;
location /{
proxy_pass http://172.16.1.7:80;
}
}
## 重启
[root@web02 ~]# systemctl start nginx
## 域名解析
10.0.0.8 blog.gouwo.com
## 访问blog.gouwo.com
代理优化
如通过ip访问,谁的配置文件再上面就访问谁
##解决方法:将域名加入到web02请求web01的请求头中
[root@web02 ~]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name blog.gouwo.com;
location /{
proxy_pass http://172.16.1.7:80;
proxy_set_header Host $host; ## 在代理服务器中的请求头中,加上域名,携带域名去访问后端的web01服务器
}
}
## 上面的配置依然存在问题
web01上的nginx日志,只显示lb01的服务器IP地址,无法显示用户的真实IP地址
## 解决方案:在web02的请求头中,加上用户真实IP去访问web01
[root@web02 ~]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name blog.gouwo.com;
location /{
proxy_pass http://172.16.1.7:80;
proxy_set_header Host $host; ## 在代理服务器中的请求头中,加上域名,携带域名去访问后端的web01服务器
proxy_set_header Host $host;
## 在代理服务器的请求头中,透传用户的真实IP地址给web01
}
}
##完整版优化
[root@web02 ~]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name blog.gouwo.com;
location /{
proxy_pass http://172.16.1.7:80;
proxy_set_header Host $host;
## 在代理服务器中的请求头中,加上域名,携带域名去访问后端的web01服务器
proxy_set_header Host $host;
## 在代理服务器的请求头中,透传用户的真实IP地址给web01
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
## web02连接web01的超时时间(代理服务器,连接后端服务的超时时间)
proxy_connect_timeout 60s;
## web02代理服务器读取web01返回的数据超时时间(代理后端的服务器响应代理服务器的超时时间)
proxy_read_timeout 60s;
## 后端服务器回传给代理服务器数据的超时时间
proxy_send_timeout 60s;
## 开启代理服务器的缓冲区,代理服务器接收到web01返回的数据,接收一条,返回给用户一条
proxy_buffering on;
## 开启存放头部信息的缓冲区大小为 32k
proxy_buffer_size 32k;
## 开启4个128k的存放数据主体的缓冲区
proxy_buffers 4 128k;
}
}
#### 避免配置文件重复使用
[root@web02 ~]# vim /etc/nginx/conf.d/proxy.conf
server{
listen 80;
server_name blog.gouwo.com;
location /{
proxy_pass http://172.16.1.7:80;
include proxy_params;
}
}
[root@web02 ~]# vim /etc/nginx/proxy_params
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
##重启nginx
[root@web02 ~]# systemctl restart nginx
为什么服务器之间使用内网通信
1.内网安全
2.内网传输数据速度快
3.在企业中,除了对外提供服务的服务器需要开启公网IP以外,其它机器只有内网IP
Comments | NOTHING