代理和负载均衡
什么是代理?
代理一词往往并不陌生, 该服务我们常常用到如(代理理财、代理租房、代理收货等等),如下图所示
没有代理情景
在没有代理模式的情况下,客户端和 Nginx 服务端,都是客户端直接请求服务端,服务端直接响应客户端。
企业场景
那么在互联网请求里面,客户端往往无法直接向服务端发起请求,那么就需要用到代理服务,来实现客户端和服务通信,如下图所示。
Nginx代理服务常见模式:
Nginx作为代理服务,按照应用场景模式进行总结,代理分为正向代理、反向代理
正向代理与反向代理的区别:
1.区别在于形式上服务的”对象”不一样
2.正向代理代理的对象是客户端,为客户端服务
3.反向代理代理的对象是服务端,为服务端服务
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 |
Nginx反向代理配置语法
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
http://localhost:8000/uri/
http://192.168.56.11:8000/uri/
http://unix:/tmp/backend.socket:/uri/
location
proxy_pass
主机 |
WAN IP |
Lan IP |
角色 |
应用 |
web01 |
10.0.0.6 |
127.16.1.6 |
web网站 |
nginx php wordpress |
lb01 |
10.0.0.5 |
127.16.1.5 |
反向代理服务 |
nginx |
db01 |
10.0.0.51 |
127.16.1.51 |
数据库 |
mariadb |
web服务器
# 安装gninx php
yum install -y nginx
# 编写wordpress配置文件
vim /etc/nginx/conf.d/1.conf
server {
listen 80;
server_name www.wp.com;
root /test;
index index.html;
}
# 创建站点目录
mkdir /test
# 准备索引文件
echo 123 > /test/index.html
# 启动nginx 和 php
systemctl start nginx
# 访问页面
www.wp.com
部署反向代理服务器(proxy_pass)
# 安装nginx
yum install -y nginx
# 编辑代理配置文件
vim /etc/nginx/conf.d/lb.conf
server{
listen 80;
server_name www.wp.com;
location / {
proxy_pass http://172.16.1.7:80;
proxy_set_header HOST $HOST; # 不会盲目访问conf.d目录下的第一个文件
}
}
# 检测nginx 语法
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 启动nginx
[root@lb01 ~]# systemctl start nginx
# 本地DNS解析
10.0.0.5 www.wp.com
# 问题1
lb01是通过访问172.16.1.7:80端口访问到后端的web服务器
web01的/etc/nginx/conf.d/下谁的配置文件在第一层 就优先访问谁
# 处理方式 proxy_set_header HOST $HOST;
将域名放到后面 lb01请求web01的时候带着域名去访问
server{
listen 80;
server_name www.wp.com;
location / {
proxy_pass http://172.16.1.7:80;
proxy_set_header HOST $HOST;
}
}
# 访问浏览器
www.wp.com
优化nginx配置文件
# 准备优化文件
vim /etc/nginx/proxy_params
# 在代理服务器上的请求头中 带着域名去访问后端的web服务器
优化后的nginx代理配置文件
proxy_set_header Host $http_host;
# 在代理服务器得请求头中 透传用户的真实ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 代理服务器连接后端web的超时时间
proxy_connect_timeout 30;
# 后端服务器回传给代理服务器的超时时间
proxy_send_timeout 60;
# 后端服务器收到数据的接受超时时间
proxy_read_timeout 60;
# 代理缓冲区的开启
proxy_buffering on;
# 代理缓冲区的大小
proxy_buffer_size 32k;
# 开启了4个128k的缓冲区主体
proxy_buffers 4 128k;
################ 优化后的conf文件 #################
server{
listen 80;
server_name nb.hh.com;
location /{
proxy_pass http://172.16.1.7:80;
include proxy_params; #(文件存在在nginx目录下,调用此文件的内容)
}
}
负载均衡(upstream backend)
主机名 |
IP |
角色 |
应用 |
web01 |
10.0.0.7 |
web服务器 |
nginx |
web02 |
10.0.0.8 |
web服务器 |
nginx |
lb |
10.0.0.5 |
负载均衡 |
nginx |
######### web端 ##########
# web01 web02 安装nginx
yum install -y nginx
# 编写网站配置
######## web01 #########
server{
listen 8080;
server_name 10.0.0.7;
root /test;
index index.html;
}
# 检测语法
nginx -t
# 创建站点目录
mkdir /test
# 准备索引文件
echo 'this is web01' > /test/index.html
# 启动nginx
systemctl start nginx
######### web02 ###########
server{
listen 8081;
server_name 10.0.0.8;
root /test;
index index.html;
}
# 检测语法
nginx -t
# 创建站点目录
[root@web02 ~]# mkdir /test
# 创建索引文件
[root@web02 ~]# echo 'this is web02' > /test/index.html
# 启动nginx
[root@web02 ~]# systemctl restart nginx
############ 负载均衡配置 ###########
# 安装nginx
yum install -y nginx
# 编写nginx负载均衡配置文件
vim /etc/nginx/conf.d/lb.conf
upstream web { # 定义了一个web服务器组
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server{
listen 80;
server_name lb.web.com;
location / {
proxy_pass http://web; # 转发到web服务器组中
include proxy_params; # 调用优化好的文件
}
}
# 编写优化文件
vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
# 检测语法
nginx -t
# 启动nginx
systemctl start nginx
# 本地DNS解析
10.0.0.5 lb.web.com
# 访问负载均衡
lb.web.com
###########负载均衡代理域名时候要指定 其他端口 #################
### 别相同不然只会访问第一个网站
########### 负载均衡的调度算法 ##########
# 轮询 默认配置就是轮询
upstream web {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
按时间顺序逐一分配到不同的后端服务器(默认)