Nginx学习
一、Nginx基本概念
1、Nginx是什么?做什么事情?
Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好
Nginx专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数
2、反向代理
-
正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
![]()
-
反向代理
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的IP地址
![]()
3、负载均衡
单个服务器解决不了,增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

4、动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力

二、Nginx的安装
1. 使用远程连接工具连接Linux操作系统
2. 到Nginx官网下载软件:http://nginx.org/
3. 开始安装:
-
联网下载pcre压缩文件依赖:wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
-
解压压缩文件: tar –xvf pcre-8.37.tar.gz
-
./configure 完成后,回到 pcre 目录下执行 make,最后执行 make install
-
安装 openssl 、zlib 、 gcc 依赖yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
-
安装 nginx
-
使用命令解压
-
./configure
-
make && make install进入目录 /usr/local/nginx/sbin/nginx 启动服务
-
-
在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题(1)关闭防火墙(2)开放访问的端口号,80 端口
-
详情见centos.txt文件
三、Nginx的配置文件
1.nginx 配置文件位置
cd /usr/local/nginx/conf/nginx.conf
2. 配置文件中的内容
包含三部分内容:
(1)全局块:配置服务器整体运行的配置指令
比如 worker_processes 1;处理并发数的配置
(2)events 块:影响 Nginx 服务器与用户的网络连接
比如 worker_connections 1024; 支持的最大连接数为 1024
(3)http 块:这算是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大数功能和第三方模块的配置都在这里
其还包含两部分:
http全局块:全局快配置的指令包括文件引入、HIME-TYPE定义,日志自定义、连接超时时间、单链接请求数上限等
server块:和虚拟机有密切的关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本
四、Nginx配置实例-反向代理(1)
1、实现效果
打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到Linux系统tomcat主页面中
2、准备工作
-
在Linux系统安装tomcat,使用默认端口8080
-
tomcat安装文件放到Linux系统中,解压
-
进入tomcat的bin目录下,./startuo.sh启动tomcat服务器
-
-
对外开放访问的端口
详情见centos.txt文本
-
在windows系统中通过浏览器访问tomcat服务器
-
在windos系统中的host进行域名和ip对应关系的配置,地址:C:\Windows\System32\drivers\etc
-
添加内容:192.168.80.129 www.123.com
-
-
在Nginx中进行请求转发的配置(反向代理)
![]()
-
最终测试:
![]()
Nginx配置实例-反向代理(2)
1、实现效果
使用Nginx反向代理,根据访问的路径跳转到不同端口的服务中,Nginx监听端口为9001:
访问http://192.168.80.129:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://192.168.80.129:9001/vod/ 直接跳转到127.0.0.1:8081
2、准备工作
-
准备两个tomcat服务器,一个8080端口,一个8081端口
-
创建文件夹和测试页面
3、具体配置
-
找到Nginx的配置文件,进行反向代理配置
![]()
-
开放对外访问的端口号
4、最终测试
访问地址:http://192.168.80.129:9091/edu/edu.html
五、Nginx配置实例-负载均衡
1、实现效果
浏览器地址栏输入地址http://192.168.80.129/edu/edu.html,负载均衡效果,平均8080和8081端口中
2、准备工作
-
准备两台tomcat服务器,一台8080,一台8081
-
在两台tomcat里面webapp目录中,创建名称是edu文件夹,在edu文件夹中创建页面,用于测试
3、具体配置
-
在Nginx的配置文件中进行负载均衡的配置
![]()
4、Nginx分配服务器策略
-
轮询(默认)
每个请求 按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉, 能自动剔除
-
weight
权重,默认为1,权重越高被分配的客户端越多
server 192.168.80.129:8080 weight=5;
server 192.168.80.129:8081 weight=10;
-
ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
ip_hash;
server 192.168.80.129:8080;
server 192.168.80.129:8081;
-
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
server 192.168.80.129:8080;
server 192.168.80.129:8081;
fair;
六、Nginx配置实例-动静分离
1 、什么是动静分离

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。
2、准备工作
-
在Linux系统中准备静态资源,用于进行访问
3、具体配置
-
在Nginx配置文件中进行配置
![]()
4、最终测试
-
浏览器中输入地址:http://192.168.80.129/image/1.jpg
-
浏览器中输入地址:
七、Nginx配置高可用集群
1、什么是Nginx高可用集群

-
需要两台Nginx服务器
-
需要keepalived
-
需要虚拟ip
2、配置高可用的准备工作
-
需要两台服务器 192.168.80.129 和 192.168.80.130
-
在两台服务器上安装Nginx
-
在两台服务器上安装keepalived
3、在两台服务器上安装keepalived
使用yum命令进行安装:yum install keepalived -y
查看是否安装及版本:rpm -q -a keepalived
安装之后,在etc目录里面生成keepalived目录,有文件keepalived.conf
4、完成高可用配置(主从配置)
-
修改/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.80.130
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 #主服务器写、备份服务器写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.80.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟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启动
systemctl start keepalived.service
5、最终测试
-
在浏览器地址栏输入虚拟ip地址 192.168.80.50
-
把主服务器Nginx和keepalived停止,再输入虚拟ip地址
八、Nginx的原理
1、master和worker

2、worker是如何工作的

3、一个master和多个worker的好处
-
可以使用nginx -s reload 热部署,利于Nginx进行热部署操作
-
对于每个worker进程来说,都是独立的进程,不需要加锁,省掉了锁带来的开销,并当一个worker进程退出后,不会影响到所有的请求,降低了风险
4、需要设置多少个worker
worker数和服务器的cpu数相等是最为事宜的








浙公网安备 33010602011771号