这里是知识名字
开始:
2022年5月27日 16:02:44
结束:
2022年5月28日 18:17:54
一、nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
特点:内存少,并发能力强。
(1.1)正向代理
nginx也可以实现正向代理。
正向代理:如果局域网中的客户端需要访问互联网,需要通过代理服务器才能进行访问,这种代理服务就称为正向代理。
正向代理:先访问代理服务器(在客户端中进行配置),通过代理服务器,才能访问网络。
(1.2)反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要配置就可以完成访问操作,客户端只用发送请求到反向代理服务器,反向代理服务器去选择目标服务器获取数据再返回给客户端,此时反向代理服务器和目标服务器对于客户端来说就是一个服务器,暴露的是代理服务器的地址,隐藏了目标服务器的IP地址。
反向代理:对外暴露代理服务器地址,隐藏真实服务器地址。
(1.3)负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
(1.4)动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
(1.5)nginx 版本
常用版本分为四大阵营
- Nginx开源版
- http://nginx.org/
- Nginx plus 商业版(全家桶)
- https://www.nginx.com
- openresty(重点)
- http://openresty.org/cn/
- Tengine(Nginx的基础上添加了高级功能和特性)
- http://tengine.taobao.org/
linux配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.44.101
NETMASK=255.255.255.0
GATEWAY=192.168.44.1
DNS1=8.8.8.8
注意44
不是固定的,是根据每个人有不同的数字,ifconfig
查看,网关要和VM虚拟机的一致。
(1.6)安装nginx开源版
- 下载
- 编译安装和依赖检查
添加依赖
yum install -y gcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
然后 make make install
- nginx启停
进入到 sbin
目录下
使用 ./nginx
进行启动
在另外一台主机上访问这个IP,判断是否能够访问,在没有关闭防火墙之前是无法进行访问的。
- 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
成功进行访问。
- 安装成系统服务
创建服务脚本
vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载系统服务:systemctl daemon-reload
重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效)
systemctl reload nginx.service
启动服务:systemctl start nginx.service
开机启动:systemctl enable nginx.service
(1.7)nginx 常用命令
- 进入 nginx 目录中
cd /usr/local/nginx/sbin
- 查看 nginx 版本号
./nginx -v
- 启动 nginx
./nginx
- 停止 nginx
./nginx -s stop
- 重新加载 nginx
./nginx -s reload
(1.8)安装nginx
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
二、nginx 的目录结构以及基本运行原理
(2.1)目录结构
以_temp
作为后缀表示用于存放运行过程中的临时文件。
conf
:用于存放配置文件,其中主配置文件是nginx.conf
它会引用其他的配置文件。html
:网页的静态资源(index.html
是默认页)sbin
:nginx 主程序logs
记录日志(访问日志,错误日志)注意磁盘空间,因为当没有空间存放日志时,可能会导致错误。
(2.2)基本运行原理
nginx 会创建一个主进程master
,主进程会读取并校验文件,并fork 出来一个子进程worker
来处理请求,响应文件。
(2.3)Nginx 最小配置
worker_processes
worker_processes 1;
:工作的进程个数,默认为1,表示开启一个业务进程,常常对应到服务器物理CPU内核数。
worker_connections
worker_connections 1024;
单个业务(worker)进程可接受连接数。
include
将另外一个配置文件引入到当前文件中。
-
include mime.types;
include mime.types;
引入http mime类型mime.types
记录了所有的mime.type
mime.type
请求头,接收、响应的是什么类型的文件,服务器返回给客户端的头文件,告诉客户端服务器返回的文件类型。
-
default_type application/octet-stream;
default_type application/octet-stream;
如果mime类型没匹配上,默认使用二进制流的方式传输。
-
sendfile on;
sendfile on;
使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。
未开启sendfile时,用户要获取一份文件,发送请求,linux网络接口内部转发给nginx软件,nginx读取磁盘中的文件,读取完成以后发送给网络接口。
开启sendfile时,用户要获取一份文件,发送请求,linux网络接口内部转发给nginx,nginx调用sendfile()
发送信号,网络接口去磁盘上读取文件。
减少了数据拷贝的过程,提高了效率。
keepalive_timeout 65;
保持连接,超时时间。
server 就是一个主机。
一个nginx可以运行多个主机,每个主机都有自己独立的站点,互相不进行干扰。
在一台服务器上对应多个站点的技术称为虚拟主机(virtual host vhost)。
listen 80;
监听的端口号,可以通过端口号的形式去区分主机,不能重复。server_name localhost;
域名或者主机名location /
https://www.baidu.com/s?wd=vhost&ie=UTF-8
URL/s?wd=vhost&ie=UTF-8
URi 资源
root html;
文件根目录index index.html index.htm;
默认页名称error_page 500 502 503 504 /50x.html;
报错编码对应页面
三、实例一:实现简单反向代理
实现效果:在浏览器中输入wuqiyong.com
跳转到tomcat
默认主页。
(3.1)安装 tomcat
在 liunx 系统安装 tomcat,使用默认端口 8080
- tomcat 安装文件放到 liunx 系统中,解压
- 进入 tomcat 的 bin 目录中,
./startup.sh
启动 tomcat 服务器 - 在主机中配置hosts映射
在地址栏中输入wuqiyong.com:8080
即可实现了反向代理。
四、实例二,实现简单反向代理
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中。
根据访问路径的不同(book,video),跳转到不同的tomcat服务器
使nginx监听端口9001,当访问
http://127.0.0.1:9001/book/
跳转到 127.0.0.1:8080
当访问http://127.0.0.1:9001/video/
跳转到 127.0.0.1:8081
- 准备两个tomcat,一个端口为8080,一个端口为8081。
停止已经运行的 tomcat 服务
- 使用
ps -ef | grep tomcat
查找 ID kill -9 id
杀死进程
修改tomcat端口号在service.xml文件中
有三个地方需要修改,为的是防止重复。
在启动tomcat.
此时 wuqiyong.com:8080
、wuqiyong.com:8081
都能够访问tomcat主页
修改 nginx.conf
添加一个server
注意是在tomcat/webapp/创建文件夹/网页
五、实例:负载均衡
目标:当访问一个网页的时候,将访问请求平均分配给两个端口中
在 http {} 中添加 upstream myserver{}
此时访问http://192.168.19.200/edu/hello.html
就可以访问两个端口了,也就实现了负载均衡。
(5.1)分配配置
-
第一种 轮询(默认)
- 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
-
第二种 weight
- weight 代表权重默认为 1,权重越高被分配的客户端越多。
- weight 代表权重默认为 1,权重越高被分配的客户端越多。
-
第三种 ip_hash
- 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。
可以解决session问题
- 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。
-
第四种 fair(第三方)
- 按后端服务器的响应时间来分配请求,响应时间短的优先分配
- 按后端服务器的响应时间来分配请求,响应时间短的优先分配
六、动静分离
将动态请求和静态请求分开,使用nginx处理静态页面,tomcat处理动态页面
主流实现动静分离:
- 把静态文件放在独立的服务器上
- 动态文件和静态文件混合发布,通过nginx区分。
通过location 指定不同的后缀名实现不同的请求转发,通过expires参数设置浏览器缓存过期时间,会比较是否更新,有更新重新下载,没有更新会加载缓存。
要求可以通过nginx访问静态资源
- 准备工作
准备静态资源,用于访问
就实现了用nginx访问静态资源
七、高可用集群
这种情况下,nginx可能会宕机,如果宕机那么请求就失效了。
高可用:nginx宕机了仍然可以处理请求。
- 需要两台nginx服务器
- 需要keepalived(检测当前nginx是否宕机)
- 需要虚拟IP(实际不存在,是虚拟出来的,接收到请求以后要判断服务器是否宕机,来绑定没有宕机的服务器)
准备工作
安装nginx 安装keepalived
yum install keepalived –y
修改/etc/keepalived/keepalivec.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 BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
}
}
指导复习的问题
容易犯的错误
如果 make 没有用,可能是没有依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
如果linux文件提示缺少文件,可能是windows传输文件使用的是拖拽的方式传到VM虚拟机的,这样可能会导致文件损坏,要使用共享文件夹。