Nginx
Nginx的安装
下载地址 https://nginx.org/en/download.html
使用Xftp7上传到Linux
步骤:
第一步:安装相关依赖
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
第二步:解压并重命名
tar -zxvf nginx-1.22.0.tar.gz
mv nginx-1.22.0 nginx
第三步:新建并剪切
mkdir /usr/local/nginx
cp -r nginx /usr/local/nginx
第四步:指定安装路径
cd /usr/local/nginx/nginx
./configure --prefix=/usr/local/nginx
第五步:编译和安装
make
make install
第六步:启动
cd /usr/local/nginx/nginx/sbin
./nginx 启动nginx
cd /usr/local/nginx/nginx/conf
vim nginx.conf 可以查看到默认端口号为80
查看开放的端口号(默认没有)
firewall-cmd --list-all
设置开放端口号
sudo firewall-cmd --add-port=80/tcp --permanent 80就是你设置的端口号
firewall-cmd --reload 重启防火墙
再次进行查看
这个时候你就可以在网页中访问nginx了
Nginx相关命令(必须在sbin下才可以)
cd /usr/loca/nginx/nginx/sbin
- 查看版本号
./nginx -v
- 启动
./nginx
- 停止
./nginx -s stop
- 刷新 (应用于修改了配置文件需要重新启动nginx)
./nginx -s reload
反向代理一
需要有tomcat,如未安装,请移步Linux文章(在最后面)
1、实现效果:
打开浏览器,在浏览器地址栏输入地址 www.123.com就可以进行访问,不需要写之前的192.127.xx.xxx:8080/xxx
步骤如下:
对外开放访问端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd –reload
查看已经开放的端口号
firewall-cmd --list-all
第一步:在win中进行域名和IP的配置
第二步:在nginx中进行配置
cd /usr/local/nginx/nginx/conf
vim service.xml
第三步:测试
反向代理二
实现效果: 使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
例如:
访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080的edu文件
访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081的vod文件
步骤如下:
第一步:创建两个目录
mkdir tomcat8080 tomcat8081
然后把tomcat文件中的tomcat-9.0.30直接复制到创建好的那两个目录中
cp -r /usr/local/tomcat/tomcat-9.0.30/ /root/tomcat8081
cp -r /usr/local/tomcat/tomcat-9.0.30/ /root/tomcat8080
第二步:修改8081端口
cd tomcat8081/tomcat-9.0.30/conf
vim server.xml
第三步:启动两个tomcat和nginx并进行测试
cd /usr/local/nginx/nginx/sbin
./nginx
cd tomcat8081/tomcat-9.0.30/bin
./startup.sh
cd tomcat8080/tomcat-9.0.30/bin
./startup.sh
注意:测试8081不成功怎么办???
原因可能是没有开放端口
firewall-cmd --add-port=8081/tcp --permanent
firewall-cmd --reload
第四步:分别在tomcat8080和8081中的webapps中新建文件夹,存放一个html文件
8080/webapps/edu/a.html
8081/webapps/vod/b.html
第五步:nginx/conf/service.conf配置文件
cd /usr/local/nginx/nginx/conf
vim nginx.conf
server {
listen 9001;
server_name 192.168.43.128;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
第六步:测试
不成功的原因:
99%是配置文件的问题
server不要写到上一个server里面去了!!!!
负载均衡
实现效果:
(1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均分配到8080
和 8081 端口中
操作步骤:
第一步:在两台tomcat中的webapps目录中创建名为 edu文件夹,里面放入一个 a.html文件用于测试
第二步:nginx中进行配置
cd /usr/local/nginx/nginx/conf
vim nginx.conf
第三步:刷新并测试
cd /usr/local/nginx/nginx/sbin
./nginx -s reload
点击刷新,他会跳转到8080/8081里面
负载均衡分配策略
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2、weight(权重)
weight 代表权,重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:
3、ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题
(大概的意思是:我用一个IP地址进行访问,假设第一次访问的是8080服端口,后面就一直都是这个,不会访问到其他端口)
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
动静分离
严格意义上说应该是动态请求跟静态请求分开
可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,
- 第一种纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
- 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使
浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资
源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,
所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,
不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送
一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码
304,如果有修改,则直接从服务器重新下载,返回状态码 200。
操作步骤:
第一步:创建文件
mkdir data
cd data
mkdir image www
在image中放入一张图片
www中放入一个页面
第二步:配置
cd /usr/local/nginx/nginx/conf
vim nginx.conf
第三步:测试
http://192.168.43.128/image/1.png
http://192.168.43.128/www/a.html
集群(主从模式)
当主服务器宕机了就会自动切换到备用服务器
这里的keepalived相当于redis中的哨兵一样,用来监测主服务器是否宕机
这个虚拟ip是暴露在外的,用来访问,需要绑定到主服务器中,当keepalived检测到主宕机了,就把ip绑定到备服务器
操作步骤
第一步:启动两台nginx
可以开启两个虚拟机,然后都安装nginx tomcat keepalived
usr目录下安装keepalived
安装
yum install keepalived –y
测试
rpm -q -a keepalived
第二步:修改keepalivec.conf配置文件
把下面的复制到 keepalived.conf 文件中
然后直接复制到 /etc/keepalived中
cd /ect/keepalived
vim 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.17.129
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 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
}
}
第三步:在/usr/local/src添加检测脚本
把下面的复制到 nginx_check.sh文件中
然后把文件复制到 /usr/local/src 中
#!/bin/bash
A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx sleep 2 # nginx启动路径
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived
fi
fi
以上是主服务器的配置,备用服务器也是一样的,只需在第二步中把master修改一下,100改小一点就可以了
第四步:把两台服务器上 nginx 和 keepalived 都启动
./nginx
systemctl start keepalived.service
第五步:测试
(1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50
在sbin下
ip a 可以查看绑定的虚拟ip
(2)把主服务器(192.168.17.129)nginx 和 keepalived 停止,再输入 192.168.17.50
systemctl stop keepalived.service 停止keepalived
sbin下 ./nginx -s stop 停止nginx
主服务器宕机,刷新页面,还是可以用,在备份服务器中可以查看绑定的虚拟ip
sbin下
ip a 可以查看到绑定了虚拟ip
nginx 原理与优化参数配置
worker如何进行工作的?
3、一个 master 和多个 woker 有好处
(1) 可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2) 每个 woker 是独立的进程,如果有其中的一个woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断
4、设置多少个 woker 合适
worker 数和服务器的 cpu 数相等是最为适宜的
5、连接数 worker_connection
发送请求,占用了 woker 的几个连接数? 答案:2 个或者 4 个
访问请求静态一去一回就是2个
访问数据库,要使用到tomcat 就是4个了,请求到woker再到tomcat 一去一回就是4
nginx 有一个 master,有四个 woker,每个woker 支持最大的连接数 1024,支持的最大并发数是多少?
普通的静态访问最大并发数是:
• worker最大连接数×worker数量÷2
而如果是 HTTP 作 为反向代理来说,最大并发数量应该是
• worker最大连接数×worker数量÷4