Nginx 安装 配置 使用

基本的HTTP服务器特性

  • 处理静态文件,索引文件以及自动索引;打开文件描述符缓存(缓存元数据和文件描述符,下一次可以直接从内存找到数据或者文件的位置);
  • 使用缓存加速反向代理;简单负载均衡以及容错(后端服务的健康状况检查);
  • 远程FastCGI,uwsgi,SCGI,和memcached服务的缓存加速支持;简单的负载均衡以及容错;
  • 模块化的架构。过滤器包括gzip压缩、ranges支持、chunked响应、XSLT,SSI以及图像缩放。在SSI 过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理;
  • 支持SSL,TLS SNI。 
    Tengine(淘宝的nginx或叫tnginx,整合非常多的第三方插件) 
    varnish:提供缓存,有限内存缓存(使用算法使性能更好) 
    squid:它和varnish就好比httpd和nginx 
    nginx:其缓存功能保存到磁盘中 
    已经附带了memcached,可以直接管理memcached 
    httpd:既支持磁盘缓存,有支持内存缓存 

    其他的HTTP服务器特性

  • 基于名字和IP的虚拟主机;
  • Keep-alive和pipelined连接支持;
  • 灵活的配置;
  • 重新加载配置以及在线升级时,不需要中断正在处理的请求; 
    (新的连接建立是使用新的配置,老的连接则在在下一次请求时候使用新配置,这种方式较nginx的热部署,平滑升级)
  • 自定义访问日志格式,带缓存的日志写操作(先将日志放于缓存,然后存在磁盘)以及快速日志轮转(日志滚动);
  • 3xx-5xx错误代码重定向;
  • 重写(rewrite)模块:使用正则表达式改变URI;
  • 根据客户端地址执行不同的功能;(根据客户端的类型比如手机设备返回wrap页面)
  • 基于客户端IP地址和HTTP基本认证机制的访问控制;
  • 支持验证HTTP referer;(ngx_http_referer_module模块允许拦截“Referer”请求头中含有非法值的请求,阻止它们访问站点。 需要注意的是伪造一个有效的“Referer”请求头是相当容易的, 因此这个模块的预期目的不在于彻底地阻止这些非法请求,而是为了阻止由正常浏览器发出的大规模此类请求。 还有一点需要注意,即使正常浏览器发送的合法请求,也可能没有“Referer”请求头。比如你的网站A的图片被网站B盗链了,当访问B的时候会产生对A的大量的访问,导致A访问量过大,用此方式修改只允许站内连接)
  • 支持PUT、DELETE、MKCOL、COPY以及MOVE方法;
  • 支持FLV流和MP4流;
  • 速度限制;
  • 来自同一地址的同时连接数或请求数限制;
  • 嵌入Perl语言。 

    架构和扩展性

  • 一个主进程和多个工作进程,工作进程以非特权用户运行;
  • 支持的事件机制:kqueue(FreeBSD 4.1+)、epoll(Linux 2.6+)、rt signals(realtime signals Linux 2.2.19+)、/dev/poll(Solaris 7 11/99+)、event ports(Solaris 10)、select以及poll;
  • 众多支持的kqueue特性包括EV_CLEAR、EV_DISABLE(临时禁止事件)、NOTE_LOWAT、EV_EOF,可用数据的数量,错误代码;
  • 支持sendfile(FreeBSD 3.1+, Linux 2.2+, Mac OS X 10.5+)、sendfile64(Linux 2.4.21+)和sendfilev(Solaris 8 7/01+);
  • 文件AIO(FreeBSD 4.3+, Linux 2.6.22+);
  • DIRECTIO (FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, Mac OS X);
  • 支持Accept-filters(FreeBSD 4.1+, NetBSD 5.0+,可以只接受有限的连接 )和 TCP_DEFER_ACCEPT(Linux 2.4+);
  • 10000个非活跃的HTTP keep-alive连接仅占用约2.5M内存;
  • 尽可能避免数据拷贝操作(如sendfile)。 
    上图中master监控worker进程运行状况。master是由管理员启用的,加载配置文件来进行全局管理,worker是使用普通用户,由master发起,是master的子进程。nginx是高度模块化的,向上图中worker进程中有很多模块,用户发起的请求交给worker进程,而其本身交给自己的模块进行相应的处理,这些模块以流水线的形式进行工作的,比如第一个模块解析请求的头部, 第二个取得数据,第三个创建相应。 
    上面的描述: 
    重新加载配置以及在线升级时,不需要中断正在处理的请求 
    详细的过程是,当新的配置文件加载到nginx时,nginx建立新的worker进程(使用新的配置文件)来相应新的请求,而原来的worker进程在完成以前的请求之后被master kill掉,于是动态缓慢加载新的配置文件

完成内容

  • 主进程主要完成如下工作: 
    1. 读取并验正配置信息;
    2. 创建、绑定及关闭套接字;
    3. 启动、终止及维护worker进程的个数;
    4. 无须中止服务而重新配置工作特性;
    5. 控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;(类似重新加载配置文件加载,新版本的master兼容老版本的worker)
    6. 重新打开日志文件,实现日志滚动;
    7. 编译嵌入式perl脚本;
  • worker进程主要完成的任务包括: 
    1. 接收、传入并处理来自客户端的连接;
    2. 提供反向代理及过滤功能;
    3. nginx任何能完成的其它任务; 
      cache loader进程主要完成的任务包括:
    4. 检查缓存存储中的缓存对象;
    5. 使用缓存元数据建立内存数据库;
  • cache manager进程的主要任务: 
    1. 缓存的失效及过期检验; 
      Nginx的配置有着几个不同的上下文:main(对任何配置都生效,全局的)、http(包括server,upstream实现反向代理,location定义访问相应),还有实现邮件服务反向代理的mail。配置语法的格式和定义方式遵循所谓的C风格,因此支持嵌套,还有着逻辑清晰并易于创建、阅读和维护等优势。
  • sendfile: 
    步骤一:系统调用read导致了从用户空间到内核空间的上下文切换。DMA模块从磁盘中读取文件内容,并将其存储在内核空间的缓冲区内,完成了第1次复制。 
    步骤二:数据从内核空间缓冲区复制到用户空间缓冲区,之后系统调用read返回,这导致了从内核空间向用户空间的上下文切换。此时,需要的数据已存放在指定的用户空间缓冲区内(参数tmp_buf),程序可以继续下面的操作。 
    步骤三:系统调用write导致从用户空间到内核空间的上下文切换。数据从用户空间缓冲区被再次复制到内核空间缓冲区,完成了第3次复制。不过,这次数据存放在内核空间中与使用的socket相关的特定缓冲区中,而不是步骤一中的缓冲区。 
    步骤四:系统调用返回,导致了第4次上下文切换。第4次复制在DMA模块将数据从内核空间缓冲区传递至协议引擎的时候发生,这与我们的代码的执行是独立且异步发生的。你可能会疑惑:“为何要说是独立、异步?难道不是在write系统调用返回前数据已经被传送了?write系统调用的返回,并不意味着传输成功——它甚至无法保证传输的开始。调用的返回,只是表明以太网驱动程序在其传输队列中有空位,并已经接受我们的数据用于传输。可能有众多的数据排在我们的数据之前。除非驱动程序或硬件采用优先级队列的方法,各组数据是依照FIFO的次序被传输的(图1中叉状的DMA copy表明这最后一次复制可以被延后)。 
    采用sendfile可以很好地避免在将数据有DMA传入用户空间,再由用户空间传入内核空间的socket缓冲: 
    步骤一:mmap系统调用导致文件的内容通过DMA模块被复制到内核缓冲区中,该缓冲区之后与用户进程共享,这样就内核缓冲区与用户缓冲区之间的复制就不会发生。 
    步骤二:write系统调用导致内核将数据从内核缓冲区复制到与socket相关联的内核缓冲区中。 
    步骤三:DMA模块将数据由socket的缓冲区传递给协议引擎时,第3次复制发生。

nginx安装:

>本文采用编译安装的方式
  1. 解决依赖关系 
    编译安装nginx需要事先需要安装开发包组”Development Tools”和 “Development Libraries”。同时,还需要专门安装pcre-devel包:

     yum -y install zlib zlib-devel openssl openssl-devel pcre-devel gd-devel
  2. 添加用户

    groupadd -r nginx
    useradd -r -g nginx nginx
  3. 编译安装

    ./configure \
    --prefix=/usr \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_stub_status_module \
    --with-http_auth_request_module \
    --with-mail \
    --with-mail_ssl_module \
    --with-file-aio \
    --with-ipv6 \
    --with-http_v2_module \
    --with-http_image_filter_module \
    --with-pcre \
    --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
    make
    make install
  4. 配置支持Centos7 systemctl服务管理

    vim /lib/systemd/system/nginx.service

    添加下面内容

    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After=syslog.target network.target remote-fs.target nss-lookup.target [Service]
    Type=forking
    PIDFile=/var/run/nginx.pid
    ExecStartPre=/usr/sbin/nginx -t
    ExecStart=/usr/sbin/nginx
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true [Install]
    WantedBy=multi-user.target

    可以通过systemctl status start stop来看nginx服务内容

  5. 配置nginx

    vim /etc/nginx/nginx.conf
    
    #在http节点下,添加upstream节点
    
    upstream mysite {
    server 172.20.13.229:8081;
    server 172.20.13.230:8082;
    } #修改server节点下的location节点 location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering off;
    proxy_pass http://mysite;
    } #主要内容在mysite中

完成:)

Nginx 安装 配置 使用的更多相关文章

  1. Nginx安装配置(转)

    Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/ ...

  2. Nginx安装配置PHP(FastCGI)环境的教程

    这篇是Nginx安装配置PHP(FastCGI)环境的教程.Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用. 一.什么是 FastCGI F ...

  3. Nginx安装配置与HelloWorld

    <深入理解Nginx>阅读与实践(一):Nginx安装配置与HelloWorld 最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码 ...

  4. VMware Linux 下 Nginx 安装配置 - nginx.conf 配置 [负载两个 Tomcat] (三)

    首先启动Nginx 1. 相关浏览 两个 Tomcat 配置:  VMware Linux 下 Nginx 安装配置 - Tomcat 配置 (二) Nginx 安装配置启动: VMware Linu ...

  5. VMware Linux 下 Nginx 安装配置 - Tomcat 配置 (二)

    准备工作 相关浏览: VMware Linux 下 Nginx 安装配置 (一) 1. 选在 /usr/local/ 下创建 softs 文件夹,通过 ftp 命令 把 apache-tomcat-7 ...

  6. Hearbeat + Nginx 安装配置

    Hearbeat + Nginx 安装配置 实验环境 两台主机:Linux Centos 6.5 32位 主 服务端:Hearbeat + Nginx eth0:192.168.1.160(公网) e ...

  7. Nginx安装配置|Nginx反向代理|Nginx支持HTTPS|Nginx重定向

    Nginx安装配置 可以直接看到最下面的HTTPS. Nginx安装 我的系统如下: No LSB modules are available. Distributor ID: Ubuntu Desc ...

  8. puppet 3+Unicorn+Nginx安装配置

    puppet 3+Unicorn+Nginx安装配置 2014-08-15 10:58 酒瓶不倒 酒瓶不倒的博客 字号:T | T 一键收藏,随时查看,分享好友! Unicorn 效率要比 Webri ...

  9. nginx安装配置_runoob_阅读笔记_20190917

    Nginx 安装配置_runoob菜鸟教程 Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向 ...

随机推荐

  1. 新概念英语(1-125)Tea for two

    Does Susan have tea by herself?A:Can't you come in and have tea now,Peter? Not yet.B:I must water th ...

  2. C# 客户端程序调用外部程序的三种实现

    简介 我们用C#来开发客户端程序的时候,总会不可避免的需要调用外部程序或者访问网站,本篇博客介绍了三种调用外部应用的方法,供参考 实现 第一种是利用shell32.dll,实现ShellExecute ...

  3. Python之面向对象三

    面向对象的三大特性: 多态 多态指的是一类事物有多种形态.Python3天生支持多态. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCM ...

  4. uvalive 5834 Genghis Khan The Conqueror

    题意: 给出一个图,边是有向的,现在给出一些边的变化的信息(权值大于原本的),问经过这些变换后,MST总权值的期望,假设每次变换的概率是相等的. 思路: 每次变换的概率相等,那么就是求算术平均. 首先 ...

  5. heightcharts点击曲线图获取返回值的问题(ios点击图表第一次无法触发点击事件解决方法)

    需求:用的heightcharts插件,点击曲线图想获得所点击点的返回值,如图 问题代码: (function chart_line(){ var data={"title":[& ...

  6. 使用WSUS离线下载补丁并安装在非联网的windows系统中(以Windows Server 2008 r2为例)

    首先我失去https://serverfault.com/questions/322938/finding-and-downloading-all-available-win2008-r2-and-w ...

  7. ABP框架 - 我的第一个Web API

    本文示例源代码地址https://github.com/lcyhjx/abp-training 上一篇我们已经对ABP是什么,能做什么.有了一个印象.那么接下来我们将动手使用ABP框架快速开发一个AP ...

  8. 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  9. [LeetCode] Shortest Unsorted Continuous Subarray 最短无序连续子数组

    Given an integer array, you need to find one continuous subarray that if you only sort this subarray ...

  10. java String的各种方法及操作

    No. 方法名称 功能 字符与字符串 01 public String(char[] value) 将字符数组中所有内容变为字符串 02 public String(char[] value,int ...