1.Nginx简介
nginx 可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如Perl,php单不支持java Java程序戏能通过tomcat配合完成,nginx专门为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验
有报告显示能支持50000个并发连接数
1.1nginx 安装
安装之前的依赖 pcre-8.37.tar.gz
openssl-1.0.1t.tar.gz
zlib-1.2.8.tar.gz
nginx-1.11.1.tar.gz
使用yum命令安装依赖
命令:yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
安装nginx
下载nginx 网址http://nginx.org/en/download.html
1.使用命令tar -xvf nginx-1.12.2.tar.gz
2.进入nginx-1.12.2文件夹 cd nginx-1.12.2/
3.执行命令 ./configure
4.执行命令 make && make install
安装成功后,再usr/local/nginx 目录中有sbin脚本
启动nginx 提示:nginx: [emerg] unknown directive "stub_status" in /usr/local/nginx/conf/nginx.conf:80
Nginx没有添加modules/ngx_http_stub_status_module.o模块。
问题解决 没有安装的话,可以在tar包安装编译的时候添加如下参数:重新执行第三步
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
1.2 查询 进程nginx :
ps -ef | grep nginx
1.3 开启防火墙
查询防火墙命令: firewall -cmd --list -all
# 查看防火墙状态 service iptables status
# 停止防火墙 service iptables stop
# 启动防火墙 service iptables start
# 重启防火墙 service iptables restart
# 永久关闭防火墙 chkconfig iptables off
# 永久关闭后重启 chkconfig iptables on
开启80端口 vim /etc/sysconfig/iptables
# 加入如下代码 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
保存退出后重启防火墙 service iptables restart
1.4 nginx 常用命令
1使用nginx 操作 需要进入nginx的目录中cd /usr/local/nginx/sbin
查询版本号./nginx -v
关闭nginx ./nginx -s stop
启动nginx ./nginx
重新加载nginx ./nginx -s reload
1.5 nginx 配置文件
文件位置:/usr/local/nginx/conf/nginx.conf
nginx的配置文件分三部分
1 全局块
从配置文件开始到events块之间的内容 ,主要会影响nginx服务器的整体运行配置指令,主要包括配置运行服务器的用户,允许生产的worker process 数,进程pid存放路径,日志存放路径,配置文件的引入
worker_processess 1 值越大,支持并发处理的量越多
2 events块
影响服务器与用户之间的网络连接
worker_connections 1024 用户的最大的连接数
3 http 全局块
http块 包括 http全局块 和server块
2.反向代理
正向代理:如果吧局域网外的Internet 想象成一个资源库,则局域网的客户端要访问Internet 需要通过代理服务器来访问,这种代理服务器,称为正向代理
反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
事例1
1,效果:
打开浏览器,在浏览器地址栏中输入www.123.com跳转到Linux系统tomcat主页中
2准备工作
1在Linux中安装tomcat 默认端口8080
tomcat安装文件放再liunx系统中解压 进入tomcat的bin目录中 ./startup.sh 启动tomcat服务器
对外开放访问端口 firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd -reload
3配置
配置hosts文件 192.168.137.128www.123.com
location ~
{
proxy_pass http://192.168.199.144; //反向代理配置 跳转ip地址
}
事例2
1效果
使用nginx反向代理根据访问的路径跳转到不同端口的服务中,nginx监听端口9001
访问http://192.168.137.128:9001/edu/ 直接跳转到192.168.199.144
访问http://192.168.137.128:9001/vod/ 直接跳转到192.168.199.143:8080
2准备2台服务器 ip地址 分别为143,144
3配置nginx
找到nginx的配置文件 : \usr\local\nginx\conf\nginx.conf
server{
listen 9001;
server_name 192.168.137.128
location ~ /edu/{ // 使用正则表达式匹配有edu的路径 转发到192.168.199.144 服务器
proxy_pass http://192.168.199.144
}
location ~ /vod/{
proxy_pass http://192.168.199.143:8080
}
}
4重新加载nginx服务器
location 指令说明
该指令用于匹配url
语法:
location [ = | ~ | ~* |^~] uri{
}
= :用户不含正则表达式的URI前,要求请求字符串和URI严格匹配,如果匹配成功就停止向下搜索并立即处理该请求
~:用户表示URI包含正则表达式 区分大小写
~* 用户表示URI包含正则表达式 不区分大小写
^~:用户不含正则表达式URI前要求nginx服务器找到表示URI和请求字符串匹配度最高的location后立即使用该location处理请求
3.负载均衡
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
3.1 事例1
效果
通过浏览器地址栏输入地址http://192.168.137.128/edu/a.html,通过负载均衡 评价分配到 多个服务器中
在nginx配置文件中配置负载均衡
在http块中添加
upstream myserver{ //添加负载均衡的名称
server 192.168.199.144:8080; #服务器列表
server 192.168.199.144:8081;
server192.168.199.143:8080;
}
在server块中配置信息
listen 80 ; # 监听端口号
server_name 192.168.137.26; #监听的ip地址
location / {
proxy_pass http://myserver; # 负载均衡的名称
}
负载均衡的策略
1 轮询:每个请求的按照时间顺序逐一分配到不同的后端服务器,如果服务器宕机,能自动剔除
2 weight 代表权重默认为1 权重越高被分配的越多
upstream myserver{//添加负载均衡的名称
server 192.168.199.144:8080weight =5;
server 192.168.199.144:8081 weight=10;
server192.168.199.143:8080;
}
3 ip_hash
每个请求按照ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream myserver{//添加负载均衡的名称
ip_hash;
server 192.168.199.144:8080; #服务器列表
server 192.168.199.144:8081;
server192.168.199.143:8080;
}
4 fair 第三方 按照后端服务器的相应时间来分配请求,响应时间短的优先分配
upstream myserver{//添加负载均衡的名称
server 192.168.199.144:8080; #服务器列表
server 192.168.199.144:8081;
server192.168.199.143:8080;
fair;
}
4.动静分离
动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
通过location指定不同的后缀名实现不同的请求转发,通过expires参数设置,可以使浏览器的缓存过期时间,减少与服务器之间的请求和流量,具体expire是定义时给一个资源设定一个过期时间,就说无需去服务器验证直接通过浏览器自身确认是否过期即可,所有不会产生额外的浏览,这种方法,适合不经常变动的资源,如果经常更新的文件不见识使用expire是来缓存,
在nginx的配置文件中配置动静分离
server{
listen 80; #监听端口
server_name 192.168.199.144;#监听的服务器ip地址
location /www/ { # /www/ 规则
root /data/; #静态资源的路径
index index.html index.htm index.php
}
location /image/ { #/image/ 规则 路径中有image的参数
root /data/; #静态资源的路径
autoindex on; #列出文件夹的内容
}
}
5 Nginx配置高可用的集群
1 做一个 主服务器和一个备服务器的nginx
2 使用keepalived 软件来检测nginx服务器是否宕机 如果检测主服务器宕机 则自动切换到备份服务器
学习是是要使用以下工具
1 需要两台服务器
2 两台服务器安装nginx
3 两台服务器安装keepalived
安装nginx 步骤从第一部分查看
安装keepalived 使用yum命令安装 yum install keepalived -y
安装文件完成后会生成一个配置文件 位置 /etc/keepalived/keepalived.conf
4修改配置文件来完成主备
global_defs{
router_id LVS_DEVEL #访问到主机服务器
}
LVS_DEVEL的来源 /etc/hosts
#检测脚本和权重的参数
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh" #
interval 2 #检测脚本执行的间隔 (秒)
weight 2
}
5主备服务器配置 虚拟ip配置
vrrp_instance VI_1{
state MASTER #服务器状态 主服务器 为MASTER 备服务器为BACKUP
interface ens33 #网卡的名字
virtual_router_id 51 #主备服务器的virtual_router_id 必须相同
priority 100 #主备服务器取不同的优先级 主服务器值较大,备份服务器较小
adver_int 1 #检查服务器心跳 检查服务器是否还在运行 每隔一秒
authentication{ #校验方式 使用密码校验
auth_type PASS
auth_pass 1111
}
virtual_ipaddress{
192.168.17.50 #vrrp H 虚拟IP地址
192.168.17.51 #vrrp H 虚拟IP地址
}
}
网卡名字查找 使用ifconfig
6 配置脚本文件:/usr/local/src/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
7启动nginx 启动keepalived
cd /usr/local/nginx/sbin/
./nginx -s stop
./nginx
systemctl start keepalived.service
8 检查进程
ps -ef | grep keepalived
5 Nginx 原理
worker的工作情况
worker 争抢获取请求信息
一个master和多个worker的好处
1 可以使用nginx -是reload 热部署,利于nginx进行热部署
2 worker 进程来说,独立的进程,不需要加锁,省掉锁带来的开销,同事在编程以及问题查找时方便很多,采取独立进程可以让相互之间不会影响,一个进程退出,其他进程正常工作,服务不会中断,master进程很会启动新的worker进程,我worker进程异常退出,导致当前worker的所有请求失败,但不会影响其他worker的请求
3 设置多少worker才合适 nginx同redis类似都采用io多路复用机制每个worker都是一个独立的进程,每个进程只有一个主进程
worker数量一般和cpu的数量一致最好
4 连接数 并发数
发送一个请求会占用几个连接数 :2个 或4个
nginx有一个master 有4个worker每个worker支持最大的链接数据时1024 支持最大并发数是多少
普通静态访问最大并发数 worker_connection * worker_processes /2
如果是http作为反向代理 最大并发数 worker_connection * worker_processes /4