初步了解nginx
1. Nginx(方向代理服务器)
1.1. 基础
1.1.1. 特点
1) 高性能的HTTP和反向代理服务器,最大支持高达5万并发连接数。
2) 还可以正向代理。
3)支持热部署,并且几乎做到7*24小时不间断运行。
4) 占用内存小,并发能力强。
l
1.1.2. 反向代理
1.1.2.1. 简介
1)将客户发送请求发送到反向代理器(客户端不需要做任何配置),由反向代理器去选择目标服务器获取数据后,再返回给客户端。此时法相代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器ip地址。
1.1.2.2. 拓展-正向代理
1.1.3. 负载均衡
1.1.3.1. 简介
1) 单个服务器解决不了的,就增加服务器数量,然后将请求分发到各个服务器上面,将原先的请求集中到单个服务器上的情况改为将七个球分发到多个服务器上,将负载分发到不同的服务器。
2)负载均衡是扩展应用程序并提高其性能和冗余的绝佳方法。
l
1.1.4. 动静分离
1.1.4.1. 简介
1)为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原里单个服务器的压力。
1.2. Linux安装nginx
1.2.1. 先去安装nginx依赖文件
(1) 安装pcre (文件夹方式安装) ftp://ftp.pcre.org/pub/pcre/
① 将文件移动到系统中
② 解压文件 tar -xvf 文件全名
1)
2)
③ 进入解压之后的目录,然后执行./configure
1)
2)
④ 然后执行 make && make install
1)
2)
3)
4) 输入 rpm -qa pcre 查看安装版本
1.2.2. 安装 openssl 、zlib 、 gcc 依赖
⑤ yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
1.2.3. 安装nginx
1) 先去官网下载 http://nginx.org/ 注意下载的文件以.gz结尾
2) 将文件移到相对于文件夹
3)解压文件 tar -xvf 文件名
4)进入解压之后文件,然后执行./configure 检查 cd nginx-1.18.0
5)然后进编译 安装 make&&make install
6)安装完成之后 cd usr/ 然后 cd local/ 可以看到nginx
7)启动nginx
7.1) 先进入目录 cd /usr/local/nginx/sbin
7.2) 然后输入 ./nginx 启动 通过ps -ef | grep nginx 查看进程
8) 直接输入原创的端口,可以看见
9)拓展
9.1)在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题
9.1.1)关闭防火墙
0.1.2)开放访问的端口号,80 端口
9.2)查看开放的端口号
9.2.1)firewall-cmd --list-all
9.2.2)如果出现 FirewallD is not running,则是防火墙未开启。
9.3)systemctl status firewalld查看防火墙状态
通过systemctl start firewalld开启防火墙,没有任何提示即开启成功
9.4)设置开放的端口号
firewall-cmd --add-service=http –permanent
firewall-cmd --add-port=80/tcp --permanent
9.5)重启防火墙
firewall-cmd –reload
1.2.4. Nginx常用命令
使用命令必须先进入 nginx 目录中;cd /usr/local/nginx/sbin
1)查看nginx版本: ./nginx -v
2)启动nginx: ./nginx
3)停止nginx: ./nginx -s stop
4)重新加载nginx: ./nginx -s reload
1.3. nginx配置文件
1)进入配置文件 cd /usr/local/nginx/conf
Nginx的配置文件就是 nginx.conf vim nginx.conf 进入配置文件
2)配置文件中的内容:包含三部分内容
(1)全局块:配置服务器整体运行的配置指令
比如 worker_processes 1;处理并发数的配置。值越大,处理并发数量越多
(2)events 块:影响 Nginx 服务器与用户的网络连接
比如 worker_connections 1024; 支持的最大连接数为 1024
(3)http 块
还包含两部分:http 全局块;server 块(和虚拟主机由密切关系。每个http快包含uogeserver块,每个server相当于一个虚拟主机。而每个server块也分为全局server块,以及可以同时包含多个location块。)
1.4. 反向代理配置
1.4.1. 安装tomcat
1.4.1.1. 先配置java环境
1)先查看本地是否自带java环境:yum list installed |grep java
2)卸载自带的java
yum -y remove java-1.8.0-openjdk*
yum -y remove tzdata-java*
3)查看yum仓库中的java安装包:yum -y list java*
4)查找Java安装路径 which java
ls -lrt /usr/bin/java(也就是上一步查询出来的路径),然后回车
输入ls -lrt /etc/alternatives/java(也就是上一步查询出来的路径),然后回车
从路径中可以看到在jvm目录下,输入cd /usr/lib/jvm,跳转到jvm的目录
输入ls 列出当前目录下的文件和文件夹
5)配置Java环境变量 输入vi /etc/profile去编辑环境变量
6)进入页面之后输入i 进入编辑模式,然后把下列语句放在最后,完成之后按esc 然后输入wq! 强制保存并退出
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
7)然后查看是否安装成功
输入source /etc/profile,使配置立即生效
检查Java安装和配置情况 输入java -version,然后回车
1.4.1.2. 安装tomcat
先进入到tomcat文件夹下,然后cd进入 bin文件夹下,运行 ./startup.sh ;然后返回到tomcat目录下
ps -ef | grep java查看是否tomcat运行
tomcat默认端口是8080
1.4.2. Demo
1.4.2.1. 基础配置
1)进入相关目录:cd /usr/local/nginx/conf
2)打开nginx.conf文件 vi nginx.conf
3) 在/usr/local/nginx/conf的nginx.conf文件中添加以下配置,然后进入usr/local/nginx/sbin ,重启nginx服务=》当访问80端口时候,nginx会自动将访问的地址连接到8080,当用户访问80端口时候,实际访问的是8080端口
1.4.3. Demo2
实现效果:
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081
1.4.3.1. 步骤1设置两个tomcat
1) 先关掉运来的tomcat
ps -ef |grep tomcat 查看运行中的tomat,然后kill -9 端口号,关闭(jill -9 23546)
2)先创建两个文件夹 tomcat8080和tomcat8081,里面放入tomcat
3)解压并且运行两个tomcat
Tomct8080文件夹 =》直接运行
Tomcat8081
先去 apache-tomcat-7.0.105/conf修改端口
cd apache-tomcat-7.0.105/conf ;
然后 vi server.xml修改端口号
修改端口(除了8080改为8081外,其他端口因为 tomcat8080文件夹中已经使用,所以要改),改完之后进入bin启动nginx
1.4.3.2. 创建文件夹
1) 8080的/usr/src/tomcat8080/apache-tomcat-7.0.105/webapps创建edu文件夹,然后里面放一个html
2) 8081的/usr/src/tomcat8080/apache-tomcat-7.0.105/webapps创建vod文件夹,然后放入一个html
1.4.3.3. 具体配置
1) 找到nginx配置文件,进行反向代理配置=》cd /usr/local/nginx/conf
vi nginx.cnf
2) 然后重启nginx
3) 最后查看效果
1.5. 负载均衡
1:实现效果=》浏览器地址输入http://111.230.182.125:9001/edu/a.html;负载均衡效果=》平均访问8080和8081端口中;
2:准备工作
3:然后去nginx配置文件
1) 进入到相关文件夹 cd /usr/local/nginx/conf
2) 然后vi nginx.conf 进行修改。下图中weight数值越大,分配的客户端越多
1.6. 动静分离
1.6.1. Demo
1)准备静态资源。创建data文件夹,然后在里面创建image和www文件夹。www放入一个html文件,image放入一个图片文件
2) 具体配置=》先到nginx下的conf中修改配置文件 cd /usr/local/nginx/conf ,然后vi nginx.conf 进入文件进行配置修改
1.7. 高可用
Nginx可能宕机,导致访问失败=》布置堕胎nginx服务器,一主多备;需要用到keepalive
1) 高可用条件:至少两台nginx服务器;每台nginx服务器徐娅keepalived;需要一个虚拟的ip
1.1)安装keepalived=》 (在usr中) yum install keepalived -y
2) Keepalived命令
2.1) systemctl start keepalived //启动 keepalived
2.2) systemctl enable keepalived //加入开机自启动
3) 配置keepalived,在etc下,编辑keppalived.conf文件
4)配置文件如下
4.1) 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 #网卡 ifconfig可以查看 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 虚拟地址 } } |
4.2)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 #如果服务器宕机,杀掉keepalived fi fi |
1.8. Nginx配置文件说明
1.8.1. Location
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头
~ 开头表示区分大小写的正则匹配 以xx结尾
~* 开头表示不区分大小写的正则匹配 以xx结尾
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为:精确匹配 =-》其次以xx开头匹配^~-》然后是按文中顺序的正则匹配-》最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
1.8.2. Nginx分配服务器策略
1)轮询(默认):每个请求按时间排序逐一分配到不同的后端服务器,如果后端服务器down掉,自动剔除
2) weight:指定权重分配,默认为1.权重越高分配的客户端越多。
3) Ip_hash:每个请求访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。可以解决session(session共享)问题。比如一台电脑,第一次访问的是8080,那么之后如果电脑ip不换,此电脑永远访问的就是8080。注意ip_hash不能和weight一起用
4) fair:根据服务器的响应时间类分配,响应时间短的优先分配