nginx 订阅
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发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 展开全文
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发布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
信息
软件类型
开源软件,网页服务器软件
最新生产版本
1.18.0 [1]
别    名
engine x
最新主线版本
1.19.1 [1]
中文名
nginx
软件许可
BSD许可
外文名
Nginx
兼容性
Linux系统,Windows NT系统,OS X
nginx优点
Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。 Nginx 的源代码使用 2-clause BSD-like license。Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。无缓存的反向代理加速,简单的负载均衡和容错。FastCGI,简单的负载均衡和容错。模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。支持 SSL 和 TLSSNI。 [2]  Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
收起全文
精华内容
下载资源
问答
  • 高并发下的Nginx性能优化实战

    万人学习 2019-12-24 14:44:52
    【超实用课程内容】 本课程内容包含讲解解读Nginx的基础知识,解读Nginx的核心知识、带领学员进行高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 【课程如何观看?】 PC端:...
  • Nginx

    千次阅读 多人点赞 2019-10-17 18:56:59
    Nginx 编译 Nginx 针对 Unix 环境 下载 NginxNginx 官网 出下载想要编译版本的 NginxNginx 官方提供三个版本: Mainline version 主线版本,功能较新,稳定性较 Stable version 稍差,建议学习使用该版本...

    Nginx

    Nginx

    编译 Nginx

    针对 Unix 环境

    下载 Nginx

    Nginx 官网 出下载想要编译版本的 Nginx,Nginx 官方提供三个版本:

    1. Mainline version

    主线版本,功能较新,稳定性较 Stable version 稍差,建议学习使用该版本,实际生产使用 Stable version。

    1. Stable version

    稳定版本

    1. Legacy versions

    历史版本

    wget http://nginx.org/download/nginx-1.17.4.tar.gz
    tar -zxvf nginx-1.17.4.tar.gz
    cd nginx-1.17.4

    Nginx 源码目录介绍

    Nginx 源码目录

    auto

    编译时的依赖库以及针对操作系统特性选择库

    CHANGES

    英文版 Nginx 各版本变更说明

    CHANGES.ru

    俄文版 Nginx 各版本变更说明(Nginx 作者是俄罗斯人)

    conf

    配置文件目录

    configure

    编译配置,编译前生成中间文件方便编译

    主要有编译路径配置、某些功能开关及模块配置

    --prefix 设置服务器存放地址,也是其他未配置路径的目录的默认根目录

    --XXX-path 代表设置 XXX 目录的地址

    --with-XXX_module 代表启用某些模块

    --without-XX_module 代表禁用某些模块,这些模块时 Nginx 默认会编译的模块

    还有一些其他参数可以参考可以参考 Ngxin 官方文档

    contrib

    vim 提示插件以及一些提升使用 Nginx 效率的工具脚本

    未配置 vim 提示时使用 vim 打开 nnginx.conf

    配置 vim 提示

    cp -r contrib/vim ~/.vim 

    配置 vim 提示后

    针对不同层次结构以及不同关键字颜色区别会更明显

    html

    存放 index.html(Nginx 默认欢迎页)和 50x.html(Nginx 默认错误页)

    index.html:

    index.html

    50x.html:

    50x.html

    LICENSE

    许可证信息

    man

    Nginx 为 linux 提供的帮助文件

    可以使用命令查看(与编译后使用 nginx -h 相比内容更丰富)

    man man/nginx.8

    man

    README

    自述文件

    src

    源码

    编译

    首先需要使用 configure 进行配置,一般只设置 --prefix 即可:

    ./configure --prefix=/home/sanchan/nginx

    配置会输出配置简要说明:

    Configuration summary
        using system PCRE library
        OpenSSL library is not used
        using system zlib library
    
      nginx path prefix: "/home/sanchan/nginx"
      nginx binary file: "/home/sanchan/nginx/sbin/nginx"
      nginx modules path: "/home/sanchan/nginx/modules"
      nginx configuration prefix: "/home/sanchan/nginx/conf"
      nginx configuration file: "/home/sanchan/nginx/conf/nginx.conf"
      nginx pid file: "/home/sanchan/nginx/logs/nginx.pid"
      nginx error log file: "/home/sanchan/nginx/logs/error.log"
      nginx http access log file: "/home/sanchan/nginx/logs/access.log"
      nginx http client request body temporary files: "client_body_temp"
      nginx http proxy temporary files: "proxy_temp"
      nginx http fastcgi temporary files: "fastcgi_temp"
      nginx http uwsgi temporary files: "uwsgi_temp"
      nginx http scgi temporary files: "scgi_temp"

    配置生成的中间文件会放置到 objs目录下,有兴趣的小伙伴可以看下。

    然后就可以进行编译了:

    make

    编译会在 objs 目录下生产 nginx 、nginx.8 及 ngx_modules.o,如果是升级 Nginx 可以将这些文件替换旧文件,如果是全新安装则执行:

    make install

    这样在之前配置的路径 /home/sanchan/nginx 中就可以看到 Nginx 相关文件了。

    安装完成

    sbin 为 Nginx 二进制执行文件目录

    logs 为 Nginx 日志目录

    conf 及 html 与下载的 Nginx 源码中目录是一致的

    以上就完成了 Nginx 的编译工作

    拿客

    展开全文
  • nginx

    千次阅读 2019-06-29 23:59:22
    查看并杀掉Windows进程 ...tasklist /fi “imagename eq nginx.exe” taskkill /f /t /im nginx.exe taskkill /f /pid 8001 netstat查看进程端口 netstat -ano|findstr 8080 或 netstat -ano|findstr 0.0.0.0:...

    常用命令

    nginx -s stop 直接干掉服务
    start nginx 启动服务
    nginx -s quit 优雅停止nginx,有连接时会等连接请求完成再杀死worker进程
    nginx -s reload 优雅重启,并重新载入配置文件nginx.conf
    nginx -s reopen 重新打开日志文件,一般用于切割日志
    nginx -v 查看版本
    nginx -t 检查nginx的配置文件
    nginx -h 查看帮助信息
    nginx -V 详细版本信息,包括编译参数
    nginx -c filename 运行时指定配置文件

    解压缩
    gzip on;  #开启和关闭gzip模式
    gzip_min_length 1024k;  #gizp压缩起点,文件大于1k才进行压缩
    gzip_comp_level 4; #压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
    
    #进行压缩的文件类型。
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    
    #nginx对于静态文件的处理模块,开启后会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,如果找不到则不进行压缩
    gzip_static on;
    
    gzip_vary on; #是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_buffers 4 16k; #设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 
    gzip_http_version 1.1;  #设置gzip压缩针对的HTTP协议版本
    
    

    1、什么是代理服务器

    代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机。

    2、为什么要使用代理服务器
    1)提高访问速度
    2)防火墙作用
    3)通过代理服务器访问不能访问的目标站点

    正向代理、反向代理

    占有内存少,并发能力强
    多模块整合、实现复杂功能

    负载均衡

    负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。我们通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡。硬件负载均衡主要通过在服务器节点之间按照专门用于负载均衡的设备,比如F5等;而软件负载均衡则是通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等。

    负载均衡具体实现有多种,有直接基于硬件的F5,有操作系统传输层(TCP)上的 LVS,也有在应用层(HTTP)实现的反向代理(也叫七层代理)。
    .
    下面简单介绍一下最后者——反向代理。

    在请求发送到真正处理请求的服务器之前,还需要将请求路由到适合的服务器上,一个请求被负载均衡器拿到之后,需要做一些处理,比如压缩请求(在nginx中gzip压缩格式是默认配置在nginx.conf内的,所以默认开启,如果不对数据量要求特别精细的话,默认配置完全可以满足基本需求)、接收请求(接收完毕后才发给Server,提高Server处理效率),然后根据预定的路由算法,将此次请求发送到某个后台服务器上。

    其中需要提到的一点是反向代理,先理解一下正向代理的原理:正向代理是将自己要访问的资源告诉Proxy,让Proxy帮你拿到数据返回给你,Proxy服务于Client,常用于番&墙和跨权限操作。反向代理也是将自己要访问的资源告诉Proxy,让Proxy帮你拿到数据返回给你,但是Proxy会将请求接受完毕之后发送给某一合适的Server,这个时候Client是不知道是根据什么规则并且也不知道最后是哪一个Server服务于它的且Proxy服务于Server,所以叫反向代理,常用于负载均衡、安全控制。

    安装 nginx-1.16.0

    Nginx安装使用:下载 nginx-1.16.0.zip
    官网版本 http://nginx.org/en/download.html

    卸载旧版
    完全卸载nginx的详细步骤 https://blog.csdn.net/weixin_38889300/article/details/106682750
    nginx 的启动、停止与重启  https://www.cnblogs.com/waynechou/p/7760251.html
    
    #查看nginx的版本信息
    rpm -qa | grep nginx 
    /usr/local/nginx/sbin/nginx -V
    
    # 停止nginx
    nginx -s stop  #强制停止nginx服务器,如果有未处理的数据,则丢弃
    nginx -s quit  #优雅的停止,有连接时会等连接请求完成再杀死worker进程 
    

    Nginx的端口和进程

    Windows下查看、杀掉Nginx的端口和进程

    netstat -ano|findstr 8001

    tasklist /fi “imagename eq nginx.exe”
    ps -ef|grep nginx 查看进程

    taskkill /f /t /im nginx.exe
    taskkill /f /pid 8001

    netstat查看进程端口

    netstat -ano|findstr 8080
    netstat -ano|findstr 0.0.0.0:8080
    在这里插入图片描述
    -a
    -n
    -o

    tasklist

    tasklist 得到当前进程的名字,PID,会话,内存使用情况
    tasklist /fi “imagename eq nginx.exe”
    在这里插入图片描述

    taskkill杀掉进程

    #根据服务名
    taskkill /f /im /f nginx.exe
    /im 立即
    /f 强制结束进程
    #根据pid
    taskkill /f /pid {pid}
    在这里插入图片描述
    taskkill /f /t /im nginx.exe

    刚开始乱点exe文件启动了3个Nginx导致,Nginx访问不了Tomcat,直接杀掉进程
    netstat -ano|findstr 8001
    tasklist /fi “imagename eq nginx.exe”
    ps -ef|grep nginx

    taskkill /f /pid 8001
    使用taskkill taskkill /f /t /im nginx.exe

    linux下批量删除进程(脚本)

    tail_pid=`ps -ef | grep "www-data" | grep -v grep | awk '{print $2}'`
    if [ -z "$tail_pid" ]; then
     echo "[ not find tail log pid ]"
    else
     echo "find result: $tail_pid "
     kill -9 $tail_pid
    fi
    
    

    其他

    Nginx请求转发Tomcat服务

    访问nginx代理服务器时跳转到云服务器,即通过proxy_pass 配置请求转发地址,输入http://localhost:8001 时,请求会跳转到配置的“云”服务器

    外网域名映射(花生壳)

    服务是用外网域名映射到本地虚拟机的Tomcat,模拟负载均衡。
    之前学习用花生壳外网IP映射本地服务,当前设置本机Windows与虚拟机Linux系统在不同网段,就假设一个在本地一个在云端。
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    访问服务业务

    Nginx配置文件中下划线问题的坑,报错400,查找问题
    对header name的字符做了限制

    nginx反向代理无法获取带下划线的 HTTP Header解决办法
    https://zhaoshijie.iteye.com/blog/2371440

    负载均衡测试

    1.部署2台服务
    Linux虚拟服务:外网 2l5k085345.wicp.vip:39950,映射内网IP是192.168.236.128:8080
    Windows服务:内网 localhost:8008,IP是192.168.40.1:8008

    2.在upstream再添加一个本地Tomcat服务localhost:8008,不进行权重weight设置
    在这里插入图片描述
    3.访问nginx
    当访问nginx的8001时,nginx会将请求交替转发给这两台服务;
    配置多个目标服务器后,当一台服务器出现故障时,nginx能将请求自动转向另一台服务器。
    在这里插入图片描述

    权重weight设置后,提示配置文件错误(nginx-1.16)
    在这里插入图片描述

    展开全文
  • 本课程目的:使学员快速掌握利用Nginx+uWSGI部署Django项目的方法 开发环境:Python 3.6/Django 2.0/Nginx 1.17 主要内容: 1.环境的搭建 2.创建Django项目 3.利用uWSGI启动Django项目 4.Nginx部署Django项目
  • 1.Nginx安装 2.nginx编译参数相机 3.nginx安装配置+清缓存模块安装 4.nginx连接PHP5.5 5.nginx配置虚拟主机 6.nginx location配置 7.nginx root&alias文件路径配置 8.nginx日志配置 9.apache和nginx支持SSL配置 10....
  • Nginx系列(1):Nginx安装及配置详解

    千次阅读 2020-06-26 21:14:39
    Type=forking WorkingDirectory=/opt/nginx-opt/nginx ExecStartPre=/opt/nginx-opt/nginx/sbin/nginx -t -c \ /opt/nginx-opt/nginx/conf/nginx.conf ExecStart=/opt/nginx-opt/nginx/sbin/nginx -c \ /opt/nginx-...

    目录

    前言

    1、准备依赖环境

    1.1 首先查看Linux 的系统版本号

    1.2 下载nginx、openssl、zlib、pcre

    1.3 安装c++编译环境

    1.4 安装openssl

    1.5 安装PCRE

    1.6 安装zlib

    1.7 镜像文件下载

    2、Nginx安装配置

    2.1 安装Nginx

    2.2 启动Nginx

    2.3 Nginx基本操作

    2.4 使用systemctl控制Nginx


    前言

    Nginx是一个高性能的HTTP和反向代理WEB服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

    其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

    关于负载均衡及反向代理的具体理解和使用,后边将逐步展开总结,这里暂不赘述。下面直接进入安装配置步骤。


    1、准备依赖环境

    安装Nginx时,发现系统没有装各种依赖库,基本上是gcc、pre-devel、openssl-devel、zlib-devel,Linux又是内网环境,并不能用yum install来进行安装,这里就提供一种离线安装方式。

    1.1 首先查看Linux 的系统版本号

    cat /etc/redhat-release

    [root@node01 /]# cat /etc/redhat-release

    CentOS Linux release 7.6.1810 (Core)


    1.2 下载nginx、openssl、zlib、pcre

    自定义安装包路径:# mkdir/opt/xxx-opt/xxx

    依赖包下载命令:

    # wget http://nginx.org/download/nginx-1.19.0.tar.gz

    # wget http://www.openssl.org/source/openssl-fips-2.0.16.tar.gz

    # wget http://zlib.net/zlib-1.2.11.tar.gz

    # wget http://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

    # wget http://mirror.koddos.net/gcc/releases/gcc-10.1.0.tar.gz


    1.3 安装c++编译环境

    【方式一】yum方式安装,如果有联网环境,或者配置好的yum源仓库,可以直接执行命令:

    yum install gcc-c++

    [root@localhost src]# yum install gcc-c++

    省略安装内容...

    期间会有确认提示输入y回车

    Is this ok [y/N]:y

    省略安装内容...

    【方式二】rpm包离线安装

    解压镜像CentOS-7-x86_64-DVD-1810.iso,进入到CentOS-7-x86_64-DVD-1810\Packages目录,这下面存储了很多rpm包。找到下面列出的rpm包,上传到CentOS机器任意位置。

    binutils-2.27-34.base.el7.x86_64.rpm

    cpp-4.8.5-36.el7.x86_64.rpm

    gcc-4.8.5-16.el7.x86_64.rpm

    gcc-c++-4.8.5-36.el7.x86_64.rpm

    glibc-2.17-260.el7.x86_64.rpm

    glibc-common-2.17-260.el7.x86_64.rpm

    glibc-devel-2.17-260.el7.x86_64.rpm

    glibc-headers-2.17-260.el7.x86_64.rpm

    kernel-headers-3.10.0-957.el7.x86_64.rpm

    libgcc-4.8.5-36.el7.x86_64.rpm

    libgomp-4.8.5-36.el7.x86_64.rpm

    libmpc-1.0.1-3.el7.x86_64.rpm

    libstdc++-devel-4.8.5-36.el7.x86_64.rpm

    mpfr-3.1.1-4.el7.x86_64.rpm

    zlib-1.2.7-18.el7.x86_64.rpm

    执行rpm包安装:rpm -Uvh ./*.rpm --nodeps --force

    接下来,我们来逐步安装Nginx的相关依赖。


    1.4 安装openssl

    [root@localhost src]# tar zxvf openssl-fips-2.0.16.tar.gz
    省略安装内容...
    [root@localhost src]# cd openssl-fips-2.0.16
    [root@localhost openssl-fips-2.0.16]# ./config &&make && make install

    注意:指定自定义安装目录,执行 ./config --prefix=/opt/openssl-opt/ openssl &&make && make install

    省略安装内容...

    注意:

    在安装openssl时需要安装Perl5,否则报一下错误。Operating system: x86_64-whatever-linux2 You need Perl 5.

    安装Perl 5的执行步骤为:

    #需要安装 perl-5https://www.cpan.org/src/README.html

    # wget https://www.cpan.org/src/5.0/perl-5.28.0.tar.gz

    # tar -xzf perl-5.28.0.tar.gz

    # cd perl-5.28.0

    # ./Configure -des -Dprefix=$HOME/localperl &&  Make &&  make install

    注意:

    在执行Configure 命令时,如果出现cc: command not found 错误,先安装gcc--c++即可。


    1.5 安装PCRE

     [root@localhost src]# tar zxvf pcre-8.40.tar.gz

    省略安装内容...

    [root@localhost src]# cd pcre-8.40

    [root@localhost pcre-8.40]# ./configure && make && make install

    注意:指定自定义安装目录,执行 ./configure --prefix=/opt/pcre-opt/ pcre && make && make install

    省略安装内容...


    1.6 安装zlib

    [root@localhost src]# tar zxvf zlib-1.2.11.tar.gz

    省略安装内容...

    [root@localhost src]# cd zlib-1.2.11

    [root@localhost zlib-1.2.11]# ./configure && make && make install

    注意:指定自定义安装目录,执行 ./configure --prefix=/opt/zlib-opt/zlib && make && make install

    省略安装内容...

    OK,经过上边步骤,我们已经完成Ngix依赖组件的安装。


    1.7 镜像文件下载

    CentOS 7.6-1810镜像ISO下载:http://vault.centos.org/7.6.1810/isos/x86_64/

    CentOS 7.2-1511镜像ISO下载:http://vault.centos.org/7.2.1511/isos/x86_64/

    Nginx下载:http://nginx.org/download/


    2、Nginx安装配置

    Nginx安装包下载:# wget http://nginx.org/download/nginx-1.19.0.tar.gz

    2.1 安装Nginx

    自定义安装目录的路径:# mkdir/opt/nginx-opt/nginx

    #解压nginx-1.19.0.tar.gz

    [root@localhost nginx]# tar -zxvf nginx-1.19.0.tar.gz
    省略安装内容...
    [root@localhost nginx]# cd nginx-1.19.0
    [root@localhost nginx-1.19.0]# ./configure && make && make install
    注意:指定自定义安装目录,执行 ./configure --prefix=/opt/nginx-opt/nginx && make && make install
    省略安装内容...


    2.2 启动Nginx

    先找一下nginx安装到什么位置上了。

    [root@node01 sbin]# whereis nginx

    nginx: /usr/sbin/nginx

    这里我们执行的自定义安装,路径好像不是我们指定的哇。进入看下:

    lrwxrwxrwx  1 root root          31 Jun 23 05:48 nginx -> /opt/nginx-opt/nginx/sbin/nginx

    这个软连接指向了我们自定义安装路径。

    创建软连接:ln -s /opt/nginx-opt/nginx/sbin/nginx /sbin/ && nginx && nginx -t

    打开浏览器输入localhost或者http://192.168.0.118:80/会看到下图,说明nginx启动成功。


    2.3 Nginx基本操作

    启动
    [root@localhost ~]# /opt/nginx-opt/nginx/sbin/nginx
    停止/重启
    [root@localhost ~]# /opt/nginx-opt/nginx/sbin/nginx -s stop(quit、reload)
    命令帮助
    [root@localhost ~]#/opt/nginx-opt/nginx/sbin/nginx -h
    验证配置文件
    [root@localhost ~]# /opt/nginx-opt/nginx/sbin/nginx -t
    配置文件
    [root@localhost ~]# vim/opt/nginx-opt/nginx/conf/nginx.conf
    设置开机启动
    [root@localhost ~]# systemctl enable nginx


    2.4 使用systemctl控制Nginx

    Systemctl是一个系统管理守护进程、工具和库的集合,用于取代System V、service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器。

    通过Systemctl –help可以看到该命令主要分为:查询或发送控制命令给systemd服务,管理单元服务的命令,服务文件的相关命令,任务、环境、快照相关命令,systemd服务的配置重载,系统开机关机相关的命令。 

    【1】创建nginx.service

    vim /usr/lib/systemd/system/nginx.service

    【2】编辑nginx服务启动文件

    [Unit]

    Description=nginx -high performance web server

    After=network.target remote-fs.target nss-lookup.target

     

    [Service]

    Type=forking

    WorkingDirectory=/opt/nginx-opt/nginx

    ExecStartPre=/opt/nginx-opt/nginx/sbin/nginx -t -c \

    /opt/nginx-opt/nginx/conf/nginx.conf

    ExecStart=/opt/nginx-opt/nginx/sbin/nginx -c \

    /opt/nginx-opt/nginx/conf/nginx.conf

    ExecReload=/opt/nginx-opt/nginx/sbin/nginx -s reload

    ExecStop=/opt/nginx-opt/nginx/sbin/nginx -s stop

    PrivateTmp=true

     

    [Install]

    WantedBy=multi-user.target

    【3】使文件生效

    Systemctl daemon-reload

    【4】启动nginx

    systemctl start nginx

    【5】关闭nginx

    systemctl stop nginx

    【6】重启nginx

    systemctl restart nginx

    【7】开机启动

    systemctl enable nginx

    【8】测试

    [root@node01 sbin]# netstat -ntlp                 
    Active Internet connections (only servers)
    Proto     Recv-Q      Send-Q Local Address         Foreign Address         State        PID/Program name    
    tcp           0                0 0.0.0.0:22                           0.0.0.0:*                  LISTEN       916/sshd            
    tcp6         0                0 :::22                                    :::*                           LISTEN       916/sshd            
    [root@node01 sbin]# 
    [root@node01 sbin]# systemctl daemon-reload       
    [root@node01 sbin]# 
    [root@node01 sbin]# systemctl start nginx         
    [root@node01 sbin]# 
    [root@node01 sbin]# systemctl status nginx.service
    ● nginx.service - nginx -high performance web server
       Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
       Active: active (running) since Sat 2020-06-27 06:08:53 CST; 8s ago
      Process: 1633 ExecStart=/opt/nginx-opt/nginx/sbin/nginx -c /opt/nginx-opt/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
      Process: 1631 ExecStartPre=/opt/nginx-opt/nginx/sbin/nginx -t -c /opt/nginx-opt/nginx/conf/nginx.conf (code=exited, status=0/SUCCESS)
     Main PID: 1635 (nginx)
        Tasks: 2
       Memory: 956.0K
       CGroup: /system.slice/nginx.service
               ├─1635 nginx: master process /opt/nginx-opt/nginx/sbin/nginx -c /opt/nginx-opt/nginx/conf/nginx.conf
               └─1637 nginx: worker process

    Jun 27 06:08:53 node01 systemd[1]: Starting nginx -high performance web server...
    Jun 27 06:08:53 node01 nginx[1631]: nginx: the configuration file /opt/nginx-opt/nginx/conf/nginx.conf syntax is ok
    Jun 27 06:08:53 node01 nginx[1631]: nginx: configuration file /opt/nginx-opt/nginx/conf/nginx.conf test is successful
    Jun 27 06:08:53 node01 systemd[1]: Started nginx -high performance web server.
    [root@node01 sbin]# 
    [root@node01 sbin]# curl http://localhost/
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>

    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>

    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>

    [root@node01 sbin]# 
    [root@node01 sbin]# netstat -ntlp         
    Active Internet connections (only servers)
    Proto Recv-Q      Send-Q Local Address           Foreign Address         State        PID/Program name    
    tcp        0                   0 0.0.0.0:80                         0.0.0.0:*                 LISTEN       1635/nginx: master  
    tcp        0                   0 0.0.0.0:22                         0.0.0.0:*                 LISTEN       916/sshd            
    tcp6       0                  0 :::22                                  :::*                         LISTEN       916/sshd            
    [root@node01 sbin]# 
    [root@node01 sbin]# ps -aux | grep nginx
    root       1635  0.0  0.0  20564   624 ?        Ss   06:08   0:00 nginx: master process /opt/nginx-opt/nginx/sbin/nginx -c /opt/nginx-opt/nginx/conf/nginx.conf
    nobody     1637  0.0  0.1  21000  1572 ?        S    06:08   0:00 nginx: worker process
    root       1732  0.0  0.0 112812   972 pts/0    R+   06:16   0:00 grep --color=auto nginx
    [root@node01 sbin]# 


    愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

    展开全文
  • nginx系列之一:nginx入门

    万次阅读 多人点赞 2019-05-11 17:06:35
    一、nginx 功能介绍 Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块...

    前言

    nginx系列之一:nginx入门
    nginx系列之二:配置文件解读
    nginx系列之三:日志配置
    nginx系列之四:web服务器
    nginx系列之五: 负载均衡
    nginx系列之六:cache服务
    nginx系列之七:限流配置
    nginx系列之八:使用upsync模块实现负载均衡

    转自:在此感谢原博主的整理分享

    一、nginx 功能介绍

    Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅因为响应静态页面的速度非常快,而且它的模块数量是Apache的2/3。对proxy和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts ,适合用做mongrel clusters前端HTTP响应。
    nginx和Apache一样用模块化设计,nginx模块包括内置模块和第三方模块,其中内置模块中包含主模块和事件模块。

    nginx处理请求逻辑图
    在这里插入图片描述

    二、nginx可以提供的服务

    1. web 服务.
    2. 负载均衡 (反向代理)
    3. web cache(web 缓存)

    三、nginx 的优点

    1. 高并发。静态小文件
    2. 占用资源少。2万并发、10个线程,内存消耗几百M。
    3. 功能种类比较多。web,cache,proxy。每一个功能都不是特别强。
    4. 支持epoll模型,使得nginx可以支持高并发。
    5. nginx 配合动态服务和Apache有区别。(FASTCGI 接口)
    6. 利用nginx可以对IP限速,可以限制连接数。
    7. 配置简单,更灵活。

    四、nginx应用场合

    1. 静态服务器(图片,视频服务),另个lighttpd。并发几万,html,js,css,flv,jpg,gif等。
    2. 动态服务,nginx—fastcgi 方式运行PHP,jsp。(PHP并发约500-1500,MySQL 并发约300-1500)。
    3. 反向代理,负载均衡。日pv2000W以下,都可直接用nginx做代理。
    4. 缓存服务。类似 SQUID,VARNISH。

    五、主流web服务产品对比说明

    5.1 Apache-特性

    1. 2.2版本本身稳定强大,据官方说:其2.4版本性能更强。
    2. prefork模式取消了进程创建开销,性能很高。
    3. 处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在与Apache本身。
    4. 高并发时消耗系统资源相对多一些。
    5. 基于传统的select模型。
    6. 扩展库,DSO方法。

    5.2 nginx-特性

    1. 基于异步IO模型(epoll,kqueue),性能强,能够支持上万并发。
    2. 对小文件支持很好,性能很高(限静态小文件1M)。
    3. 代码优美,扩展库必须编译进主程序。
    4. 消耗代码资源比较低。
    5. lighttpd(百度贴吧,豆瓣)
    6. 基于异步IO模式,性能和nginx相近。
    7. 扩展库是SO模式,比nginx要灵活。
      8.通过差距(mod_secdownload)可实现文件URL地址加密。

    5.3 web服务产品性能对比测试

    5.3.1 静态数据性能对比

    1. 处理静态文件Apache性能比nginx和lighttpd要差。
    2. nginx在处理小文件优势明显。
    3. 处理静态小文件(小于1M),nginx和lighttpd比Apache更有优势,lighttpd最强。

    5.3.2 动态数据性能对比

    1. 处理动态内容三者相差不大,主要取决于PHP和数据库压力。
    2. 当处理动态数据时,三者差距不大,从测试结果看,Apache更有优势。这是因为处理动态数据能力取决于PHP和后端数据的提供服务能力。即瓶颈不在web服务器上。
    3. 一般PHP引擎的并发值300-1000,JAVA引擎并发300-1000,数据库并发300-1000.

    5.3.3 为什么nginx总体性能比Apache高。

    1. nginx用最新epoll、kqueue网络IO模型,而Apache使用床头的select模式。
    2. 目前Linux下能承受高并发访问的squid、Memcached 都采用的是epoll网络IO模型。

    5.3.4 如何选择WEB服务器:

    静态业务:高并发、采用nginx,lighttpd,根据自己掌握程度或公司要求。
    动态业务:采用nginx和Apache均可。
    既有静态业务又有动态业务:nginx或Apache,不要多选要单选。
    动态业务可由前端代理(haproxy),根据页面元素的类型,向后转发给相应的服务器处理。
    思想:工作都不要追求一步到位,满足需求的前提下,先用再逐步完善。
    提示:nginx做web(Apache,lighttpd)、反向代理(haproxy、lvs、nat)及缓存服务器(squid)也是不错的。
    最终建议:对外业务nginx,对内业务Apache(yum httpd mysql-server php)。

    六、nginx实战过程

    6.1 安装依赖包

    • nginx安装依赖GCC、openssl-devel、pcre-devel、zlib-devel软件库。
    • Pcre全称(Perl Compatible Regular Expressions),中文perl兼容正则表达式,pcre官方站点
    yum install  pcre pcre-devel -y 
    yum install openssl openssl-devel -y 
    

    6.2 开始编译

    使用./configure --help查看各模块使用情况,用 --without-http_ssi_module 方式关闭不需的模块。可用 --with-http_perl_modules 方式安装需要的模块。

    6.2.1 编译命令

    tar -zxf nginx-1.10.1.tar.gz 
    cd nginx-1.10.1/
    ./configure --prefix=/data/nginx-1.10.1 --user=nginx --group=nginx  --with-http_ssl_module  --with-http_stub_status_module
    
    useradd nginx -M -s /sbin/nologin 
    make && make install 
    ln -s /data/nginx-1.10.1 /data/nginx
    

    6.2.2 测试nginx配置文件是否正常

    /data/nginx/sbin/nginx -t 
    nginx: the configuration file /data/nginx-1.10.1/conf/nginx.conf syntax is ok
    nginx: configuration file /data/nginx-1.10.1/conf/nginx.conf test is successful
    

    6.2.3 启动nginx服务器

    /data/nginx/sbin/nginx  -t  	# 检查配置文件
    /data/nginx/sbin/nginx      	# 确定nginx服务
    netstat -lntup |grep nginx      # 检查进程是否正常
    curl http://localhost           # 确认结果
    

    6.2.4 nginx其他命令

    nginx -s signal
    signal:
    stop — fast shutdown
    quit — graceful shutdown
    reload — reloading the configuration file
    reopen — reopening the log files
    用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
    

    /data/nginx/sbin/nginx -V 查看已经编译的参数。

    使用kill命令操作nginx。格式:kill -信号 PID

    信号名称

    • TERM,INT 快速关闭
    • QUIT 优雅的关闭,保持吸纳有的客户端连接
    • HUP 重启应用新的配置文件
    • USR1 重新打开日志文件
    • USR2 升级程序
    • WINCH 优雅的关闭工作进程

    例子

    kill -QUIT  `cat /data/nginx/nginx.pid`
    kill -HUP `cat /data/nginx/nginx.pid`
    

    七、nginx配置文件

    配置基础配置文件

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    测试配置文件是否正常

    shell> /data/nginx/sbin/nginx -t 
    nginx: the configuration file /data/nginx-1.10.3/conf/nginx.conf syntax is ok
    nginx: configuration file /data/nginx-1.10.3/conf/nginx.conf test is successful
    shell> curl -I http://localhost
    HTTP/1.1 200 OK
    

    八、nginx监控

    开启 nginx 监控服务

    8.1 开启状态页

    # 设定查看 Nginx 状态地址   
    location /status {  
      stub_status on;   				# 表示开启stubStatus的工作状态统计功能。
      access_log off;   				# access_log off; 关闭access_log 日志记录功能。
      #auth_basic "status";   		# auth_basic 是nginx的一种认证机制。
      #auth_basic_user_file conf/htpasswd;	# 用来指定密码文件的位置。
    }
    

    8.2 配置登录密码

    yum install -y httpd-tools
    /usr/local/apache/bin/htpasswd -c /data/nginx/conf/htpasswd biglittleant 
    New password:
    

    完成后会在 /data/nginx/conf/ 目录下生成 htpasswd 文件。

    8.3 访问URL

    curl http://127.0.0.1/status
    
    Active connections:  1
    server accepts handled requests
     16 16 18
    Reading: 0 Writing: 1 Waiting: 0
    

    active connections – 活跃的连接数量
    server accepts handled requests — 总共处理了16个连接 , 成功创建16次握手, 总共处理了18个请求
    Reading — 读取客户端的连接数:
    Writing 响应数据到客户端的数量;
    Waiting 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 即 Nginx 已处理完正在等候下一次请求指令的驻留连接.

    8.3 编写zabbix监控脚本

    nginx_status_fun(){
        NGINX_PORT=$1
        NGINX_COMMAND=$2
        nginx_active(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
            }
        nginx_reading(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
           }
        nginx_writing(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
           }
        nginx_waiting(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
           }
        nginx_accepts(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
           }
        nginx_handled(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
           }
        nginx_requests(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
           }
        case $NGINX_COMMAND in
            active)
                nginx_active;
                ;;
            reading)
                nginx_reading;
                ;;
            writing)
                nginx_writing;
                ;;
            waiting)
                nginx_waiting;
                ;;
            accepts)
                nginx_accepts;
                ;;
            handled)
                nginx_handled;
                ;;
            requests)
                nginx_requests;
            esac 
    }
    

    九、nginx优化

    9.1 nginx内核优化

    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000    65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max=25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
    

    十、扩展一:nginx全局变量

    • $args:这个变量等于请求行中的参数,同$query_string。
    • $is_args: 如果已经设置$args,则该变量的值为"?",否则为""。
    • $content_length: 请求头中的Content-length字段。
    • $content_type: 请求头中的Content-Type字段。
    • $document_uri: 与$uri相同。
    • $document_root: 当前请求在root指令中指定的值。
    • $host: 请求主机头字段,否则为服务器名称。
    • $http_user_agent: 客户端agent信息。
    • $http_cookie: 客户端cookie信息。
    • $limit_rate: 这个变量可以限制连接速率。
    • $request_method: 客户端请求的动作,通常为GET或POST。
    • $remote_addr: 客户端的IP地址。
    • $remote_port: 客户端的端口。
    • $remote_user: 已经经过Auth Basic Module验证的用户名。
    • $request_body_file`: 客户端请求主体的临时文件名。
    • $request_uri: 请求的URI,带参数
    • $request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
    • $scheme: 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
    • $server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    • $server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。
    • $server_name: 服务器名称。
    • $server_port: 请求到达服务器的端口号。
    • $request_uri: 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz,它无法修改。
    • $uri: 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html可能和最初的值有不同,比如经过重定向之类的。它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html。

    例子:

    访问链接是:http://localhost:88/test1/test.php 
    网站路径是:/var/www/html
    
    $host:localhost
    $server_port:88
    $request_uri:http://localhost:88/test1/test.php
    $document_uri:/test1/test.php
    $document_root:/var/www/html
    $request_filename:/var/www/html/test1/test.php
    
    

    nginx plus – ngx_http_status_module

    商业版的 nginx plus 通过他的 ngx_http_status_module 提供了比 nginx 更多的监控指标,可以参看 http://demo.nginx.com/status.html

    nginx access log 分析

    nginx 的 access log 中可以记录很多有价值的信息,通过分析 access log,可以收集到很多指标。
    python 编写的 linux 工具 ngxtop 就实现了对 access log 的分析功能。

    NDK – ngx_devel_kit

    NDK 是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。

    nginx lua – lua-nginx-module

    nginx的lua模块,通过这个模块,可以对nginx做定制开发

    十、扩展二:web服务器事件处理模型

    select

    select 最早于1983年出现在4.2BSD中,通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使进程可获得这些文件描述符从而进行后续的读写操作。
    select 目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。
    select 的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,Linux上一般为1024,不过可通过修改宏定义甚至重新编译内核的方式提升这一限制。
    另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用 select() 会对所有socket进行一次线性扫描,所以这也浪费了一定开销。

    poll

    poll 在1986年诞生于System V Release 3,它和 select 在本质上没多大差别,但是 poll 没有最大文件描述符数量的限制。
    poll 和select 同样存在的缺点是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间间,而不论文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。
    另外,select() 和 poll() 将就绪的文件描述符告诉进程后,如果进程没对其进行IO操作,那下次调用 select() 和 poll() 时将再次报告这些文件描述符,所以它们一般不会丢失就绪的消息,这种方式称为水平触发(Level Triggered)。

    epoll

    直到Linux2.6才出现了由内核直接支持的实现方法,就是epoll,它几乎具备之前说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。
    epoll 可同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果没有采取行动,那它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高些,但代码实现相当复杂。
    epoll同样只告知那些就绪的文件描述符,而且当调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是个代表就绪描述符数量的值,只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也用了内存映射(mmap)技术,这样便彻底省掉了这些文件描述符在系统调用时复制的开销。
    另个本质的改进在于 epoll 采用基于事件的就绪通知方式。在 select/poll 中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通过 epoll_ctl() 来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似 callback 的回调机制,迅速激活这个文件描述符,当进程调用 epoll_wait() 时便得到通知。

    nginx -s reload 过程

    nginx主进程读取配置文件,如果发现配置文件变更,会创建一个新的主进程,然后同时旧的进程,及旧的子进程关闭,旧进程会拒绝新的连接,服务到自己的连接结束,然后关闭。

    Apache select模型和 nginx epoll 模型对比讲解

    Nginx高并发得益于其采用了 epoll 模型,与传统的服务器架构不同,epoll 是linux内核2.6后才出现的。下面通过比较Apache和Nginx工作原理来比较。

    传统Apache都是多进程或者多线程来工作,假设是多进程工作(prefork),apache会先生成几个进程,类似进程池的工作原理,只不过这里的进程池会随着请求数目的增加而增加。对于每一个连接,apache都是在一个进程内处理完毕。具体是 recv(),及根据 URI 去进行磁盘I/O来寻找文件,还有 send()都是阻塞的。其实说白了都是 apche 对套接字的I/O,读或写,但读或写都是阻塞的,阻塞意味着进程得挂起进入sleep状态,那一旦连接数很多,Apache必然要生成更多的进程来响应请求,一旦进程多了,CPU对进程的切换就频繁了,很耗资源和时间,所以导致apache性能下降,处理不过来这么多进程了。其实如果对于进程每个请求都没阻塞,那效率肯定会提高很多。

    Nginx采用 epoll 模型,异步非阻塞。对于Nginx,把一个完整的连接请求处理都划分成了事件,一个个的事件。如accept(), recv(),磁盘I/O,send()等,每部分都有相应的模块去处理,一个完整的请求可能是由几百个模块去处理。真正核心的就是事件收集和分发模块,这就是管理所有模块的核心。只有核心模块的调度才能让对应的模块占用CPU资源,从而处理请求。拿一个HTTP请求来说,首先在事件收集分发模块注册感兴趣的监听事件,注册好后不阻塞直接返回,接下来就不需再管了,等待有连接来了内核会通知你(epoll的轮询会告诉进程),cpu就可处理其他事情去。一旦有请求来,那对整个请求分配相应的上下文(其实已预先分配好),这时再注册新的感兴趣的事件(read函数),同样客户端数据来了内核会自动通知进程可以去读数据了,读数据后就是解析,解析完后去磁盘找资源(I/O),一旦I/O完成会通知进程,进程开始给客户端发回数据send(),这时也不是阻塞的,调用后就等内核发回通知发送的结果就行。整个下来把一个请求分成了很多个阶段,每个阶段都到很多模块去注册,然后处理,都是异步非阻塞。异步指的就是做一个事情,不需等返回结果,做好后会自动通知你。

    select/epoll的特点

    select 特点:select 选择句柄时,是遍历所有句柄,即句柄有事件响应时,select需遍历所有句柄才能获取到哪些句柄有事件通知,因此效率非常低。但是如果连接很少时,select 和 epoll 的LT触发模式相比, 性能上差别不大。
    这里多说一句,select支持的句柄数是有限制的, 同时只支持1024个,这个是句柄集合限制的,如超过这个限制,很可能导致溢出,且非常不容易发现问题, 当然可通过修改linux的socket内核调整这个参数。
    epoll特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需遍历整个句柄链表,因此效率非常高,内核将句柄用红黑树保存的。
    对于epoll而言还有ET和LT的区别,LT表水平触发,ET表边缘触发,两者在性能以及代码实现上差别也是非常大的。

    不管是Nginx还是Squid这种反向代理,其网络模式都是事件驱动。事件驱动其实是很老的技术,早期的select、poll都是如此。后来基于内核通知的更高级事件机制出现,如libevent里的epoll,使事件驱动性能得以提高。事件驱动的本质还是IO事件,应用程序在多个IO句柄间快速切换,实现所谓的异步IO。事件驱动服务器,最适合做的就是这种IO密集型工作,如反向代理,它在客户端与WEB服务器之间起一个数据中转作用,纯粹是IO操作,自身并不涉及到复杂计算。反向代理用事件驱动来做,显然更好,一个工作进程就可run了,没有进程、线程管理的开销,CPU、内存消耗都小。

    所以Nginx、Squid都是这样做的。当然,Nginx也可是多进程 + 事件驱动的模式,几个进程跑libevent,不需要Apache那样动辄数百的进程数。Nginx处理静态文件效果也很好,那是因为静态文件本身也是磁盘IO操作,处理过程一样。至于说多少万的并发连接,这个毫无意义。随手写个网络程序都能处理几万的并发,但如果大部分客户端阻塞在那里,就没什么价值。

    再看看Apache或者Resin这类应用服务器,之所以称他们为应用服务器,是因为他们真的要跑具体的业务应用,如科学计算、图形图像、数据库读写等。它们很可能是CPU密集型的服务,事件驱动并不合适。例如一个计算耗时2秒,那么这2秒就是完全阻塞的,什么event都没用。想想MySQL如果改成事件驱动会怎么样,一个大型的join或sort就会阻塞住所有客户端。这个时候多进程或线程就体现出优势,每个进程各干各的事,互不阻塞和干扰。当然,现代CPU越来越快,单个计算阻塞的时间可能很小,但只要有阻塞,事件编程就毫无优势。所以进程、线程这类技术,并不会消失,而是与事件机制相辅相成,长期存在。

    总言之,事件驱动适合于IO密集型服务,多进程或线程适合于CPU密集型服务,它们各有各的优势,并不存在谁取代谁的倾向。

    相关参考

    nginx-日志高级技巧](https://segmentfault.com/a/1190000000703319)
    nginx-官方文档
    nginx优化
    查看网站排名
    nginx-status-demo

    展开全文
  • nginx安装及部署

    万次阅读 多人点赞 2019-04-11 15:52:47
    下载 官方网站:https://nginx.org/en/download.html Windows下安装 ...下载后解压(切记不能含有中文...1) 直接双击该目录下的"nginx.exe",即可启动nginx服务器; 2) 命令行进入该文件夹,执行start ngin...
  • Docker学习之路04:创建定制Nginx镜像

    万次阅读 2021-03-17 13:35:43
    Docker学习之路04:创建定制Nginx镜像 目的: 1、掌握利用commit命令构建镜像的方法 2、掌握利用Dockerfile构建镜像的方法 内容: 下载镜像 # 查看docker镜像 [root@master ~]# docker images REPOSITORY TAG IMAGE ...
  • Nginx 升级到 nginx-1.20.1

    千次阅读 2021-05-28 09:44:21
    1、下载nginx 版本 wget [http://nginx.org/download/nginx-1.20.1.tar.gz](http://nginx.org/download/nginx-1.20.1.tar.gz) 2、移动到 /usr/local mv nginx-1.20.1.tar.gz /usr/local/ cd /usr/local/ 3、解压 ...
  • nginx安装第三访模块nginx_upstream_check_module一:nginx后端健康检查二:nginx被动检查三:nginx主动检查3.1 安装nginx_upstream_check_module3.2 模块配置四:docker中安装 一:nginx后端健康检查 nginx自带健康...
  • 一、安装nginx 1.1 资源准备 查看系统版本 lsb_release -a 这里以Linux Centos 7为例。 官方下载安装包 http://nginx.org/en/download.html 这里以最新稳定版本nginx-1.20.1为例,具体版本按实际需要进行下载,...
  • Nginx+Tomcat搭建负载均衡,实现网站请求的分发

    千次下载 热门讨论 2015-11-11 17:45:29
    使用Nginx+Tomcat搭建负载均衡,实现网站请求的分发
  • k8s部署nginx

    万次阅读 2019-09-27 11:24:32
    k8s部署nginx
  • nginx反向代理

    万次阅读 多人点赞 2018-10-19 17:39:37
    Nginx配置详解 nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向...
  • Nginxnginx-upload-module安装

    千次阅读 2019-03-17 18:06:15
    Nginx用于提供高性能的web服务和反向代理服务,支持Linux和Windows。靖哥哥也是刚开始接触Nginx,这里主要记录一下Nginx环境搭建的爬坑过程。 使用nginx之前,你需要对基本的TCP/IP、HTTP协议、HTML有所了解,对...
  • 升级ingress-nginx-controller的nginx版本

    千次阅读 2019-02-26 15:27:02
    线上的k8s使用nginx所在的边缘节点来将外部访问导流到集群内部容器,ingress-nginx-controller是k8s众多ingress controller实现中的一种,以agent+nginx的方式提供服务。agent通过watch k8s的ingress、configmap、...
  • Nginx 原理和架构

    万次阅读 多人点赞 2019-11-09 17:13:09
    Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动...
  • centOS7安装nginxnginx配置

    万次阅读 多人点赞 2019-05-09 14:59:19
    强制保存并退出 6、启动nginx服务 切换目录到/usr/local/nginx/sbin下面 启动nginx命令: ./nginx 7、查看nginx服务是否启动成功 ps -ef | grep nginx 8、访问你的服务器IP 显示 说明安装和配置都没问题OK了 nginx....
  • Nginx 是一个很强大的高性能Web和反向代理服务器。虽然使用命令行可以对nginx进行各种操作,比如启动等,但是还是根据不太方便。设置开机自启动。 首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下...
  • 文章目录准备安装包安装指标释义,{NAMESPACE} 可以在exproter启动的时候指定Server mainServer zonesFilter ...nginx-export 官方地址 https://github.com/hnlq715/nginx-vts-exporter 下载 Nginx-exporter wg...
  • Nginx使用教程

    万次阅读 多人点赞 2018-10-28 08:48:03
    nginx介绍 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,...
  • Nginx系列六:Keepalived+Nginx高可用集群(主从模式)
  • 安装Nginx1.19.6安装依赖包创建目录下载解压编译安装测试Nginx配置文件是否正常启动Nginx用户和组属组和属主Nginx的其他命令加入systemctl管理并设置开机自启动将Nginx加入systemctl管理创建nginx.service服务文件...
  • grpc+nginx架构部署指导

    万次阅读 2019-08-21 17:18:08
    本文介绍使用nginx管理grpc流量、部署grpc+nginx架构的方法。 1. 环境信息 本节介绍本文示例使用的环境信息,如下: 软件名称 版本信息 操作系统 CentOS Linux release 7.2 gRPC 1.10.1-pre1 ...
  • 【学习笔记】启动Nginx 查看nginx进程 查看nginx服务主进程的方式 Nginx服务可接受的信号 nginx
  • Nginx配置

    万次阅读 多人点赞 2019-04-22 11:12:15
    1.Web 服务器: 相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll ...
  • nginx动态路由

    万次阅读 2019-12-15 17:00:38
    nginx动态路由 目录 使用场景 服务器信息 安装consul 安装web服务 安装nginx 测试 使用场景 简易架构图 web服务会通过弹性扩缩或者手动拉起机制创建新的集群服务,这样nginx的负载均衡策略需要根据...
  • Linux下安装与升级nginx

    千次阅读 2019-03-24 15:56:45
    安装使用的版本:nginx-0.8.55.tar.gz 升级使用的版本:nginx-1.0.15.tar.gz 一、nginx 安装与测试 1、先决条件 [root@svr5 data]# yum -y install gcc pcre-devel openssl-devel # 安装必要的软件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 810,507
精华内容 324,202
关键字:

nginx