Nginx初探

Nginx是什么?

Nginx是由俄罗斯人Igor Sysoev开发的一款开源的,轻量级的Web服务器

Ngnix功能及特点

Ngnix服务器以其功能丰富著称于世。它既可以作为HTTP服务器,也可以作为反向代理服务器或者邮件服务器能够快速的响应静态页面(HTML)的请求;支持FastCGO、SSL、Virtual Host、URL、Rewrite、HTTP Basic Auth、Gzip等大量功能;并且支持更多的第三方功能模块的扩展。

Nginx提供的的基本功能服务可大致归纳为以下三大类:

  1. Nginx提供基本的HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以王城简单的负载剧本和容错,自持过滤功能,支持SSL等。

  2. Nginx提供高级的HTTP服务,可以进行自定义配置,支持虚拟主机,支URL从定向,支持网络监控,自持流媒体传输等。

  3. Nginx作为邮件代理服务器是最早开发这个产品的目的之一,它支持IMAP/POP3代理服务器功能,支持内部SMTP代理服务功能。

Ngnix配置文件配置

默认配置文件(已去掉注释部分)

#全局部分
#
worker_processes  1;       

#全局部分结束

#events模块
events {
    worker_connections  1024;
}
#events模块结束

#http模块
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    #sever模块
    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;
        }
    }
        #sever模块结束

}
#http模块结束

全局模块

全局模块是配置文件从开始到events模块之间的内容,主要设置一些影响Ngnix服务器整体运行的配置指令,因此这些指令的作用哦关于是Nginx服务器全局。

通常包括配置运行Nginx服务器的哟过户(组)、允许生成的 worker process 数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。

events模块

events模块涉及的指令主要影响Ngnix服务器与用户的网络连接。常用到的设置包括是否开启对多 worker process 下的网络连接进行序列化,是否允许同时几首多个网络连接,选取那种事件驱动模型处理连接请求,每个worker process 可以透光石支持的最大连接数等。

这一部分的指令对Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活配置调整。

http模块

http模块是Nginx服务器配置中的重要部分,代理、缓存和日志等绝大多数的功能和第三方模块的配置都可以在这个模块中进行配置。

http模块可以包含自己的全局模块,即http模块中不包括在server模块中的部分,也可以包含server模块,server模块又可以进一步包含location模块。

server模块

server块和“虚拟主机”的概念有密切联系,主要用于配置虚拟主机。包含loaction模块。

loaction模块

每个server模块可以包含多个loaction模块。location模块的主要作用是基于Nginx服务器接收到的请求字符串,对虚拟主机名称(也可以使是IP)之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制功能都是在这部分实现。许多第三方模块的配置也是在location提供功能。

详细配置介绍

配置运行Nginx服务器用户(组)

      user user [group];
  • user,指定可以运行Nginx服务器的用户。

  • group,可选项,指定可以运行Nginx服务器的用户组。

配置允许生成的 worker process 数

worker process 是Ngnix 服务器实现并发处理服务的关键所在。从理论上来说 worker process 的值越大,可以支持的并发处理量也越多,但是实际上它还要受到来自软件本身、操作系统本身资源和能力、硬件设备的卓越。

      worker_processes number | auto ;

定义MIME-TYPE

MIME Type是网络资源的媒体类型。Ngnix服务器作为Web服务器,必须能够识别前端请求的资源类型。

在默认的配置文件中,可以看见有以下两行配置

    include       mime.types;
    default_type  application/octet-stream;

mime.types内容

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/javascript                js;

        ...

    image/png                             png;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/x-icon                          ico;
    image/x-jng                           jng;
    image/x-ms-bmp                        bmp;
    image/svg+xml                         svg svgz;
    image/webp                            webp;

    ...

    audio/mpeg                            mp3;
    audio/ogg                             ogg;
    audio/x-m4a                           m4a;
    audio/x-realaudio                     ra;

    video/3gpp                            3gpp 3gp;
    video/mp2t                            ts;
    video/mp4                             mp4;
    video/mpeg                            mpeg mpg;
    video/quicktime                       mov;
    video/webm                            webm;
    video/x-flv                           flv;
    video/x-m4v                           m4v;
    video/x-mng                           mng;
    video/x-ms-asf                        asx asf;
    video/x-ms-wmv                        wmv;
    video/x-msvideo                       avi;
}

从mime.types中我们可以看到其中定义了一个types结构,结构中包含了浏览器能够势必的MIME类型以及对应类型的文件后缀名。因此types也是一个配置模块。

第二行中default_type配置类用于处理前端请求的MIME类型,语法结构如下:

      default_type mime-type;
  • mime-type为types中定义的类型,如果不见这条指令,默认值为Text/plain。这条指令可以在http、server、loaction模块中使用。
还有许多配置这里就不一一列举了,如果要深入学习,请查阅《Nginx高性能Web服务器详解》一书第 2.4 节,下面只列举常用的配置。

配置请求根目录

web服务器接受发哦网络请求后,首相要在服务器端指定目录中寻找请求资源,root就是用来配置这个根目录的,语法结构如下:

      root path
  • path 为Nginx服务器接收到请求后找找资源的根目录路径,path变量可以包含Nginx服务器预设的大多数变量。

该指令可以在loaction、server、http模块中使用。

      loaction /data/ {
                root /html;
        }
注意
/data/index.html请求 会匹配到路径  /html/data/index.html文件,注意路径的拼接规则。

同IP不同端口代理(server配置)

     ## 域名一
        server_name hel.h-five.com;

        location / {
                proxy_pass http://127.0.0.1:8081;

                proxy_set_header Host $host;
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        }

        ## 域名二
        server_name icloud.h-five.com;

        location / {
                proxy_pass http://127.0.0.1:8082;

                proxy_set_header Host $host;
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }
        }       

注意 server匹配规则 从上到下,如果没有给IP编写匹配规则,那么浏览器直接输入 IP 地址会匹配第一个域名server