文章目录
1. Nginx基本概念
1.1 基本介绍
- Nginx是一款轻量、高性能的HTTP和反向代理的web服务器, Nginx专门为性能优化而开发, 性能是最重要的考量, 实现上非常注重效率, 能够经受起高负载的考验。
- 特点: 并发能力强、占有内存少、稳定性强、支持热部署, 启动容易, 可以在服务器不中断的情况下对软件版本进行更新
1.2 反向代理
- 正向代理图示
- 客户端(浏览器)配置代理服务器, 先通过代理服务器, 代理服务器去访问internet。
- 反向代理图示
- 对于反向代理来说, 客户端对代理无感知, 因为客户端(浏览器)不需要任何配置就可以访问, 我们只需要把请求发送给反向代理服务器, 由反向代理服务器去选择目标服务器取出数据后直接返回客户端, 此时反向代理服务器和目标服务器对外就是一个服务器, 暴露的是代理服务器的地址, 隐藏了真实服务器的ip地址。
1.3 负载均衡
- 单个服务器解决不了, 我们增加服务器的数量, 然后将请求分发到各个服务器, 将原本单个请求集中到单个服务器上的情况改为将请求分发到多个服务器的上, 将负载分发到不同的服务器, 也就是我们所说的负载均衡
1.4 动静分离
- 以往的模式是tomcat统一部署静态和动态资源, 这种模式对服务器压力较大, 由此引入动静分离
- 作用: 加快网页的解析速度, 可以把动态和静态资源由不同的服务器来解析, 降低原来单个服务器的压力。
- 动静分离图示
2. Nginx安装、命令、配置文件
2.1 在Linux中安装Nginx
- 在Linux中使用ifconfig获取ip地址
- 连接到xshell中
- 进入官方网站下载nginx 地址: http://nginx.org/
- 下载并解压nginx压缩包, 下载pcre依赖
- 先提升系统权限, 把压缩包通过xshell拖到系统中
- 通过tar -xvf pcre-8.45.tar.gz解压缩
- cd到解压缩后的文件夹中
- 使用./configure指令
- 使用make && make install 开始编译并安装
- 安装之后通过 pcre-config – version可以获取版本号
- 安装其他依赖
yum -y install gcc zlib zlib-devel openssl openssl-devel
- Nginx的下载地址: https://nginx.org/download/
通过shell拖到系统中, 然后tar -xvf nginx… 流程如上 - 安装完成后, 在usr的local/nginx/sbin中存放了nginx的脚本(命令)
- 启动nginx
- 输入ifconfig中的ip地址即可访问
查看开放的端口号
- firewall-cmd --list-all
设置开放的端口号
- firewall-cmd --add-service=http --permanent
- sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
- firewall-cmd --reload
2.2 Nginx常用命令
使用nginx操纵命令的前提: 必须进入nginx的目录/usr/local/nginx/sbin
查看版本号
. / nginx - v
启动nginx
. / nginx
关闭nginx
. / nginx - s stop
重新加载nginx
. / nginx -s reload
2.3 Nginx配置文件
- nginx配置文件的地址:usr/local/nginx/conf
- nginx配置文件的组成
nginx配置文件由三部分组成: 全局块、events块、http块
全局块
从配置文件开始到events块之间的内容, 主要会设置一些影响nginx服务器整体运行的配置指令, 主要包括一些影响nginx服务器整体运行的配置指令, 主要包括配置运行nginx服务器的用户组、允许生成的worker process (并发)数, 进程PID存放路径、日志存放路径和类型以及配置文件的引入等
events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接,这部分对Nginx的性能影响较大, 在实际中应该灵活配置
http块
这是Nginx服务中配置最频繁的部分, 代理、缓存和日志定义等绝大多数功能和第三方模块配置都在这里, 需要注意的是: http块也可以包括http全局块、Server块、
3. Nginx配置实例
3.1 演示反向代理
第一个例子
实现效果
打开浏览器, 在浏览器地址栏中输入www.123.com, 跳转到Linux中的tomcat页面中
准备工作
- 下载Linux版本的tomcat,并使用指令解压
- 在tomcat的bin目录下执行./startup.sh启动tomcat
- 对外开放访问8080端口并重启防火墙
- firewall-cmd --add-port=8080/tcp --permanent
- firewall-cmd --reload
- 在浏览器中通过ip地址:端口号访问
具体配置
- 在windows系统的host文件中配置域名和ip地址的关系
在最后添加, 格式: ip地址 域名
- 在nginx进行请求转发的配置
进入nginx的配置文件, 进入vim编辑模式, 进行配置后保存
- 进行如上配置后启动nginx并访问www.123.com, 在没有输入端口号的情况下默认是访问80端口, 然后跳转到127.0.0.1:8080这个ip地址的内容
这个过程中遇到的问题和解决
问题: 访问www.123.com时跳转内容是nginx的首页
分析: 上次使用的nginx未关闭导致
解决: 使用killall nignx杀死所有的nginx进程, 重新开启一个nginx。
第二个例子
实现效果
根据路径跳转到不同的端口服务中
- 当访问http://127.0.0.1:9001/edu/ 跳转到127.0.0.1:8080
- 当访问http://127.0.0.1:9001/vod/ 跳转到127.0.0.1:8081
准备工作
-
准备多个tomcat服务器, 分别是8080和8081(新建两个文件夹并在其中分别解压tomcat)
-
进入conf文件下的server.xml中修改端口号
这里设置防止端口号重复
-
启动tomcat服务器
-
创建文件夹和测试页面
分别在两个tomcat文件夹的webapps(web项目部署的地方)分别创建edu和vod文件夹, 放上a.html和b.html -
进入nginx配置文件进行代理配置
-
开放对外开放的端口号8081、8080、9001、重启防火墙
-
访问ip地址:9001/edu/a.html和ip地址:9001/vod/b.html测试
note: 启动tomcat前最好把所有的tomcat杀死,再分别启动, 以防止出现只能打开一个tomcat的情况。
拓展:
location指令说明
该指令用于匹配 URL
语法如下:
location [ = | ~ | ~* | ^~] uri {
}
(1)=:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
(2)~:用于表示uri包含正则表达式,并且区分大小写。
(3)~*:用于表示uri包含正则表达式,并且不区分大小写。
(4)^~:用于不包含正则表达式的uri前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
注意:
- 如果uri包含正则表达式,则必须要有 ~ 或者 ~* 标识
- 修改完nginx.conf需要使修改文件生效,故需要重启nginx服务或者重新加载nginx
- 进入到nginx目录下 /usr/local/nginx/sbin,如果nginx是开启的,那么先执行关闭nginx命令:./nginx -s stop 然后再执行重启nginx命令:./nginx或者进入到nginx目录下 /usr/local/nginx/sbin,执行重新加载nginx命令:./nginx -s reload
3.2 演示负载均衡
实现效果
在浏览器地址栏输入地址ip地址/edu/a.html, 负载均衡效果, 平均8080和8081端口中
准备工作
- 准备多个tomcat服务器, 一台8080, 一台8081
- 分别在tomcat的webapps目录中, 创建edu文件夹, 文件夹中有a.html测试页面
- 在nginx的配置文件中进行负载均衡的配置
- 启动nginx和tomcat服务器
- 访问ip地址/edu/a.html, 重复刷新
负载均衡分配服务器的策略
-
轮询: 这是一种默认的策略, 每一个请求按照时间顺序逐一分配到不同的后端服务器中, 如果后端服务器down掉, 那就会自动剔除。
-
weight: weight代表权重, 指定轮询的几率, 默认为1, 权重越高被分配的客户端越多。
如图:8081的访问将会多出8080一倍。 -
ip_hash: 每个请求根据ip的hash结果分配, 这样每个访客固定访问一个后端服务器, 可以用来解决session的问题。
-
fair: 第三方, 按后端服务器的响应时间来分配请求, 响应时间短的优先分配。
3.3 演示动静分离
动静分离目前有两种方案
- 动态和静态资源混合, 通过nginx进行分离
- 静态独立为单独的域名,独立的服务器, 目前主流的方案
准备工作
- 准备静态资源
我在Linux的/usr/static文件夹下创建了pages(存放html页面)和images(存放图片)
images中有1~6.jpg, pages中有a.html、b.html - 配置nginx配置文件
note: 配置autoindex on 后访问images时会出现如下结果
- 启动nginx和tomcat通过ip地址/pages(images)/xxx访问
实现效果
3.4 演示高可用集群
什么是nginx高可用?
三个条件: (1) 虚拟ip (2) 两台nginx (3) keepalived
准备工作
(1) 准备两台服务器(两台Linux虚拟机)
(2) 在两台服务器分别安装nginx
(3) 在两台服务器分别安装keepalived
yum install keepalived -y
确认是否安装成功
rpm -q -a keepalived
完成高可用配置(主从配置)
-
修改/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.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 100 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.17.50 // VRRP H 虚拟地址 } }
-
在/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 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
-
把两台服务器上的nginx和keepalived都启动
systemctl start keepalived.service
-
最后测试
-
在浏览器中访问虚拟ip地址
-
停掉主服务器的nginx和keepalived, 再输入虚拟地址
systemctl stop keepalived.service
-