写在前面:
终于终于终于把以前想学习想了解的Nginx给搞定了。之前看招聘大部分招聘上写着要求面试者会Nginx,所以对Nginx一直很好奇,想看看这玩意到底是干啥的。其实,在工作中也一点点在接触到了Nginx,不能说完全一窍不通,但或多或少大概知道它是怎么一回事。例如,耳熟能详的负载均衡,反向代理,高性能http服务器等等。我真正认识nginx,是实际工作中项目部署在测试环境时,F12查看前端页面调用后端接口时,发现怎么接口的url的ip地址是完全新的,不是我们某个后端开发人员的ip地址。后来一打听,哦,原来是访问的Nginx提供的ip和端口,nginx里面做了反向代理。嗖嘚斯内~原来如此。这更大大加深了我对nginx的好奇,所以很迫不及待的点开了尚硅谷-Nginx教程打算一探究竟。老样子 献上学习地址
https://www.bilibili.com/video/BV1zJ411w7SVfrom=search&seid=14651464258035726827
百度网盘课程资料-链接:https://pan.baidu.com/s/1IKEzmMnO7oY1YHPiiyjk9A 提取码:xmsp
Nginx目录
一、Nginx基本概念
1.什么是 nginx 、可以做什么事情?
Nginx 是高性能的 HTTP 和反向代理的服务器,占有内存少,并发能力强,专为性能优化而开发。
2.反向代理(正向代理)
正向代理:在客户端(浏览器)配置代理服务器
反向代理:暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
①反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
②我们只需要将请求发送到反向代理服务器,由它去选择目标服务器,获取数据后,再返回给客户端。此时,反向代理服务器和目标服务器,整体对客户端来说,是一个服务器。
③暴露的是代理服务器地址,隐藏了真实服务器IP地址。
3.负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上。将原先请求集中到单个服务器的情况改为请求分发到多个服务器上。将负载分发到不同服务器。
4.动静分离
加快网站的解析速度,把动态页面和静态页面由不同服务器进行解析。
二、Nginx安装、常用命令和配置文件
1.在 linux 系统中安装 nginx
准备工作-打开虚拟机,使用远程连接工具连接 linux 操作系统。
①安装 pcre 依赖(/usr/src目录下)
-
将pcre-8.37.tat.gz利用Xftp工具复制到/usr/src目录下,并输入命令tar –zxvf pcre-8.37.tat.gz命令进行解压。
-
解压得到其文件夹,进入其文件夹,执行./configure命令
-
紧接着再输入命令make && makeinstall命令进行安装
②安装openssl、zlib、gcc 依赖(/usr/src/pcre-8.37目录下)
-
在刚进入解压后的目录里(/usr/src/pcre-8.37)目录里执行yum -y install make zlib zlib-devel gcc-c++ libtool opensslopenssl-devel
③安装nginx(/usr/src目录下)
-
将nginx-1.12.2.tar.gz同样利用Xftp工具复制到/usr/src目录下,并对其进行解压。
-
进入nginx-1.12.2中,执行./configure命令
-
紧接着同样再输入命令make && makeinstall命令进行安装
安装成功后,在/src中会多出/loca/nginx文件夹,在nginx文件夹中有sbin启动脚本。
2.nginx常用命令
进入 nginx 目录中 cd /usr/local/nginx/sbin
-
查看nginx版本号 ./nginx -v
-
启动nginx服务 ./nginx
-
关闭nginx服务 ./nginx –s stop
-
重新加载nginx服务 ./nginx –s reload
3.nginx配置文件
nginx 配置文件位置 /usr/local/nginx/conf nginx.conf
主要包括3部分内容
1.全局块:配置服务器整体运行的配置指令
比如 worker_processes 1;处理并发数的配置。值越大,并发处理量也越多。
2. events块:主要影响Nginx服务器与用户的网络连接
比如 worker_connections 1024; 支持的最大连接数为 1024
3. http块:配置最频繁
又分为--http全局块:文件引入,MIME-TYPE定义,日志自定义
又分为--若干个server块
【server块又分为--全局server块(本虚拟机监听配置或主机名称或IP配置)
又分为--若干个location块(对虚拟主机名称之外字符串进行匹配和转发)】
打开nginx配置文件nginx.conf,默认开启了80端口。Ps:我这里之前已经做了反向代理到tomcat主页上了。外网浏览器上输入虚拟机ip地址 应该也能看到tomcat主页。前提给防火墙关闭了。service iptables stop
三、Nginx 配置实例 1 反向代理
1.准备工作:安装tomcat和jdk
①安装tomcat:
将apache-tomcat-7.0.70.tar.gz复制到/usr/src目录下,进行解压,得到tomcat。进入其conf目录下可以操作server.xml文件,对其端口进行修改。默认端口8080。这里就不先去改它了。
去/usr/src/apache-tomcat-7.0.70/bin下执行 ./startup.sh启动tomcat
②安装jdk:
1.查看yum中管理的可用的JDK软件包列表:yum search java | grep -i --colorJDK。
2.选择合适版本,安装jdk:yum install java-1.8.0-openjdk-devel.x86_64。
3.出现如下显示时输入y,进行安装
③ 配置环境变量,打开etc文件下profile。在最下面输入 安装的jdk路径。
exportJAVA_HOME=/usr/lib/jvm/java-1.8.0
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
保存关闭后,执行 source /etc/profile让配置生效。
*查看jdk安装路径
2.实现效果1
打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页面中。
3.实现步骤
第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
C:\Windows\System32\drivers\etc添加 192.168.91.130 www.123.com
第二步 在Linux系统中,关闭防火墙service iptables stop,并启动tomcat
第三步 在nginx进行请求转发的配置(反向代理配置)
第四步 在windows浏览器上输入www.123.com进行测试
4.分析
由于在windows中进行了hosts配置。将www.123.com转发到了访问虚拟机ip192.168.91.130地址上,在nginx配置中,监听了80端口,所以默认不用输入端口号就可以访问虚拟机上的ip地址,也由于事先关闭了防火墙和启动了tomcat。因而能将发送过来的请求转发到了虚拟机上的tomcat主页上。
5.实现效果2
根据访问的路径,跳转到不同端口的服务。
访问http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http://192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081
准备两个tomcat 服务器,一个 8080 端口,一个 8081 端口
将其中一个tomcat的端口,修改为8081。另外端口也和tomcat8080加以区分。
各自tomcat下,webapps下各自新建文件夹edu和vod,各自放入8080.html和8081.html。然后在nginx配置文件中进行路径配置。
然后,在浏览器进行测试。根据不同访问路径访问到了不同页面。
6.location指令:
=与url严格匹配
~区分大小写
~*不区分大小写
^~和请求字符串匹配度最高的location
四、Nginx 配置实例 2 负载均衡
之前,我们说到,负载均衡含义。是增加服务器的数量,然后将请求分发到各个服务器上。将原先请求集中到单个服务器的情况改为请求分发到多个服务器上。将负载分发到不同服务器。
1.实现效果
浏览器地址栏输入地址 http://192.168.91.130/edu/a.html,负载均衡效果,平均 8080和 8081 端口中。
2.实现步骤
①准备两台 tomcat 服务器,一台 8080,一台 8081。各自webapp下新建edu文件夹并各自都新建一个a.html。里面内容根据端口号设置分别为8080和8081。
②在nginx的配置文件中进行负载均衡的配置。
③在浏览器中输入http://192.168.91.130:99/edu/a.html进行测试。访问多次可以看到,每次请求都指向了不同tomcat里的a.html。
3.nginx 分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
第二种weight
weight 代表权重默认为 1,权重越高被分配的客户端越多。
第三种ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。
第四种fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
五、Nginx 配置实例 3 动静分离
1.实现效果
①通过 location 指定不同的后缀名实现不同的请求转发。
②通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。
2.实现步骤
①在linux系统中准备静态资源,用于进行访问。image中放入AAAAA.png静态资源。www中放入动态资源a.html。
②在nginx中进行配置。
autoindexon //列出目录下所有文件。
root//根目录
浏览器中输入地址访问静态资源 http://192.168.91.130:33/image/AAAAA.png
浏览器中输入地址访问动态资源 http://192.168.91.130:33/www/a.html
六、Nginx 的高可用集群
假如一台Nginx(主机)挂了,另一台Nginx(备机)能接上。
1.准备工作
(1)需要两台服务器 192.168.91.130和 192.168.91.131
(2)在两台服务器安装 nginx
(3)在两台服务器安装keepalived
2.安装keepalived
使用 yum 命令进行安装 yum installkeepalived –y
安装之后,在etc 里面生成目录keepalived有文件keepalived.conf
修改/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.91.130
smtp_connect_timeout 30
router_id LVS_DEVEL #记得去/etc/hosts下添加 127.0.0.1 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 eth0 #网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.91.50 # VRRP H 虚拟地址
}
}
global_defs{
//全局变量设置
}
vrrp_scriptchk_http_port {
//检测执行脚本
}
vrrp_instanceVI_1 {
//虚拟Ip设置
}
******在/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 启动
./nginx
servicekeepalived start
注: 记得去/etc/hosts下添加 127.0.0.1 LVS_DEVEL
3.测试
在浏览器中输入虚拟IP:192.168.91.50。看到直接去了我们主机的tomcat上。
此时,把主机Nginx停止了。看还能不能访问。
发现还是可以。但此时已经是跳到了备机上的tomcat主页了。
输入ip a。看到此ip已经绑定了我eth0网卡上了。
七、Nginx原理
1.mater 和 worker
2.一个master多个worker
3.一个master多个worker好处
(1)可以使用 nginx –sreload热部署,利用nginx进行热部署操作 [每个worker处理完后可继续执行]
(2)每个woker是独立的进程,如果有其中的一个woker出现问题,其他woker独立的, 继续进行争抢,实现请求过程,不会造成服务中断。
4.worker工作方式
5.设置多少个 woker 合适
worker 数和服务器的cpu 数相等是最为适宜的
6.面试题
第一题:发送请求,占用了 woker 的几个连接数?答案:2 或者 4 个
访问静态资源 只需2个。若访问动态资源,例如tomcat,则需要4个,来回。
第二题:nginx 有一个master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?
普通的静态访问最大并发数是:worker_connections *worker_processes /2
而如果是HTTP 作为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4。