目录
1.nginx反向代理
2.nginx负载均衡
3.nginx反向代理及负载均衡实现
nginx反向代理
4台主机都需要的操作:
两台服务器操作:
两台主机服务器进行测试;
nginx负载均衡配置
4.nginx配置其他参数
多虚拟机访问
后端服务器日志中需要记录客户端真实ip
nginx设置不同的url访问不同页面,可以实现动静分离
在代理主机上设置:
在web服务器上:
测试:
5.nginx的upstream其他参数
backup:
down:
原理:客户端向反向代理服务器发送请求,反向代理服务器将请求发送给相应服务器,然后服务器收到并将响应返回给反向代理服务器,由反向代理服务器将响应返回给客户端。
优点:1.可以有效防止对服务器的恶意攻击。2.减少服务器的压力。3.提高访问速度。
负载均衡:防止一台服务器宕机之后,业务出现阻断。
优点:减少服务器压力,解决某时刻高并发。
配置准备4台主机,并在5台主机,4台上都安装nginx,另外一台客户端
检查防火墙与selinux
1.安装epel扩展源
yum install -y epel-release
2.安装nginx
yum install -y nginx
配置虚拟主机
1.vim /etc/nginx/conf.d/vhost.conf
server {
listen 80;
server_name bbs.yunjisuan.com;
location / {
root /usr/share/nginx/html/bbs;
index index.html index.htm;
}
access_log /usr/share/nginx/html/www/logs/access_www.log main; 这两个日志目录需要自己创建
}
server {
listen 80;
server_name www.yunjisuan.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
access_log /usr/share/nginx/html/bbs/logs/access_bbs.log main;
}
2.配置网页页面
mkdir -pv /usr/share/nginx/html/{bbs,www}
切到不同目录配置页面即可
echo "this is $HOSTNAME bbs" > index.html
3.重启nginx服务
curl -H host:bbs.yunjisuan.com 192.168.27.12
curl -H host:bbs.yunjisuan.com 192.168.27.122
curl -H host:bbs.yunjisuan.com 192.168.27.123
curl -H host:www.yunjisuan.com 192.168.27.123
curl -H host:www.yunjisuan.com 192.168.27.122
负载均衡需要在两台不是服务器的主机上操作
负载均衡的关键段是upstream(定义转发池)porxy_pass (指定转发)
两台主机:
1.编写额外配置文件
[root@lb01 ~]# more /etc/nginx/conf.d/vhosts.conf
upstream www_server_pools {
server 192.168.27.122:80 weight=2; 定义转发找这两个服务器
server 192.168.27.123:80 weight=1;
}
server {
listen 80;
server_name www.yunjisuan.com;
location / {
proxy_pass http://www_server_pools; 当访问网址时,转发到这个转发池
}
}
server {
listen 80;
server_name bbs.yunjisuan.com;
location / {
proxy_pass http://www_server_pools;
}
}
2.重新启动
3.在客户端配置hosts解析文件
vim /etc/hosts
代理主机 www.yunjisuan.com bbs.yunjisuan.com
4.客户端进行测试
for ((i=1;i<=10;i++));do curl http://bbs.yunjisuan.com; done
当配置好负载均衡后,访问bbs可能出现的页面还是www,是因为没有找到对应的请求头部信息。
配置:
1.在代理主机上配置
[root@lb01 ~]# more /etc/nginx/conf.d/vhosts.conf
upstream www_server_pools {
server 192.168.27.122:80 weight=2;
server 192.168.27.123:80 weight=1;
}
server {
listen 80;
server_name www.yunjisuan.com;
location / {
proxy_pass http://www_server_pools;
proxy_set_header Host $host; 定义这一行
}
}
server {
listen 80;
server_name bbs.yunjisuan.com;
location / {
proxy_pass http://www_server_pools;
proxy_set_header Host $host;
}
}
默认不会再服务器中记录客户端真实ip,只会记录代理主机,所以开启相应参数,记录客户端真实ip。
在代理主机进行操作
[root@lb01 ~]# more /etc/nginx/conf.d/vhosts.conf
upstream www_server_pools {
server 192.168.27.122:80 weight=2;
server 192.168.27.123:80 weight=1;
}
server {
listen 80;
server_name www.yunjisuan.com;
location / {
proxy_pass http://www_server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name bbs.yunjisuan.com;
location / {
proxy_pass http://www_server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
重启并测试
vim /etc/nginx/conf.d/vhosts.conf
upstream static_pools { 定义不同的转发池
server 192.168.27.122:80;
}
upstream active_pools {
server 192.168.27.123:80;
}
server {
listen 80;
server_name www.yunjisuan.com;
location /static/ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
}
location /active/ {
proxy_pass http://active_pools;
proxy_set_header Host $host;
}
}
重启
两台服务器都可以操作
1.将之前的虚拟主机停到改一下后缀名称
2.配置不同页面
cd /usr/share/nginx/html/
mkdir static
cd static/
echo "this is static" > index.html
cd ..
mkdir active
echo "this is active" > index.html
重启
curl http://www.yunjisuan.com/active/
curl http://www.yunjisuan.com/static/ 一定要带最后面的/
当所有服务器宕机之后,会去寻找配置了backup的页面
upstream www_server_pools {
server 192.168.27.122:80 weight=2;
server 192.168.27.123:80 weight=1;
server 192.168.27.120:80 backup;
}
配置之后,会将会话保持:
upstream www_server_pools {
ip_hash;
server 192.168.27.122:80 weight=2;
server 192.168.27.123:80 weight=1;
}
注意:backup和ip_hash不可以同时使用。