1、nginx基本概念
(1)nginx是什么,做什么事
高性能、高并发(高达50000)、占有内存少、性能优化
2、nginx安装、常用命令和配置文件
代码语言:javascript复制 (1)在linux系统中安装nginx
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录
#安装相关依赖,安装编译工具及库文件
代码语言:javascript复制 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel
#
#安装 PCRE依赖,PCRE 作用是让 Nginx 支持 Rewrite 功能。
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
#解压安装包:
tar zxvf pcre-8.35.tar.gz
#进入安装包目录
[root@bogon src]# cd pcre-8.35
#安装
[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install
5、查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version
代码语言:javascript复制安装 Nginx
代码语言:javascript复制1、下载 Nginx,下载地址:https://nginx.org/en/download.html
[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
2、解压安装包
[root@bogon src]# tar zxvf nginx-1.12.2.tar.gz
3、进入安装包目录
[root@bogon src]# cd nginx-1.12.2
4、编译安装(可以指定安装路径,也可以使用默认的)
[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
[root@bogon nginx-1.6.2]# make
[root@bogon nginx-1.6.2]# make install
5、查看nginx版本
[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v
6、安装成功之后,在 /usr/local/nginx/sbin路径下有启动脚本
代码语言:javascript复制[root@localhost nginx-1.12.2]# cd /usr/local/nginx/
[root@localhost nginx]# ls
conf html logs sbin
[root@localhost nginx]# ^C
[root@localhost nginx]# cd sbin/
[root@localhost sbin]# ls
nginx nginx.old
[root@localhost sbin]#
#查看开放的端口号
firewall-cmd --list-all
#设置开放的服务和端口号
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent
(2)nginx常用命令
(3)nginx配置文件
nginx配置文件有三部分组成
1.全局块
代码语言:javascript复制从配置文件开始到events块之间的内容,
主要会设置一些影响nginx服务器整体运行的配置指令:
主要包括配置文件运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等
这是nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
2events块
代码语言:javascript复制events块涉及的指令主要影响nginx服务器与用户的网络连接
比如worker_connections 1024; 支持的最大连接数。
3.http块
代码语言:javascript复制nginx服务配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
注意:http块也可以包括http全局块、server块
配置正反向代理
正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
反向代理:客户端只需要将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据返回给客户端。
3、nginx配置实例1-反向代理
代码语言:javascript复制1、实现效果
(1)打开浏览器,在浏览器地址栏输入地址xxxxxx(自己的ip),跳转到linux系统tomcat主页面中
2、准备工作
代码语言:javascript复制(1)在Linux系统中安装tomcat
wget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz
然后解压tar -zxvf 压缩包名
启动tomcat服务器(在Linux系统中,tomcat使用默认端口8080)
开放对外访问的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd-reload 重启防火墙
查看已经开放的端口号
firewall-cmd --list-all
启动tomcat服务器
查看启动后的日志文件
在浏览器访问tomcat服务器
反向代理案例一:
访问过程的分析
具体配置
- 在Windows系统的host文件进行域名和ip对应关系的配置
- 在最后面加上 192.168.171.131 www.123.com(根据自己服务器的ip来设置)
2.在nginx进行请求转发的配置(反向代理配置)/usr/local/nginx/conf/nging.conf
重新启动nginx(我这里是将它停止在启动)
输入http://www.123.com/ 访问,注意不用添加端口号,默认使用80端口号访问nginx,然后跳转到tomcat服务器,实现反向代理的效果。
反向代理案例二:
代码语言:javascript复制目标:
使用nginx反向代理,根据访问路径跳转到不同端口的服务中,nginx监听端口为9001
访问http://192.168.171.131:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://192.168.171.131:9001/vod/ 直接跳转到127.0.0.1:8081
2、准备工作
(1)准备两个tomcat服务器,一个8080端口,一个8081端口
(2)创建文件夹和测试页面
3、具体配置
修改nginx配置文件如下图:
(2)开放对外访问的端口号 9001 8080 8081
关闭nginx在开启
4.测试
以上案例:
代码语言:javascript复制客户端将请求发送到nginx反向代理服务器,nginx反向代理将客户端的请求发送到目标服务器获取数据,目标服务器回应再转发回给代理服务器再转发到客户端。
location指令说明:
该指令用于匹配URL。
3、nginx负载均衡配置
单个服务器解决不了了,我们增加服务器的数量,然后将请求分发到服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
nginx配置实例2-负载均衡
代码语言:javascript复制1.实现效果
(1)浏览器地址栏输入地址http://192.168.171.131:9001/edu/a.html,负载均衡效果,平均8080和8081端口中
2.准备工作
(1)准备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件中创建页面a.html用于测试。
3.在nginx的配置文件中进行负载均衡的配置(http块添加修改)
测试——刷新一次就会访问不同服务器(8081——8080)
4、nginx分配服务器策略
代码语言:javascript复制1).轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
weight代表权重,默认为1,权重越高被分配的客户端越多。
指定轮询几率,weight和访问率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
nginx动静分离
目的是加快网站的解析速度。可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
1.准备工作
1)在Linux系统中准备静态资源,用于进行访问
2、修改nginx配置文件
重启nginx
3.测试:
(1)浏览器中输入地址
添加端口、访问名字
6、nginx配置高可用集群
配置高可用的准备工作:
代码语言:javascript复制(1)需要两台服务器 192.168.171.131和192.168.171.129
(2)在两台服务器安装nginx
(3)在两台服务器安装keepalived
使用yum命令进行安装
yum install keepalived -y
#安装之后再etc里面生成目录keepalived。
完成高可用配置(主从配置)
(1)/etc/keepalived/keepalivec.conf配置文件
主服务
#可以直接复制替换源文件内容
代码语言:javascript复制global_defs { #全局定义
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.171.131 #自己服务器IP
smtp_connect_timeout 30
router_id LVS_DEVEL #唯一不重复
}
#脚本配置
vrrp_script chk_http_port {
script "/usr/local/nginx/nginx_check.sh" #检测脚本的路径及名称
interval 2 #(检测脚本执行的间隔)
weight -20 #权重。设置当前服务器的权重,此处的配置说明:当前服务器如果宕机了,那么该服务器的权重降低20
}
#虚拟IP配置
vrrp_instance VI_1 {
state BACKUP #主服务器写MASTER、备份服务器写BACKUP
interface ens33 #网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip
} }
从服务
可以直接复制替换源文件
代码语言:javascript复制global_defs { #全局定义
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.171.129 #自己服务器IP
smtp_connect_timeout 30
router_id LVS_DEVEL #唯一不重复
}
#脚本配置
vrrp_script chk_http_port {
script "/usr/local/nginx/nginx_check.sh" #检测脚本的路径及名称
interval 2 #(检测脚本执行的间隔)
weight -20 #权重。设置当前服务器的权重,此处的配置说明:当前服务器如果宕机了,那么该服务器的权重降低20
}
#虚拟IP配置
vrrp_instance VI_1 {
state BACKUP #主服务器写MASTER、备份服务器写BACKUP
interface ens33 #网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip
} }
(2)在/usr/local/src 添加脚本(从和主都是一样的内容)
代码语言:javascript复制#!/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服务
代码语言:javascript复制[root@localhost sbin]# ./nginx -s stop
[root@localhost sbin]# ./nginx
[root@localhost sbin]# systemctl start keepalived.service
[root@localhost sbin]# ps -ef |grep keepalived
root 110602 1 0 15:46 ? 00:00:00 /usr/sbin/keepalived -D
root 110603 110602 0 15:46 ? 00:00:00 /usr/sbin/keepalived -D
root 110604 110602 0 15:46 ? 00:00:00 /usr/sbin/keepalived -D
root 110657 7510 0 15:50 pts/0 00:00:00 grep --color=auto keepalived
[root@localhost sbin]#
最终测试
1.在浏览器地址栏输入虚拟IP地址 :192.168.171.50
2.关掉主服务器的nginx服务和keeplived服务,再次访问——成功。
nginx 原理
- master&worker——(管理和工作)
2、worker如何进行工作的?
3.一个master和多个woker有什么好处?
1)可以使用nginx -s reload 热部署,利用nginx进行热部署操作
2)每个woker是独立的进程,如果有其中一个woker出现问题,其他worker独立的,
继续进行争抢,实现请求过程,不会造成服务中断。
4、需要设置多少个worker
worker数和服务器的cpu数相等是最为适宜的
5、连接数worker_connection
第一个:发送请求,占用了worker的几个连接数?
2或4个
第二个:nginx有一个master,有四个woker,每个woker支持最大的连接数据1024,支持的最大并发数是多少?
公式: