1.nginx基本概念
(1)nginx是什么,做什么事情
(2) 反向代理
(3)负载均衡
(4)动静分离
2.nginx安装,常用命令和配置文件
(1)在linux系统中安装nginx
(2)nginx常用命令
(3)nginx配置文件
3.nginx配置实例1-反向代理
4.nginx配置实例2-负载均衡
5.nginx配置实例3-动静分离
6.nginx配置高可用集群
7.nginx原理
nginx概念
1.什么是nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,
2.反向代理
(1)正向代理
- 在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MUEdVf5Q-1634398324255)(file://C:/Users/%E9%99%88/AppData/Roaming/Typora/typora-user-images/image-20211005092638711.png?lastModify=1633397263)]
(2)反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wtmzb0N-1634398324258)(C:\Users\陈\AppData\Roaming\Typora\typora-user-images\image-20211005093749509.png)]
3.负载均衡
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joro9CUA-1634398324260)(C:\Users\陈\AppData\Roaming\Typora\typora-user-images\image-20211005162112197.png)]
4.动静分离
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2kg8wCvB-1634398324262)(C:\Users\陈\AppData\Roaming\Typora\typora-user-images\image-20211005163113672.png)]
nginx的安装
1.使用远程工具连接linux操作系统
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8SHAVvb2-1634398324262)(C:\Users\陈\AppData\Roaming\Typora\typora-user-images\image-20211005170041235.png)]
nginx编译安装
useradd -r nginx
yum groupinstall "Development Tools"
yum -y install epel-release.noarch
yum -y install openssl-devel
yum -y install gd-devel
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/data/logs/nginx/error.log --http-log-path=/data/logs/nginx/access.log --with-http_ssl_module --with-http_realip_module --with-http_flv_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_stub_status_module
make && make install
2.yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
3.安装nginx
tar xvf nginx-1.20.1.tar.gz #解压缩
./configure #进入解压缩目录,执行./configure
make && make install
安装成功后,在usr多出一个文件夹local/nginx,在nginx有sbin有启动的脚本
[root@os7 sbin]# pwd
/usr/local/nginx/sbin
[root@os7 sbin]# ./nginx
[root@os7 sbin]# ps aux | grep nginx
root 7259 0.0 0.0 20572 612 ? Ss 18:17 0:00 nginx: master process ./nginx
nobody 7260 0.0 0.0 21016 1548 ? S 18:17 0:00 nginx: worker process
root 7318 0.0 0.0 112812 976 pts/1 R+ 18:21 0:00 grep --color=auto nginx
root 9444 0.0 0.0 4228 8 ? Ss Sep17 0:00 runsv nginx
root 9454 0.0 0.0 4372 0 ? S Sep17 0:00 svlogd -tt /var/log/gitlab/nginx
查看防火墙开放的端口
firewall-cmd --list-all
设置开放的端口
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd --reload
./nginx #启动
./nginx -v #查看版本号
./nginx -s stop #停止nginx
./nginx -s reload #重新启动
nginx配置文件
1.nginx配置文件位置
/usr/local/nginx/conf
2.nginx配置文件组成
(1)nginx配置文件有三部分组成
第一部分 全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令
比如 worker_processes 1; #值越大,可以支持的并发处理也越多
第二部分 events
events块涉及的指令主要影响nginx服务器与用户的网络连接
比如 worker_connections 1024; 支持的最大连接数
第三部分 http块
nginx服务器配置中最频繁的部分
http 块也可以包括http全局块、server块
Nginx配置实例-方向代理
1.实现效果
(1)打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到linux系统tomcat主页面中
2.准备工作
(1)在linux系统安装tomcat,使用默认端口8080
tomcat安装文件放到linux系统中,解压
tar xvf apache-tomcat-10.0.12.tar.gz
进入tomcat的bin目录中,./startup.sh启动tomcat服务器
cd apache-tomcat-10.0.12/bin/
(2)对外开放服务的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
查看已经开放的端口号
firewall-cmd --list-all
(3)在windows系统中通过浏览器访问tomcat服务器
http://192.168.4.23:8080/
3.访问过程的分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KXzTSGUE-1634398324263)(nginx.assets/image-20211007213410540.png)]
4.具体配置
第一步在windows系统的host文件进行域名和ip对应关系的配置
“C:\Windows\System32\drivers\etc\hosts”
192.168.4.23 www.123.com
第二步在nginx进行请求转发的配置(反向代理配置)
server {
listen 81;
server_name 192.168.4.23;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
访问http://www.123.com:81/
nginx配置实例-反向代理实例2
1.实现效果
使用nginx反向代理,根据访问的路径跳转到不同端口的服务中
nginx监听端口为9001
访问http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081
2.准备工作
(1)准备两个tomcat服务器,一个8080端口,一个8081端口
cd /usr/src
(2)创建两个目录和测试页面
mkdir tomcat8080
mkdir tomcat8081
tar xvf apache-tomcat-10.0.12.tar.gz
修改配置server.xml文件
/usr/src/tomcat8081/apache-tomcat-10.0.12/conf/server.xml
<Server port="8015" shutdown="SHUTDOWN"> #改成8015
<Connector port="8081" protocol="HTTP/1.1" #改成8081
<Connector protocol="AJP/1.3"
address="::1"
port="8019" #改成8019
mkdir edu
cd edu/
touch a.html
[root@zbx-agent1 edu]# cat a.html
<h1>8081!!!</h1>
[root@zbx-agent1 webapps]# pwd
/usr/src/tomcat8080/apache-tomcat-10.0.12/webapps
[root@zbx-agent1 webapps]# mkdir vod
[root@zbx-agent1 webapps]# cd vod/
[root@zbx-agent1 vod]# touch a.html
[root@zbx-agent1 vod]# cat a.html
<h1>8080!!!</h1>
浏览器浏览http://192.168.4.170:8081/edu/a.html
3.具体配置
(1)找到nginx配置文件,进行反向代理配置
server {
listen 9001;
server_name 192.168.4.23;
location ~ /edu/ {
proxy_pass http://192.168.4.170:8080;
}
location ~ /vod/ {
proxy_pass http://192.168.4.170:8081;
}
}
(2)开放对外访问的端口号9001 8080 8081
4.最终测试
(1)访问http://192.168.4.170:8080/edu/a.html
8080!!
http://192.168.4.23:9001/vod/a.html
8081!!
location指令说明
该指令用于匹配url
location [ = | ~ | * | ^~ ] uri {
}
1.=:用于不包含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2.~:用于表示uri包含正则表达式,并且区分大小写。
3.~*:用于表示uri包含正则表达式,并且不区分大小写。
4.^~:用于不包含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
注意:如果uri包含正则表达式,则必须要有或者*标识。
nginx配置实例-负载均衡
1.实现效果
(1)浏览器地址栏输入地址http://192.168.4.23/edu/a.html,负载均衡效果,平均8080和8081端口中。
2.准备工作
(1)准备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面webapps目录中,创建名称是edu文件夹,在文件夹中创建页面a.html,用于测试
3.在nginx的配置文件中进行负载均衡的配置
upstream myserver {
server 192.168.4.170:8080;
server 192.168.4.170:8081;
}
server {
listen 81;
server_name 192.168.4.23;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
4.nginx分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
第二种 weight 权重
weight代表权重默认为1,权重越高被分配的客户端就越多
upstream myserver {
server 192.168.4.170:8080 weight=5;
server 192.168.4.170:8081 weight=10;
}
[root@os7 sbin]# curl http://192.168.4.23:81/edu/a.html
<h1>8081!!</h1>
[root@os7 sbin]# curl http://192.168.4.23:81/edu/a.html
<h1>8081!!</h1>
[root@os7 sbin]# curl http://192.168.4.23:81/edu/a.html
<h1>8080!!</h1>
[root@os7 sbin]# curl http://192.168.4.23:81/edu/a.html
<h1>8081!!</h1>
第三种 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如
upstream server_pool {
ip_hash
server 192.168.4.170:80
server 192.168.4.171:80
}
第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream server_pool {
server 192.168.4.170:80
server 129.168.4.171:80
fair
}
nginx配置实例-动静分离
1.什么是动静分离
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x67EsPEc-1634398324264)(nginx.assets/image-20211010163446465.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4YrdYiT8-1634398324264)(nginx.assets/image-20211010170157881.png)]
2.准备工作
(1)在linux系统中准备静态资源,用于进行访问
mkdir /data/www -pv
mkdir /data/image
touch a.html
<h1>test html</h1>
3.具体配置
(1)在nginx配置文件中进行
server {
listen 81;
server_name 192.168.4.23;
location /www/ {
root /data/;
index index.html index.htm;
}
location /image/ {
root /data/;
autoindex on;
}
浏览器输入http://192.168.4.23:81/image/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vyBQtzue-1634398324265)(nginx.assets/image-20211011000623529.png)]
在浏览器地址输入http://192.168.4.23:81/www/a.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-45BO8Rps-1634398324266)(nginx.assets/image-20211011000928853.png)]
nginx配置高可用的集群
1.什么是nginx高可用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4mFTlzkM-1634398324267)(nginx.assets/image-20211011002803085.png)]
(1)需要两台nginx服务器
(2)需要keepalived
(3)需要虚拟ip
2.配置高可用的准备工作
(1)需要两台服务器192.168.4.23和192.168.12.162
(2)在两台服务器安装nginx
(3)在两台服务器安装keepalived
3.在两台服务器安装keepalived
(1)使用yum命令进行安装
yum -y install keepalived
[root@os7 ~]# rpm -qa keepalived
keepalived-1.3.5-19.el7.x86_64
(2)安装后的配置文件/etc/keepalived/keepalived.conf
4.完成高可用配置(主从配置)
(1)修改/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.4.24
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
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 eth0 #网卡
virtual_router_id 51 #主、备机的virtual_router_id必须相同
priority 100 #主、备机取不同的优先级,主机值较大,备机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.25 // VRRP H虚拟地址
}
}
(2)在/usr/local/src/添加检测脚本
[root@zbx-agent2 ~]# cat 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
(3)把两台服务器上nginx和keepalived启动
./nginx #启动
systemctl start keepalived
ps -ef | grep keepalived
5.最终测试
(1)在浏览器地址栏输入 虚拟ip地址 192.168.4.25
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wrce7xTr-1634398324267)(nginx.assets/image-20211016212312872.png)]
(2)把主服务器(192.168.4.24)nginx和keepalived停止,再输入192.168.4.25
Nginx的原理
1.master和worker
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjquiQ1i-1634398324268)(nginx.assets/image-20211016220829101.png)]
2.worker是如何工作的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VKWCdBYJ-1634398324268)(nginx.assets/image-20211016220856514.png)]
3.一个master和多个worker有哪些好处
(1)可以使用nginx -s reload 热部署,利于nginx进行热部署操作
(2)每个worker是独立的进程,如果有其中的一个worker出现问题,其他worker独立的,继续进行争抢,实现请求过程,不会造成服务中断
4.设置多少个worker合适
worker数和服务器的cpu数相等是最为适宜的
5.连接数worker_connections
第一个:发送请求,占用了worker的几个连接数?
答案:2个或者4个
第二个:nginx有一个master,有四个worker,每个worker支持最大的连接数据1024,支持的最大并发数是多少?
普通的静态访问最大并发数是:worker_connections*worker_processes/2,
入192.168.4.25
Nginx的原理
1.master和worker
[外链图片转存中…(img-JjquiQ1i-1634398324268)]
2.worker是如何工作的
[外链图片转存中…(img-VKWCdBYJ-1634398324268)]
3.一个master和多个worker有哪些好处
(1)可以使用nginx -s reload 热部署,利于nginx进行热部署操作
(2)每个worker是独立的进程,如果有其中的一个worker出现问题,其他worker独立的,继续进行争抢,实现请求过程,不会造成服务中断
4.设置多少个worker合适
worker数和服务器的cpu数相等是最为适宜的
5.连接数worker_connections
第一个:发送请求,占用了worker的几个连接数?
答案:2个或者4个
第二个:nginx有一个master,有四个worker,每个worker支持最大的连接数据1024,支持的最大并发数是多少?
普通的静态访问最大并发数是:worker_connections*worker_processes/2,
如果是http作为反向代理来说,最大并发数量应该是worker_connections*worker_processes/4