Nginx Beginner's Guide

概述

  译文。参考官方文档
  这篇指南描述了如何启动、中止nginx,从新加载配置,而且解释了配置文件的结构,描述了如何设置nginx去服务静态内容,如何配置nginx做为代理服务器等。html

  nginx有一个主进程和若干个工做进程。主进程的主要目的就是读取和评估配置,而且维护工做进程。工做进程其实是处理请求。nginx使用以事件为基础的模型而且依赖操做系统的机制去描述在工做进程中的请求。工做进程的数量定义在配置文件中,对于一个特定的配置,这个数量多是固定的,或者根据CPU的线程数来自动调整。nginx

  nginx和它的模块的工做方式是由配置文件决定的。默认状况下,配置文件是以nginx.config命名的,而且在/usr/local/nginx/conf目录,/etc/nginx目录,或者/usr/local/etc/nginx目录正则表达式

开始,中止和从新加载

  启动nginx,运行可执行文件。一旦nginx已经启动,它就能够经过调用带有-s的参数来控制。使用语法:nginx -s signal
  singal能够被下面任意一个替换数组

  • stop - 快速中止
  • quit - 优雅的中止
  • reload - 从新加载配置文件
  • reopen - 从新打开日志文件

  例如,等全部工做进程完成服务器的当前请求时,中止nginx进程,用以下命令nginx -s quit
  从新加载配置文件的命令发送到nginx或者nginx重启的时候,配置文件改变的内容才会生效。从新加载执行nginx -s reload
  一旦主进程接收到从新加载的信号,它会检查新的配置文件的语法是否合法,而且试着去执行配置文件里的内容。若是成功了,主进程会开始新的工做进程而且发送信息给老的工做进程,请求它们中止。不然主进程就会回滚配置并继续执行老的工做进程。老的工做进程接收到中止的命令,中止接收新的请求链接而且继续执行当前的请求直到全部的请求都处理完成。
  查看正在执行的nginx进程列表,用这个方式:ps -ax | grep nginx服务器

配置文件结构

  nginx是由定义在配置文件中的指令所控制的模块组成。这些指令被分红简单的指定和成块的指令。一个简单的指令由名称和用空格、分号分隔开的参数组成。块指令和简单的指令有着相同的结构,可是替代分号的是,它是由一系列环绕在括号花括号周围的附加的指令结尾。若是一个块指令在内部的括号里有其余的指令,它被称为内容(列如:events,http,server,location
  处在配置文件中全部内容以外的指令被认为是main内容。eventshttp指令存在main内容中,serverhttp,locationserver并发

提供静态内容

  Web服务器一个重要的任务就是提供外部文件(好比像图片或者静态的HTML请求)。你能够实现一个例子,根据请求文件将会从不一样的目录中提供:/data/www里面包含了HTML文件,/data/images包括了图片。这须要编辑配置文件而且要在http块中设置带有两个location块的服务块。
  首先,建立/data/wwww文件夹而且在文件夹里面放一个带有一些文字内容的index.html文件,而后建立/data/images文件夹把一些图片放进去。
  下一步,打开配置文件,默认的配置文件已经包括了一些server块的例子,大多数是注释掉了。如今注释掉全部的块,并开始一个新的server块。ide

http {
    server {
    }
}

  一般来讲,配置文件可能包含一些经过监听的端口或者服务名称进行区分的server块。一旦nginx决定了哪个server去处理一个请求,它根据服务器块中定义的位置指令的参数测试请求头中指定的URI。
  添加以下location块到server块中测试

location / {
    root /data/www;
}

  location 块定义了“/”前缀同来自请求中的URI作比较。对于匹配的请求,这个URI会被添加到定义在root指令的路径中,也就是说,对于/data/www,会在本地文件系统上造成被请求的路径。若是有许多匹配的location块,nginx会选择最长前缀的一个。上面的location块提供了长度是一的最短的前缀,因此只有其余的location块没法提供匹配是,才会使用这个位置块。
  下一步,添加第二个位置块ui

location /images/ {
    root /data;
}

  对于以/images开始的请求将会有一个匹配(location /固然也配置这些请求,可是这是更短的前缀)
  server块的的配置结果应该以下:操作系统

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

  这已是一个监听80端口的工做服务器的配置了,而且能够经过本地机器的上的http://localhost/接入。响应以/images/开头的URI请求,服务器会从/data/images文件夹下发送文件。例如,响应http://localhost/images/example.png的请求,nginx会发送/data/images/example.png文件。若是这样的文件没有找到,那么nginx会响应指示的404错误。没有以/images/开头的URI请求将会匹配到/data/www目录。例如,响应http://localhost/some/example.html的请求,nginx会发送/data/www/some/example.html文件。
  为了让新的配置生效,启动nginx若是尚未启动,若是启动了就执行reload命令:nginx -s reload
  以防事情没有像预期那样工做,你能够试着在access.log和error.log找缘由,文件在/usr/local/nginx或者/var/log/nginx

设置一个简单的代理服务器

  nginx使用最频繁之一的就是把它设置为代理服务器,这也就意味着服务接收请求,并把他们传递到代理服务器,而后从代理服务器取回响应并发送到客户端。
  咱们将配置一个基本的代理服务器,它使用本地目录中的文件来处理图像请求,并将全部的请求发送到一个代理服务器。在这个示例中,两个服务器都定义在一个nginx实例。
  首先,经过在nginx配置文件中添加一个包含以下内容的Server块来定义代理服务器

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

  这将是一个监听8080端口的简单的服务器(很明显,因为使用了标准的80端口,因此listen指定没有被指定)而且将全部的请求映射到本地的/data/up1/目录。建立这个目录而后把index.html文件放到这个目录下。注意的是root指令被放在了server内容里。当为处理请求选定的location块不包括本身的根指令的时候,使用这样的root指令。
  下一步,使用上一小节的服务器配置块并将其修改成代理服务器配置。在第一个location块中,将proxy_pass指令和带有代理服务器协议,名称,端口号的参数放在一块儿。

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

咱们会修改第二个location块,即当前带有/images/为前缀的请求映射到/data/images/目录下的文件。为了让它匹配带有特殊文件扩展名的图片请求,像下面这样修改location

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

  这个参数是一个匹配全部以.gif.jpg,或者是.png结尾的URI的正则表达式。全部的正则表达式都应该以~开始。符合响应的请求将会映射到/data/images/文件夹。
  当nginx选择一个location块去处理一个请求的时候,它首先要检查指定前缀的location指令,用最长前缀记住位置,而后检查正则表达式。若是有匹配的正则表达式,nginx会挑选这个位置,不然的话会选择以前记住的一个。
  一个代理服务器的配置结果像这样

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

  服务器会过滤以.gif.jpg.png结尾的请求而且映射到/data/images/文件夹下面(经过添加root指令的URI参数),而后将其余的请求分配给上面配置的代理服务器。  为了使新的配置文件生效,发送relaod信号给nginx

相关文章
相关标签/搜索