一文快速搞懂Nginx —— Nginx 详解

打印 上一主题 下一主题

主题 1764|帖子 1764|积分 5292

一文快速搞懂Nginx

  

  • 一、nginx 简介
  • 二、正向 / 反向代理
  • 2.1 正向代理
  • 2.2 反向代理
  • 三、负载平衡
  • 四、动静分离
  • 五、web 缓存
  • 六、Nginx 安装
  • 6.1 windows版本下的安装
  • 6.2 Linux版本下的安装
  • 七、常用命令
  • 八、为什么选择Nginx
  
一、nginx 简介

   Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者 统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议 提供各种网络服务。

Nginx是一款 轻量级 的 Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。
  



  • Nginx (engine x) 是一个 高性能 的 HTTP 和 反向代理 web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的斲丧而著名。2011年6月1日,nginx 1.0.4发布。支持 FastCGI、SSL、Virtual Host、URL Rewrite、Gzip 等功能。并且支持很多第三方的模块扩展。
  • Nginx是一款轻量级的 Web 服务器 / 反向代理服务器 及 电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,究竟上 nginx 的 并发能力 在同类型的网页服务器中体现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  • Nginx 是高性能的 HTTP 和 反向代理的web服务器,处置惩罚高并发 能力是十分强大的,能担当高负载的考验,有陈诉表明能支持高达 50,000 个并发毗连数。
  • Nginx支持 热部署,启动简单,可以做到 7*24 不间断运行。几个月都不必要重新启动。
    总而言之,Nginx是一个高性能、机动和可扩展的Web服务器和代理服务器,适用于各种场景,包罗静态文件服务、反向代理、负载平衡和动态内容处置惩罚等。
二、正向 / 反向代理

    经常听人说到一些术语,如反向代理,那么什么是反向代理,什么又是正向代理呢?
2.1 正向代理

    由于防火墙的缘故原由,我们并不能直接访问谷歌、推特,看GitHub等等,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理 “代理” 的是 客户端,而且 客户端知道目标的,而目标是不知道客户端是通过VPN访问的。

2.2 反向代理

    当我们在 外网 访问百度的时候,其实会进行一个转发代理到内网去,这就是所谓的反向代理(Reverse Proxy),即 反向代理 “代理” 的是 服务器端,而且这一个过程对于客户端而言是透明的。

    再好比:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,由于服务器中间 session 不共享,那我们是不是在服务器之间访问必要频仍登录,那这个时候淘宝搭建一个 过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不必要任何配置就可以访问,我们只必要把哀求发送给 反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,袒露的是代理服务器地点,隐藏了真实服务器的地点。

三、负载平衡

    单个服务器办理不了,我们增长服务器的数目,然后将哀求分发到各个服务器上,将原先哀求会合到单个服务器上的情况改为将哀求分发到多个服务器上,将负载平衡分发到差别的服务器,也就是我们所说的负载平衡
    负载平衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和别的关键任务服务器等,从而共同完成工作任务。
       简单来说就是:现有的哀求使服务器压力太大无法蒙受,所有我们必要搭建一个服务器集群,去分担原先一个服务器所蒙受的压力,那现在我们有ABCD等等多台服务器,我们必要把哀求分给这些服务器,但是服务器大概巨细也有本身的差别,所以怎么分?怎样分配更好?又是一个标题。
  Nginx给出来三种关于负载平衡的方式:
(1) 轮询法(默认方法):


  • 每个哀求按时间顺序逐一分配到差别的后端服务器,假如后端服务器 down 掉,能 自动剔除
   适当服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
  (2) weight 权重模式(加权轮询):


  • 指定轮询几率,weight 和 访问比率成正比,用于后端服务器性能不均的情况。
   这种方式比较机动,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有用使用资源。weight 和 访问比率 成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
  

       上述方式存在一个标题就是说,在负载平衡系统中,假如用户在某台服务器上登录了,那么该用户第二次哀求的时候,由于我们是负载平衡系统,每次哀求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
  (3) ip_hash:


  • 我们可以采用 ip_hash 指令办理这个标题,假如客户已经访问了某个服务器,当用户再次访问时,会将该哀求通过哈希算法,自动定位到该服务器。每个哀求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以办理 session 的标题。

四、动静分离

     动静分离,在我们的软件开发中,有些哀求是必要后台处置惩罚的,有些哀求是不必要经过后台处置惩罚的(如:css、html、jpg、 js 等文件),这些不必要经过后台处置惩罚的文件称为 静态文件。让动态网站里的动态网页根据肯定规则把不变的资源和经常变的资源区分开,动态资源做好了拆分以后,我们就可以根据 静态资源 的特点将其做缓存操作,以提高资源的响应速率。
     Nginx的 静态处置惩罚 能力很强,但是动态处置惩罚能力不足,因此,在企业中常用动静分离技能


  • 动静分离技能其实是采用代理的方式,在 server{} 段中到场带正则匹配的 location 来指定匹配项;
  • 针对PHP的动静分离静态页面交给 Nginx 处置惩罚,动态页面交给 PHP-FPM 模块或 Apache 处置惩罚。在Nginx的配置中,是通过 location 配置段 配合 正则匹配 实现静态与动态页面的差别处置惩罚方式

    目前,通过使用Nginx大大提高了网站的响应速率,优化了用户体验,让网站的结实性更上一层楼!
五、web 缓存

    缓存,是 Nginx 提供的,可以加快访问速率的机制,说白了,在配置上就是一个开启,同时指定目录,让缓存可以存储到磁盘上。具体配置,大家可以参考Nginx官方文档,这里就不在睁开了。
六、Nginx 安装

    Nginx跨平台的,因此,在任何平台都是可以下载的;官网 下载。
6.1 windows版本下的安装

(1)首先去官网下载最新的稳定版本:



  • 下载后解压打开,你会瞥见一下目录。

(2)启动


  • 启动方式一:双击 nginx.exe,双击后你能瞥见一个小黑窗口一闪而过。
  • 启动方式二:打开 cmd 命令窗口,切换到 nginx 解压目录下,输入命令 nginx.exe ,回车即可

   注意:假如安装目录是中文的情况,打开exe文件时会报错。
  (3)检查是否安装成功


  • 打开浏览器:浏览器地点栏输入网址 http://localhost:80 回车,出现以下页面阐明启动成功!

别的阐明:配置监听


  • nginx 的配置文件是 conf 目录下的 nginx.conf,默认配置的 nginx 监听的端口为 80,假如 80 端口被占用可以修改为未被占用的端口即可。
  • 当我们修改了nginx的配置文件 nginx.conf 时,不必要关闭 nginx后重新启动nginx,只必要执行命令 nginx -s reload 即可让改动见效

(4)、关闭Nginx
    假如使用 cmd 命令窗口启动nginx, 关闭 cmd 窗口是不能结束 nginx进程的,可使用两种方法关闭nginx
方法一
    Nginx的安装包目录下。否则无法找到Nginx


  • 输入nginx命令: nginx -s stop (快速制止nginx)
  • 或输入 nginx -s quit (完整有序的制止nginx)
       这两个命令的区别在于 nginx -s stop 是快速制止Nginx,而nginx -s quit 是有序的制止Nginx,前者大概会导致数据没有完全生存
  方法二
    使用 taskkill /f /t /im nginx.exe


  • taskkill: 是用来制止进程的
  • /f: 是逼迫制止
  • /t:制止指定的进程和任何由此启动的子进程
  • /im:指定的进程名称 .
       这种方法可以直接在 cmd 命令面板上使用,当第一种方法无效时可以尝试使用此方法,前第一种方法适用于大部分版本的Nginx,但是个别版本的大概不实用,使用 taskkill 就可办理。
  6.2 Linux版本下的安装

(1)下载安装包:



  • 下载完毕上传到Linux服务器上, 我上传到了 opt/apps/目录下:

    (2)解压
  1. <span style="color:#000000"><span style="background-color:#fafafa"><code class="language-powershell">tar <span style="color:#a67f59">-</span>zxvf nginx-1<span style="color:#999999">.</span>24<span style="color:#999999">.</span>0<span style="color:#999999">.</span>tar<span style="color:#999999">.</span>gz
  2. </code></span></span>
复制代码


  • 1


  • 进入 nginx-1.24.0 目录

    (3)配置
  1. <span style="color:#000000"><span style="background-color:#fafafa"><code class="language-powershell"><span style="color:#708090"># 依次输入</span>
  2. <span style="color:#999999">.</span><span style="color:#a67f59">/</span>configure
  3. make
  4. make install
  5. </code></span></span>
复制代码


  • 1
  • 2
  • 3
  • 4


  • 查找安装路径: whereis nginx

    (4)启动
  • 进入目录 /usr/local/nginx/sbin/, 再输入 ./nginx 启动

  • 启动成功访问: 服务器ip:80

  • 注意:怎样毗连不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口!
  • 相关命令:
  1. <span style="color:#000000"><span style="background-color:#fafafa"><code class="language-powershell"><span style="color:#708090"># 开启service firewalld start</span>
  2. <span style="color:#708090"># 重启service firewalld restart</span>
  3. <span style="color:#708090"># 关闭service firewalld stop</span>
  4. <span style="color:#708090"># 查看防火墙规则firewall-cmd --list-all</span>
  5. <span style="color:#708090"># 查询端口是否开放firewall-cmd --query-port=8080/tcp</span>
  6. <span style="color:#708090"># 开放80端口firewall-cmd --permanent --add-port=80/tcp</span>
  7. <span style="color:#708090"># 移除端口firewall-cmd --permanent --remove-port=8080/tcp#重启防火墙(修改配置后要重启防火墙)firewall-cmd --reload</span>
  8. <span style="color:#708090"># 参数解释1、firwall-cmd:是Linux提供的操作firewall的一个工具;2、--permanent:表示设置为持久;3、--add-port:标识添加的端口;</span>
  9. </code></span></span>
复制代码


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
七、常用命令

  1. <span style="color:#000000"><span style="background-color:#fafafa"><code class="language-powershell">cd <span style="color:#a67f59">/</span>usr/local/nginx/sbin/
  2. <span style="color:#999999">.</span><span style="color:#a67f59">/</span>nginx  <span style="color:#708090"># 启动</span>
  3. <span style="color:#708090"># 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务</span>
  4. nginx <span style="color:#a67f59">-</span>s stop
  5. <span style="color:#708090"># 平稳关闭Nginx,保存相关信息,有安排的结束web服务</span>
  6. nginx <span style="color:#a67f59">-</span>s quit
  7. <span style="color:#708090"># 因改变了Nginx相关配置,需要重新加载配置而重载</span>
  8. nginx <span style="color:#a67f59">-</span>s reload
  9. <span style="color:#708090"># 重新打开日志文件</span>
  10. nginx <span style="color:#a67f59">-</span>s reopen
  11. <span style="color:#708090"># 为 Nginx 指定一个配置文件,来代替缺省的</span>
  12. nginx <span style="color:#a67f59">-</span>c filename
  13. <span style="color:#708090"># 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件</span>
  14. nginx <span style="color:#a67f59">-</span>t
  15. <span style="color:#708090">#  显示 nginx 的版本</span>
  16. nginx <span style="color:#a67f59">-</span>v
  17. <span style="color:#708090"># 显示 nginx 的版本,编译器版本和配置参数</span>
  18. nginx <span style="color:#a67f59">-</span>V
  19. <span style="color:#708090"># 格式换显示 nginx 配置参数</span>
  20. 2>&1 nginx <span style="color:#a67f59">-</span>V <span style="color:#999999">|</span> xargs <span style="color:#a67f59">-</span>n1
  21. 2>&1 nginx <span style="color:#a67f59">-</span>V <span style="color:#999999">|</span> xargs <span style="color:#a67f59">-</span>n1 <span style="color:#999999">|</span> grep lua
  22. </code></span></span>
复制代码
  

  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
八、为什么选择Nginx

    Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处置惩罚,别的Nginx可以作为反向代理进行负载平衡的实现。在Nginx网站上,其功能包罗:


  • HTTP和HTTPS(TLS / SSL / SNI)
  • 超快速的Web服务器用于静态内容
  • FastCGI,WSGI,SCGI用于动态内容
  • 具有负载平衡和缓存功能的加快Web代理
  • 不间断实时二进制升级和配置
  • 压缩和内容过滤器
  • 虚拟主机
  • FLV和MP4的媒体流
  • 带宽和毗连策略
  • 全面的访问控制
  • 自定义日志
  • 嵌入式脚本
  • 带有TLS的SMTP / IMAP / POP3的邮件代理
  • 逻辑,机动,可扩展的配置
  • 在Linux,FreeBSD,Mac OS X,Solaris和Windows上运行
Nginx有如下上风

  • IO多路复用 epoll(IO复用)
   怎样理解呢?举个例子吧!

有A、B、C三个老师,他们都遇到一个难题,要帮助一个班级的门生办理讲堂作业。
  

  • 老师A采用从第一排开始一个门生一个门生轮番解答的方式去答复标题,老师A浪费了很多时间,并且有的门生作业还没有完成呢,老师就来了,反反复复效率极慢。
  • 老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个本身同一时间去帮好几个同砚答复标题,最后还没答复完,老师B斲丧光了能量累倒了。
  • 老师C比较精明,他告诉门生,谁完成了作业举手,有举手的同砚他才去指导标题,他让门生主动发声,分开了“并发”。
  这个老师C就是 Nginx
  

  • 轻量级
   功能模块少 - Nginx仅保留了 HTTP 必要的模块,其他都用插件的方式,后天添加
代码模块化 - 更适当二次开发,如阿里巴巴 Tengine
  

  • CPU亲和
   把CPU核心和Nginx 工作进程绑定,把每个worker进程固定在一个CPU上执行,淘汰切换CPU的 cache miss,从而提高性能。
  
仅供学习参考,如有不足,接待指正。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表