什么是代理
正向代理:网络代理(代理客户端访问外网)
反向代理:用于公司集群架构,代理服务端
正向代理和反向代理的区别
1.区别在于形式上服务的”对象”不一样
2.正向代理代理的对象是客户端,为客户端服务
*3.反向代理代理的对象是服务端,为服务端服务
为什么学代理
nginx代理PHP服务(fastcgi_pass:127.0.0.1:9000)
1.代理后端语言的服务(PHP、JAVA、Python...)
2.国外服务器代理国内服务器,方便国外用户上网
反向代理模块总结
*反向代理模式与Nginx代理模块总结如表格所示*
反向代理模式 | Nginx配置模块 |
http、websocket、https | ngx_http_proxy_module |
fastcgi | ngx_http_fastcgi_module |
uwsgi | ngx_http_uwsgi_module |
grpc | ngx_http_v2_module |
nginx反向代理配置
环境准备
主机名 | WanIP | LanIP | 角色 | 应用 |
web01 | 10.0.0.7 | 172.16.1.7 | web网站 | nginx、php、wordpress |
lb01 | 10.0.0.5 | 172.1.6.1.5 | 反向代理服务器 | nginx |
db01 | 10.0.0.51 | 172.16.1.51 | 数据库 | MariaDB |
安装LNMP环境
# 1.yum下载下来的所有rpm结尾的包
[root@web01 ~]# find /var/cache/yum/ -type f -name '*.rpm'
# 2.开启yum缓存
[root@web01 ~]# vim /etc/yum.conf
[main]
keepcache=1
# 3.添加nginx源
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# 4.添加PHP源
[root@web01 ~]# vim /etc/yum.repos.d/php.repo
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
# 5.安装nginx和php
[root@web01 ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb nginx
# 6.将所有rpm包拷贝到opt目录下
[root@web01 ~]# find /var/cache/yum/ -type f -name '*.rpm'|xargs cp -t /opt/
# 7.进入opt目录打包
[root@web01 ~]# cd /opt/
[root@web01 opt]# tar zcf nginx_php.tgz *.rpm (下载到电脑方便以后下载)
#### 安装
[root@web02 nginx_php]# rpm -Uvh *.rpm
[root@web02 nginx_php]# yum localinstall -y *.rpm
# 8.安装数据库
[root@db01 ~]# yum install -y mariadb-server
nginx做代理服务器(lb01)
##1.部署nginx,php-fpm
##2.部署wordpress
##3.部署数据库
# 1.安装nginx
[root@lb01 ~]# yum install -y nginx
# 2.添加nginx代理配置文件
[root@lb01 ~]# vim /etc/nginx/conf.d/jyj_proxy.conf
server {
listen 80;
server_name www.jyj.com;
location /{
proxy_pass http://172.16.1.7:80;
}
}
# 3.启动nginx并加入开机自启
[root@lb01 ~]# systemctl start nginx
[root@lb01 ~]# systemctl enable nginx
# 4.域名解析
10.0.0.5 blog.zls.com
以上配置存在的问题
lb01 通过 172.16.1.7 80端口访问后端的web01
因为是通过IP访问,所以,配置文件谁在上面,则访问哪个页面 (nginx有个默认配置文件)
解决方案:将域名加入到,lb01请求web01的请求头中
[root@lb01 ~]# vim /etc/nginx/conf.d/jyj_proxy.conf
server {
listen 80;
server_name www.jyj.com;
location /{
proxy_pass http://172.16.1.7:80;
## 在代理服务器中的请求头中,加上域名,携带域名去访问后端的web01服务器
proxy_set_header Host $host;
}
}
##web和lb01都可以看到日志,区别是访问ip不同
10.0.0.1 - - [14/Jun/2022:20:01:54 +0800] "GET /favicon.ico HTTP/1.1" 404 555 "http://blog.zls.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" "-"
172.16.1.5 - - [14/Jun/2022:20:01:54 +0800] "GET /favicon.ico HTTP/1.0" 404 555 "http://blog.zls.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" "-"
## 上面的配置依然存在问题
web01上的nginx日志,只显示lb01的服务器IP地址,无法显示用户的真实IP地址
解决方案:在lb01的请求头中,加上用户真实IP去访问web01
server {
listen 80;
server_name www.jyj.com;
location /{
proxy_pass http://172.16.1.7:80;
## 在代理服务器中的请求头中,加上域名,携带域名去访问后端的web01服务器
proxy_set_header Host $host;
## 在代理服务器的请求头中,透传用户的真实IP地址给web01,$后面接配置文件中的日志格式
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
##加上优化参数
server {
listen 80;
server_name www.jyj.com;
location /{
proxy_pass http://172.16.1.7:80;
## 在代理服务器中的请求头中,加上域名,携带域名去访问后端的web01服务器
proxy_set_header Host $host;
## 在代理服务器的请求头中,透传用户的真实IP地址给web01,$后面接配置文件中的日志格式
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
## lb01连接web01的超时时间(代理服务器,连接后端服务的超时时间)
proxy_connect_timeout 60s;
## lb01连接web01的超时时间(代理服务器,连接后端服务的超时时间)
proxy_connect_timeout 60s;
## lb01代理服务器读取web01返回的数据超时时间(代理后端的服务器响应代理服务器的超时时间)
proxy_read_timeout 60s;
## 后端服务器回传给代理服务器数据的超时时间
proxy_send_timeout 60s;
## 开启代理服务器的缓冲区,代理服务器接收到web01返回的数据,接收一条,返回给用户一条
proxy_buffering on;
## 开启存放头部信息的缓冲区大小为 32k
proxy_buffer_size 32k;
## 开启4个128k的存放数据主体的缓冲区
proxy_buffers 4 128k;
}
}
## 避免配置文件重复使用
server {
listen 80;
server_name www.jyj.com;
location /{
proxy_pass http://172.16.1.7:80;
include proxy_params;
}
}
[root@lb01 ~]# cat /etc/nginx/proxy_params (名字随便起)
## 在代理服务器的请求头中,加上域名,携带域名去访问后端的web01服务器
proxy_set_header Host $host;
## 在代理服务器的请求头中,透传用户的真实IP地址给web01
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
## lb01连接web01的超时时间(代理服务器,连接后端服务的超时时间)
proxy_connect_timeout 60s;
## lb01代理服务器读取web01返回的数据超时时间(代理后端的服务器响应代理服务器的超时时间)
proxy_read_timeout 60s;
## 后端服务器回传给代理服务器数据的超时时间
proxy_send_timeout 60s;
## 开启代理服务器的缓冲区,代理服务器接收到web01返回的数据,接收一条,返回给用户一条
proxy_buffering on;
## 开启存放头部信息的缓冲区大小为 32k
proxy_buffer_size 32k;
## 开启4个128k的存放数据主体的缓冲区
proxy_buffers 4 128k;