nginx笔记
nginx中文文档
一、nginx基本概念
1. nginx是什么, 做什么事情
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
以上内容摘自百度百科
2. 反向代理
-
正向代理:
-
例如, 我们访问谷歌访问不到, 但是有一个服务器可以访问到, 那么, 我们就可以通过那个服务器访问谷歌. 对于谷歌来说, 他不知道我们是谁, 他只知道是代理服务器访问了它. 如图所示:
-
-
反向代理:
-
客户端对代理是无感知的, 因为客户端不需要任何配置就可以访问
-
-
注意:
- 正向代理需要客户端配置代理服务器, 较为常用的场景是 VPNFQ, 对服务器来说, 它只能感知到代理服务器的存在, 它是感知不到客户端的, 从图中就可以看出
- 反向代理不需要客户端配置服务器, 较为常用的场景是 负载均衡、防止web攻击. 对于客户端来说, 它感知不到真实的服务器, 而是感知到了代理服务器, 可以参考图片理解
- 更加详细的信息可以参考大佬的博客: 博客园 Rabbit_Dale、知乎
3. 负载均衡
- 即: 当并发很高的时候, 单一的服务器会有很大的压力, 这个"压力"就叫做负载. 负载均衡就是将一个服务器的压力平均到或者按需求分到多个服务器上, 可以理解为雨露均沾 (*_*)
4. 动静分离
- 为了加快网站的解析速度, 可以让动态网页和静态网页由不同的服务器解析, 加快解析速度. 降低原来单个服务器的压力
- 区别于前后端分离:前后端分离指的是前端页面和后端服务分离,通过ajax通讯,即前端不关心后端的实现方式,实现语言,只要能传输过来数据就好;后端也只需要传输数据即可
二、nginx安装、常用命令和配置文件
1. niginx安装(linux)
1. 通过wget
- 下载:wget -c https://nginx.org/download/nginx-1.11.6.tar.gz
- 去官方选择版本即可
- 解压:tar -zxvf nginx-1.11.6.tar.gz
- 可能需要的依赖:
- gcc:yum install gcc-c++
- pcre:yum install -y pcre pcre-devel
- zlib:yum install -y zlib zlib-devel
- openSSL:yum install -y openssl openssl-devel
- 详情参考菜鸟教程
2. 通过yum
- 添加nginx到yum源:rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- 安装:yum install -y nginx
3. 通过docker
- 直接pull即可
2. nginx常用命令
- 查看版本号:nginx -v
- 启动nginx服务:nginx
- 停止nginx服务:nginx -s stop
- 重新加载:nginx -s reload
- 重启nginx服务:nginx -s reopen
3. nginx配置文件
1. nginx配置文件位置:
- nginx安装目录的conf下的nginx.conf
2. nginx配置文件组成:
-
全局块:
-
从配置文件开始到events块之间的内容,主要设置一下影响nginx整体运行的配置指令
-
worker_processes 1 # 表示nginx使用的cpu核数,数值越大,可以并发处理的数量也越多 # 因为nginx是多核开发,所以老版本会有一个惊群问题,但是从1.11.3开始,就没有这个问题了 # 惊群问题指的是多个请求争抢同一个cpu核心,导致阻塞
-
-
events块:
-
影响nginx服务器与用户的网络连接(在环境中灵活配置)
-
worker_connections 1024; # 支持的最大连接数
-
-
http块
- 此为nginx服务器配置中修改最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在此处
- 可分为http全局块、server块
三、nginx配置实例1 --> 反向代理
1. 实例1
1). 实现效果
- 打开浏览器,在浏览器地址中输入 www.aaa.com,跳转到tomcat的主页面
2). 准备工作
-
安装tomcat,并启动服务器
-
开放对外访问端口
-
firewall-cmd --add-port=8080/tcp --permanent firewall-cmd -reload
-
firewall-cmd --list-all # 查看已经开放的端口
-
3). 访问过程分析
- 需要注意的是:windows在解析域名时,会先在本机(C:\Windows\System32\drivers\etc\hosts)找该域名的映射IP地址,如果找不到的话会去DNS服务器找,所以我们需要改host文件来创建映射
4). 具体配置
-
配置host文件
192.168.126.132 www.aaa.com
-
在nginx中配置请求转发(http块中的server块)
server { listen 80; # 监听端口, 即www.aaa.com的端口 server_name 192.168.126.132; # www.aaa.com映射的IP地址 location / { proxy_pass http://127.0.0.1:8080; # 要转发到哪 } }
2.实例2
1). 实现效果
- 访问 http://192.168.126.132:9001/edu/ 直接跳到127.0.0.1:8080
- 访问 http://192.168.126.132:9001/vod/ 直接跳到127.0.0.1:8081
2). 准备工作
- 准备俩tomcat服务器, 一个8080端口, 一个8081端口
- 创建文件夹和测试页面
3). 具体配置(nginx配置中http块中的server块)
-
server { listen 9001; server_name 192.168.126.132; location ~ /edu/ { proxy_pass http://127.0.0.1:8080; } location ~ /vod/ { proxy_pass http://127.0.0.1:8081; } }
4). location指令中 '~' 分析
- =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
- ~:用于表示uri包含正则表达式,并且区分大小写。
- ~*:用于表示uri包含正则表达式,并且不区分大小写。
- ^~:用于表示不含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
- 注意:如果uri包含正则表达式,则必须要有|*标识
四、nginx配置实例2 --> 负载均衡
1. 实现效果
- 通过浏览器输入地址,需要实现负载均衡效果
2. 准备工作
- 准备俩(多个)tomcat
- 设置tomcat有相同的目录, 和文件. 如: /edu/aaa.html
3. 具体配置(nginx配置中http块中的server块)
-
upstream test{ # test随便取 server 192.168.126.132:8080; server 192.168.126.132:8081; } server { listen 80; server_name 192.168.126.132; location / { proxy_pass http://test; # 与上面test一致 proxy_set_header Host $host } }
4. nginx提供的负载均衡策略
-
轮询(默认)
- 每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down(宕机)掉,可以自动剔除
-
weight
-
代表权重,默认为1,权重越高,被分配的客户端越多
-
upstream test{ # test随便取 server 192.168.126.132:8080 weight=2; server 192.168.126.132:8081 weight=1; }
-
-
ip_hash
-
每个请求按访问的ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。
-
upstream test{ ip_hash; server 192.168.126.132:8080; server 192.168.126.132:8081; }
-
-
fair(第三方)
-
按后端服务器的响应时间来分配请求,响应时间短的优先分配
-
upstream test{ server 192.168.126.132:8080; server 192.168.126.132:8081; fair; }
-
五、nginx配置实例3 --> 动静分离
1. 什么是动静分离
- 简单来说就是将动态资源请求和静态资源请求分离,以减轻tomcat动态服务器的负担
2. 动静分离的方式
- 将所有的静态资源放在一个静态资源服务器上,动态资源放在tomcat上,通过nginx过滤实现分离
- 将所有资源都放在一台服务器上,通过nginx过滤处理动态请求和静态请求:如果是动态请求,就从服务器请求,如果是静态请求,可以设置缓存,比如说某段时间内请求同一静态资源就使用缓存。这种的比较适合静态资源长时间不改变的情况。