扩展:
#在http{}中添加
include vhost/*.conf;
作用:将多个server配置文件的信息单独存放,不过于集中在nginx.conf配置中,这样有用助于故障排查
一、反向代理
正向代理:代理服务器代替系统内部来访问外部网络的过程(系统访问外网)
反向代理:外部请求访问系统时通过代理服务器转发到内部服务器的过程(外网访问系统)
1、反向代理实例1
需求:
使用nginx反向代理,访问www.test.com直接跳转到127.0.0.1:8080【tomcat主页】
准备:
1)、安装tomcat
cd /usr/local/
#下载
wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.40/bin/apache-tomcat-9.0.40.tar.gz
#解压
tar -zxvf apache-tomcat-9.0.40.tar.gz
#重命名
mv apache-tomcat-9.0.40 tomcat
2)、安装java
#查找java相关列表
yum -y list java*
#安装jdk
yum install java-1.8.0 -y
#查看版本
java -version
3)、启动tomcat
cd /usr/local/tomcat/bin/
./startup.sh
#查看日志
cd /usr/local/tomcat/logs/
tail -f catalina.out
4)、对外开放8080端口
#增加端口
firewall-cmd --add-port=8080/tcp --permanent
#重启防火墙服务
firewall-cmd --reload
#查看开放的端口号
firewall-cmd --list-all
5)、win下浏览器里访问tomcat页面
配置:
1)、修改win本地host文件,将www.test.com 映射到192.168.157.10
#打开文件
C:\Windows\System32\drivers\etc\hosts
#hosts文件内增加
192.168.157.10 www.test.com
2)、配置nginx
vim /usr/local/nginx/conf/vhost/demo1.conf
server {
listen 80;
server_name 192.168.157.10;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#重启nginx服务,让配置生效
nginx -s reload
效果:
2、反向代理实例2
需求:
根据访问路径跳转到不同端口的服务中。nginx监听端口为9001,访问http://127.0.0.1:9100/aa 跳转到8080端口;访问http://127.0.0.1:9100/bb 跳转到8081端口
准备:
1)、重复实例1 并把端口改为8081
vim /usr/local/tomcat8081/conf/server.xml
#更改的内容
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2)、创建测试页面
cd /usr/local/tomcat/webapps/
mkdir aa
vim index.html
#内容
<h1>8080</h1>
cd /usr/local/tomcat8081/webapps/
mkdir bb
vim index.html
#内容
<h1>8081</h1>
3)、开放9001、8080、8081端口号
#增加端口
firewall-cmd --add-port=9001/tcp --permanent
firewall-cmd --add-port=8081/tcp --permanen
#重启防火墙服务
firewall-cmd --reload
#查看开放的端口号
firewall-cmd --list-all
配置:
vim /usr/local/nginx/conf/vhost/demo2.conf
server {
listen 9001;
server_name 192.168.157.10;
location ~ /aa/ {
proxy_pass http://127.0.0.1:8081;
}
location ~ /bb/ {
proxy_pass http://127.0.0.1:8080;
}
}
效果:
扩展:
location指令说明
语法:location [=|~|~*|^~] /uri/ {}
- = 表示精确匹配
- ^~ 表示uri以某个常规字符串开头,理解为匹配url路径即可
- ~ 表示区分大小写的正则匹配
- ~* 表示不区分大小写的正则匹配
- / 通用匹配,任何请求都会匹配到
二、负载均衡
负载均衡:通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载
需求:
在浏览器中输入一个地址,负载均衡效果,平均到8080和8081端口中
准备:
1)、准备两台tomcat服务器,一台8080,一台8081。参考反向代理实例
2)、在两台tomcat--webapps目录中,创建名称为demo3文件夹和index.html页面用于测试
配置:
vim /usr/local/nginx/conf/vhost/demo3.conf
upstream myserver{
server 192.168.157.10:8080;
server 192.168.157.10:8081;
}
server {
listen 80;
server_name 192.168.157.10;
location / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
}
效果:
扩展:
nginx分配服务器策略
1)、轮询【默认】
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
2)、weight
指定轮询机率,weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高分配的客户端越多。例:
upstream myserver{
server 192.168.157.10:8080 weight=5;
server 192.168.157.10:8081 weight=10;
}
3)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。例:
upstream myserver{
ip_hash;
server 192.168.157.10:8080;
server 192.168.157.10:8081;
}
4)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。例:
upstream myserver{
server 192.168.157.10:8080;
server 192.168.157.10:8081;
fair;
}
三、动静分离
动静分离:把动态资源和静态资源部署到不同的服务器上
准备:
1)、创建静态资源
cd /var/www
mkdir html.demo4.ga
cd html.demo4.ga/
mkdir html
mkdir image
vim html/index.html
<h1>test html</h1>
在images里上传个图片
配置:
为了防止80端口重复,我这里就用的域名。然后在win下的host里添加 192.168.157.10 html.demo4.ga
vim /usr/local/nginx/conf/vhost/demo4.conf
server {
listen 80;
server_name html.demo4.ga;
location /html/ {
root /var/www/html.demo4.ga/;
index index.html index.htm;
}
location /image/ {
root /var/www/html.demo4.ga/;
autoindex on;
}
}
效果:
四、配置高可用的集群
高可用:系统中部分节点失效时,其它节点能够接替它继续提供服务
集群:一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务
需求:
主nginx挂掉后,备nginx开始提供服务,不影响访问
准备:
1)、准备两台服务器(master10,master15)
2)、安装nginx、keepalived
#安装keepalived
yum install keepalived -y
#查看版本
rpm -q -a keepalived
#安装位置
/etc/keepalived/
配置:
配置keepalived,这里只展示了一个主机的配置
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.157.10 #192.168.157.15
smtp_connect_timeout 30
router_id LVS_DEVEL #访问到主机
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # (检测脚本执行的间隔)
weight 2 #权重
}
vrrp_instance VI_1 {
state MASTER #备份 服务器上将 MASTER 改为 BACKUP
interface ens33 #网卡
virtual_router_id 51 #主、备机的 virtual_router_id 必须相同
priority 120 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual _ipaddress {
192.168.157.100 #虚拟地址
}
}
检测nginx脚本
vim /usr/local/src/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
启动nginx、keepalived
#启动nginx
nginx
#启动keepalived
systemctl start keepalived.service
效果:
当master10停掉服务后也可以查看