Nginx
Nginx基本概念
nginx是什么。做什么事情
- nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,转为性能优化而生
- 占有内存少、并发能力强
- 网站用户有:百度、京东、新浪、网页、腾讯、淘宝
- 可以支持高达50000个并发连接
反向代理
- 正向代理
- 如果说把局域网的Internet想象成一个巨大的资源库,则局域网中的客户端要访问internet,则需要通过代理服务器来访问,这种带代理服务器就称为正向代理
- 简单的说就是通过代理服务器去访问需要访问的网址
- 在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
- 反向代理
- 其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器后去数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真是服务器的IP地址
负载均衡
- 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,在将结果返回给客户端
- 解决单个服务器解决不了的问题,改变单一服务器,增加服务器数量,然后将请求分发到各个服务器上,将原先请求集中到单个的服务器上的情况分发到多台服务器上
动静分离
- 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力
Nginx 安装、常用命令和配置文件
在linux 系统中安装Nginx
- 进入nginx官网下载 https://nginx.org/
- nginx相关素材(依赖)
- 安装pcre依赖
- 把安装文件放在linux系统中
- 解压压缩文件 tar -xvf +文件名
- 进入解压之后目录,执行./configure
- 使用 make&&make install 编译并安装
- 查看pcre版本号:pcre-config --version
- 安装openssl
- 安装zlib
- yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
- 安装nginx
- 把nginx安装文件放到linux系统
- 解压压缩文件
- 进入解压目录后 执行./congigure
- make && make install
- 安装pcre依赖
- 安装成功之后,在user多出来一个文件夹local/nginx,sbin里边有启动脚本
- firewall -cmd --list-all
- 设置开放的端口号:
- firewall-cmd --add-service=http -permanent
- sudo firewall-cmd --add-port=80/tcp --permanent
- 重启防火墙:firewall-cmd --reload
Nginx常用命令
- 使用nginx操作命令前提条件:必须进入nginx目录
- 查看nginx版本号
- ./nginx -v
- 启动nginx
- ./nginx
- 关闭nginx
- ./nginx -s stop
- 重新加载nginx(重新加载nginx.conf配置文件)
- ./nginx -s reload
Nginx配置文件
- 配置文件 nginx/conf
- 配置文件组成(三部分)
- 全局块:从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令
- eg:worker_processes 1; 值越大,可支持的并发处理量也越多。依赖于硬件设备的支持
- events块:主要影响nginx服务器与用户网络的连接
- eg:worker_processes 1024; 支持最大连接数
- http块:配置最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
- 需要注意:http块也可以包括http全局块、server块
- 全局块:从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令
Nginx配置实例1-反向代理
-
实现效果
- 打开浏览器,在浏览器地址栏输入地址www.123.com 跳转linux系统Tomcat主页面中
-
准备工作
- 在linux系统安装tomcat,使用默认端口8080
- 在Tomcat 压缩包放入linux中,解压
- 进入Tomcat的bin目录中, ./startup.sh启动Tomcat服务器
- 对外开放访问端口、重启防火墙
- sudo firewall-cmd --add-port=8080/tcp --permanent
- firewall-cmd --reload
- 在Windows访问linux中Tomcat主页面
- 在linux系统安装tomcat,使用默认端口8080
-
具体步骤
-
在Windows系统的host文件进行域名和ip对应的配置(让他求求www.123.com这个域名时直接访问nginx代理服务器)
- 在host中添加内容:ip地址+访问路径
-
在nginx中进行请求转发的配置
-
server_name:配置ip地址
-
proxy_pass http://127.0.0.1:8080 转发路径
-
两个的话:
location ~/edu/{ proxy_pass http://127.0.0.1:8080 } location ~/vod/{ proxy_pass http://127.0.0.1:8081 }
-
-
重启nginx测试
-
Nginx 配置实例-2负载均衡
-
实现效果
- 浏览器地址栏输入地址 http://192.168.17.128/edu/a.html 实现均衡效果,平均8080和8081端口中
-
配置(在http块中添加)
upstream myserver{ server 192.168.17.129:8080; server 192.168.17.129:8081; } server{ listen 80; server_name 192.168.17.129 location/{ proxy_pass http:myserver } }
-
nginx分配服务器策略
- 轮询(默认)
- 每个请求按时间顺序逐一分配到不同的服务器中,如果服务器down掉了,能自动剔除
- weight
- weight代表权重,默认为1,权重越高被分配的客户端越多
- ip_hash
- 每个请求按照访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
- fair(第三方)
- 按后端服务器的响应时间来分配请求,响应时间短的优先分配
- 轮询(默认)
Nginx配置实例3-动静分离
- Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:
- 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;。
- 另外一种方法就是动态跟静态文件混合在-起发布,通过nginx来分开。。
- 通过location 指定不同的后缀名实现不同的请求转发。通过expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。( 如果经常更新的文件,不建议使用Expires来缓存),我这里设置3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。。
Nginx配置高可用集群
- 什么是nginx高可用
- Tomcat 和nginx都可能会宕机 如果tomcat宕机的话nginx会自动剔除,但是nginx宕机怎么办? 高可用就是解决这个问题的
- 准备工作
- 需要两台nginx服务器
- 需要keepalived(需要安装的)
- yum install keeplived -y
- 需要虚拟ip
Nginx原理
- master和 worker
- worker 怎么进行工作的
- master接收到请求后worker采用争抢机制,抢到后利用反向代理发送Tomcat
- 一个master和多个worker
- 可以使用nginx -s reload 热部署(不用重新不熟直接重新加载配置文件),利于nginx进行热部署操作
- 对于每个worker来说都是互相独立的进程,不需要加锁,所以省掉了锁带来的开销
- 设置多少worker是最合适的
- Nginx同redis类似都采用了io多路复用机制,Windows无法发挥io多路复用机制
- worker数和服务器的cpu数目相等为最适宜的
- 连接数 worker_connection
- 发送一个请求,占用了worker的几个连接数?
- 答案:2个或者4个(静态资源2个动态4个)
- nginx有一个master,有四个worker,每个worker支持最大的连接数据1024,支持最大并发数是多少?
- 答案:worker支持最大连接数4*1024 除以2/4
- 解析:普通的静态问问最大并发数是:worker_connectionsworker_processes/2,而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connectionsworker_processes/4
- 发送一个请求,占用了worker的几个连接数?