您的位置:首页 > 运维架构 > Nginx

第一章初识Nginx

2017-06-13 15:48 363 查看
最近开始对nginx做系统学习,决定把自己学到的东西整理成文章,方便以后查看。

1、nginx是什么?

 
     百度百科中给出的解释为:

        Nginx ("engine
x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor
Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

        Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like
协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

2、为什么选择Nginx?

        为什么选择Nginx?因为它具有以下特点: 

        (1)、更快

        这里表现在两个方面:一方面在正常情况下,单次请求会得到更快的响应;另一方面,在高峰,Nginx比其它web服务器更快的响应请求

        (2)、高扩展性

        Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。当对某一个模块进行修复或者升级时,可专注模块本身,无需在意其它。而且在HTTP模块中,还设计了HTTP过滤器模块:一个正常的HTTP模块在处理完请求后,会有一串HTTP过滤器模块对其请求结果进行再处理。

        Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备及其优秀的性能,充分利用Nginx的高并发性。

        (3)、高可靠性

        Nginx的高可靠性来自其和兴框架的代码的优秀设计、模块设计的简单性。我个worker进程相对独立,master进程在1个worker进程出错时可以快速拉起新的worker子线程。

        (4)、低内存消耗

        一般情况下,10000个非活跃的HTTP
Keep-Alive连接在Nginx中仅消耗2.5MB的内存。

        (5)、单机支持10W以上的并发连接

理论上,Nginx支持的并发连接上限取决于内存,10W远未封顶。

        (6)、热部署

        master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,既可以在7*24小时不间断服务的前提下,实际Nginx的可执行文件。当然,他也支持不停止服务更新配置、更换日志文件等功能。

        (7)、最自由的BSD许可协议        

        BSD许可协议不只是允许用户免费试用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布

        以上7个当然不是Nginx的全部,它还有更多模块满足应用场景

3、Nginx服务器类型

        (1)、Web服务器

        Web服务器用于提供HTTP(包括https)的访问,例如Nginx、Apache、IIS等,虽然Tomcate也能够做到,但这并不是它的主要功能,而且其性能也不如专门的Web服务器。

        (2)、应用程序服务器

        用于应用程序的运行,包括的工作有:客户会话管理、业务逻辑管理、数据操作等。

        (3)、代理服务器

        (4)、反向代理

        (5)、后台服务器

        (6)、CDN缓存服务器

4、使用Nginx的必备软件

 
  (1)、GCC编译器

        GNU编译器套件(GNU
Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。

        yum
install -y gcc

        GCC是必须的编译工具。在编写HTTP模块中,需要用到G++编译器

        yun
install -y gcc-c++

 
  (2)、PCRE库

        PCRE(Perl
Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。这些在执行正规表达式模式匹配时用与Perl
5同样的语法和语义是很有用的。Boost太庞大了,使用boost regex后,程序的编译速度明显变慢。测试了一下,同样一个程序,使用boost::regex编译时需要3秒,而使用pcre不到1秒。因此改用pcre来解决C语言中使用正则表达式的问题

        yum
 install  -y pcre pcre-devel

 
  (3)、zlib库        

        zlib是提供数据压缩用的函式库。

        yum
 install  -y zlib zlib-devel

 
  (4)、OpenSSL开发库

        如果我们的服务器不只是支持HTTP,还需要在更加安全的SSL协议上传输HTTP,那么我们就需要OpenSSL了。

         yum
 install  -y openssl openssl-devel

5、Nginx的命令行控制

 
 (1)、默认方式启动

        /usr/local/nginx/sbin/nginx
  

        ——取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf

 
 (2)、指定配置文件启动     

     /usr/local/nginx/sbin/nginx
 -c  /tmp/nginx.conf

        ——使用-c参数指定配置文件

    (3)、指定安装目录

     
  ——/usr/local/nginx/sbin/nginx  -p  /usr/local/nginx.conf

    (4)、指定全局配置项启动

    /usr/local/nginx/sbin/nginx
 -g  "pid /var/nginx/test.pid"

        ——
-g参数的约束条件是指定的配置项不能与默认条件下的nginx.conf中的配置项冲突,否则无法启动。另外一个约束条件是以-g方式启动的Nginx服务执行其它命令时,需要把-g参数带上,否则可能出现配置项不匹配的情况,如果要停止服务,则执行如下代码:

     /usr/local/nginx/sbin/nginx
 -g  "pid /var/nginx/test.pid"  -s  stop

    (5)、测试配置信息是否正确

    /usr/local/nginx/sbin/nginx
 -t

    (6)、在测试阶段不输出信息

     /usr/local/nginx/sbin/nginx
 -t  -q

    ——使用-q,可以不把error级别以下的信息输出

    (7)、显示版本信息

      /usr/local/nginx/sbin/nginx
 -v

    (8)、显示编译阶段的参数

    /usr/local/nginx/sbin/nginx
 -V

    (9)、快速的停止服务

    /usr/local/nginx/sbin/nginx
 -s  stop

    ——实际上,如果通过kill命令直接向nginx
master进程发送TERM或者INT新号,效果是一样的,首先通过ps查找ningx的master进程ID

    kill
-s SIGTERM 10801   或者     kill -s SIGINT 10801

    (10)、优雅的停止服务

     /usr/local/nginx/sbin/nginx
 -s  quit

    首先会关闭监听接口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后在退出进程。可以直接发送QUIT信号给master进程停止服务,其效果和quit相同

     kill
  -s   SIGQUIT <NGINX MASTER PID> 

    如果希望优雅的停止worker,可以适应WINCH:

    kiill   -s   SIGWINCH
  <NGINX MASTER PID> 

    (11)、使运行中的Nginx重读配置项并生效

    /usr/local/nginx/sbin/nginx
 -s  reload

    使用kill的HUP命令来实现

    kiill   -s   SIGHUP   <NGINX
MASTER PID> 

    (12)、日志文件回滚

    使用reopen命令重新打开日志文件,这样可以把当前日志文件改名或者保存到其它文件夹下面,在重新打开生成新的日志文件。

    /usr/local/nginx/sbin/nginx
 -s  reopen

    kiill
  -s   SIGUSR1   <NGINX MASTER PID>

    (13)、平滑升级Nginx

    当Nginx服务升级到新的版本时,必须将旧的二进制文件Nginx替换掉,Nginx支持不重启服务来完成版本更新的平滑升级

    升级时包括如下步骤: 

        1)、通知正在运行的旧版本Nginx准备升级。通过向master进程放usr2信号可以达到目的。例如:  kiill
  -s   SIGUSR2   <NGINX MASTER PID>,这时运行中的Nginx会将pid文件重命名,将 /usr/local/nginx/logs/nginx.pid重命名为 /usr/local/nginx/logs/nginx.pid.oldbin,这样新的Nginx才能启动成功。

        2)、启动新版本的nginx,可以通过以上介绍的任意一种实现。然后通过ps命令可以发现新旧版本的Nginx在同时运行。

        3)、通过kill命令向旧版本发出SIGQUIT命令

    (14)、显示命令行帮助

    使用-h或者-?参数会显示支持的所有命令参数。

欢迎关注微信公众号

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx