热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

企业部分关于nginx你不得不知道的几个知识

    nginx是一个高性能的http和反向代理web服务器,它的代码是由c语言写的,具有很好的可移植性,ngnix效率高,可以实现高并发,虽然相比较lvs次一些,nginx开十


       nginx是一个高性能的http和反向代理web服务器,它的代码是由c语言写的,具有很好的可移植性, ngnix效率高,可以实现高并发,虽然相比较lvs次一些,nginx开十个进程也消耗不了多少,消耗内存小,配置文件简单,很便宜,开源的,支持reactive重写规则,内置间发检查功能,支持gzip压缩,把高清图片压缩,小图片可以查看原图,加快访问速率,稳定性比较高,和linux服务器一样,支持热部署,可以在线增加功能,正在运行也可以让他更新版本,模块非常全,而且它还是一个非常优秀的邮件代理服务



nginx的四大模块


  • 二进制模块

        在Nginx中,我 们可以编译出各种二进制,包括插件的二进制。就好比一辆汽车,Nginx的常规Web服务器功能是基础的配置,一些扩张的插件则是车上的空调、音响、倒车 影像等等功能。像OpenResty就是一款非常流行的Nginx插件,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。


  • 配置文件模块

        在一辆汽车上,我们想要开启哪些功能,空调要开多冷,音响要开多大,都是由操作人员自己决定,非常灵活,Nginx也是如此。在Linux服务器上,我们一般可以在etc目录下找到Nginx的配置文件,如上图所示。user的含义是运 行的用户,worker_processes则是运行时的进程数。worker_connections则是运行时每一个进程的最大并发数,http则 是作为反向代理服务器一些常见的功能配置。Nginx的功能非常复杂,配置项也非常多,后面我们再来单独进行学习。


  • 访问日志模块

        access.log 可以看做是一个汽车的行车记录仪,准确的说是是低配版的,只能记录下行车的轨迹。Nginx的access.log可以记录下来http服务器的访问轨 迹,可以记录下每一次客户的访问,可以记录下用户的IP,用户访问的地址、返回的错误码、用户的UserAgent等等。开发与运维人员可以根据 access.log的情况,简单统计出服务器的运行情况。


  • 异常日志模块

不知道你有没有遇 到过这样的问题,在线上重新启动一个JavaWeb服务,或者新建一个JavaWeb服务,但在浏览器中就是无法正常的访问,而在Java的日志中,又无 法找到异常日志,下一次,不如查一查Nginx的异常日志,或许有意外的收获。程序在运行时总是伴随着各种异常,Nginx也是如此,我们可以在 Nginx的Error.log中,找到对应的错误,并加以修复。


nginx的功能概述

HTTP基础功能:__


  • 处理静态文件,索引文件以及自动索引;

  • 反向代理加速(无缓存),简单的负载均衡和容错;

  • FastCGI,简单的负载均衡和容错;

  • 模块化的结构。过滤器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;

  • SSL 和 TLS SNI 支持;

__IMAP/POP3 代理服务功能:__


  • 使用外部 HTTP 认证服务器重定向用户到 IMAP/POP3 后端;

  • 使用外部 HTTP 认证服务器认证用户后连接重定向到内部的 SMTP 后端;

  • 认证方法:

  • POP3: POP3 USER/PASS, APOP, AUTH LOGIN PLAIN CRAM-MD5;

  • IMAP: IMAP LOGIN;

  • SMTP: AUTH LOGIN PLAIN CRAM-MD5;

  • SSL 支持;

  • 在 IMAP 和 POP3 模式下的 STARTTLS 和 STLS 支持;

__支持的操作系统:__


  • FreeBSD 3.x, 4.x, 5.x, 6.x i386; FreeBSD 5.x, 6.x amd64;

  • Linux 2.2, 2.4, 2.6 i386; Linux 2.6 amd64;

  • Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;

  • MacOS X (10.4) PPC;

__结构与扩展:__


  • 一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行;

  • kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), select, 以及 poll 支持;

  • kqueue支持的不同功能包括 EV_CLEAR, EV_DISABLE (临时禁止事件), NOTE_LOWAT, EV_EOF, 有效数据的数目,错误代码;

  • sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+), 和 sendfilev (Solaris 8 7/01+) 支持;

  • 输入过滤 (FreeBSD 4.1+) 以及 TCP_DEFER_ACCEPT (Linux 2.4+) 支持;

  • 10,000 非活动的 HTTP keep-alive 连接仅需要 2.5M 内存。

  • 最小化的数据拷贝操作;

__其他HTTP功能:__


  • 基于IP 和名称的虚拟主机服务;

  • Memcached 的 GET 接口;

  • 支持 keep-alive 和管道连接;

  • 灵活简单的配置;

  • 重新配置和在线升级而无须中断客户的工作进程;

  • 可定制的访问日志,日志写入缓存,以及快捷的日志回卷;

  • 4xx-5xx 错误代码重定向;

  • 基于 PCRE 的 rewrite 重写模块;

  • 基于客户端 IP 地址和 HTTP 基本认证的访问控制;

  • PUT, DELETE, 和 MKCOL 方法;

  • 支持 FLV (Flash 视频);

  • 带宽限制;

nginx的进程信息


  1.  Nginx采用了高度模块化的设计思路,并且内部的进程主要有俩类,master进程和worker进程,其中master进程只有一个,而worker进程可以有多个。

  2. master进程:是用来管理和监控控制其下面的worker进程的主进程,这个进程由root发起,其中原因就是http这个服务器需要启用80端口,而只有root才有权限启用80端口。

  3. worker进程才是真正的working进程,才是真正处理请求的进程。worker进程全部都是master进程的子进程。worker进程是以普通用户的身份进行运行的,这样就可以极大的增加程序的安全性。万一即使有一个进程被劫持,也不会有管理员权限。

  4. worker进程中,原生的功能只有最基本的web服务。但是由于Nginx是高度模块化的应用程序,所以,在每一个worker进程中,有着一个或者多个模块。但需要注意的是,装载的模块不是一次性加进去的,只有当这个进程需要这个模块的时候,才会被这个工作进程加载。

nginx应用

1. 正向代理

正向代理:内网服务器主动去请求外网的服务的一种行为

正向代理其实就是说客户端无法主动或者不打算完成主动去向某服务器发起请求,而是委托了nginx代理服务器去向服务器发起请

求,并且获得处理结果,返回给客户端。正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪

个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

从下图可以看出:客户端向目标服务器发起的请求,是由代理服务器代替它向目标主机发起,得到结果之后,通过代理服务器返

回给客户端

http://www.icode9.com/i/li/?n=4&i=oss/201812/14/5604e19f7cbc404e98616c8e49af7f84.jpg

2. 反向代理

反向代理:reverse proxy,是指用代理服务器来接受客户端发来的请求,然后将请求转发给内网中的上游服务器,上游服务器处

理完之后,把结果通过nginx返回给客户端。

反向代理是对于来自外界的请求,先通过nginx统一接受,然后按需转发给内网中的服务器,并且把处理请求返回给外界客户端,

此时代理服务器对外表现的就是一个web服务器,客户端根本不知道“上游服务器”的存在。

http://www.icode9.com/i/li/?n=4&i=oss/201812/14/ffc3ae62d10a88d8922553ce95510c2b.jpg

http://www.icode9.com/i/li/?n=2&i=oss/201812/14/9a8013980da7704e73c15dd42614c210.jpg

4. 负载均衡

负载均衡:将服务器接收到的请求按照规则分发的过程,称为负载均衡。负载均衡是反向代理的一种体现。

1.9.0的时候,nginx增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟

http的用法类似,允许我们配置一组TCP或者UDP等 协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多

个后端服务,实现负载均衡。

nginx实现负载均衡有几种模式:

1.轮询:每个请求按时间顺序逐一分配到不同的后端服务器,也是nginx的默认模式。轮询模式的配置很简单,只需要把服务器列表加入到upstream模块中即可

2.ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

3.url_hash:按访问url的hash结果来分配请求,相同的url固定转发到同一个后端服务器处理。

4.fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5. 静态服务器

现在很多项目流行前后分离,也就是前端服务器和后端服务器分离,分别部署,这样的方式能让前后端人员能各司其职,不需要互相依赖,而前后分离中,前端项目的运行是不需要用Tomcat、Apache等服务器环境的,因此可以直接用nginx来作为静态服务器。



推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • redis知识汇总[随笔记录]
      ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
  • HTTPProxy是一个中间程序,它既可以担当浏览器(客户端)的角色也可以担当WebServer(服务器)的角色。HTTPProxy代表浏览器向WebServer发送请求,浏览 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • 现在很多App在与服务器接口的请求和响应过程中,为了安全都会涉及到加密和解密的问题,如果不加的话就会是明文的,即使加了GZIP也可以被直接解压成明文。如果同时有Android和IO ... [详细]
author-avatar
Wobu想说
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有