快速学习nginx基本知识

2018年01月24日 08:45 | 2469次浏览

本章节介绍如何启动和停止nginx,并重新加载其配置,说明配置文件的结构,并介绍如何设置nginx来提供静态内容,如何将nginx配置为代理服务器,以及如何将其与nginx连接一个FastCGI应用程序。

nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,并维护工作进程。工作进程对请求进行实际处理。nginx使用基于事件的模型和依赖于操作系统的机制来高效地在工作进程间分配请求。工作进程的数量在配置文件中定义,可以针对给定的配置进行修复,也可以自动调整为可用CPU核心的数量

nginx及其模块的工作方式是在配置文件中确定的。默认情况下,该配置文件被命名nginx.conf ,并放入目录 /usr/local/nginx/conf, /etc/nginx或 /usr/local/etc/nginx。


启动,停止和重新加载配置

要启动nginx,请运行可执行文件。一旦nginx启动,就可以通过调用带-s参数的可执行文件来控制。使用以下语法:

nginx -s 参数名

参数名可以是下列之一:

stop - 快速关闭

quit - 优雅的关闭

reload - 重新加载配置文件

reopen - 重新打开日志文件

例如,要停止nginx进程并等待工作进程完成当前请求,可以执行以下命令:

nginx -s quit

这个命令应该在启动nginx的同一个用户下执行。

直到将重新加载配置的命令发送到nginx或重新启动后,才会应用配置文件中所做的更改。要重新加载配置,请执行:

nginx -s reload

一旦主进程接收到重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果这是成功的,则主进程启动新的工作进程,并将消息发送给旧工作进程,请求关闭进程。否则,主进程回滚更改并继续使用旧配置。旧工作进程接收到一个关闭命令,停止接受新的连接,并继续服务当前的请求,直到所有这样的请求被服务。之后,老员工流程退出。

一个信号也可能被发送到nginx进程的帮助下的Unix工具,如kill实用程序。在这种情况下,信号直接发送给具有给定进程ID的进程。nginx主进程的进程ID默认写入到 nginx.pid目录 /usr/local/nginx/logs或者 /var/run。例如,如果主进程ID是1628,要发送QUIT信号导致nginx的正常关机,请执行:

kill -  QUIT 1628

为了得到所有正在运行的nginx进程的列表ps ,例如,可以按以下方式使用该实用程序:

ps -ax | grep nginx


配置文件的结构

nginx包含由配置文件中指定的指令控制的模块。指令分为简单指令和块指令。一个简单的指令由名称和参数组成,以空格分隔,并以分号(;)结束。一个block指令和一个简单的指令有相同的结构,但是不是以分号结尾,而是用一系列由大括号({和})包围的附加指令来结束。如果一个block指令在大括号内可以有其他的指令,它就被称为一个上下文(例如: events, http, server和 location)。

置于任何上下文之外的配置文件中的指令被认为是在 主要上下文中。在events和http指令驻留在main上下文server 中http,并location在 server。

#符号 后面的其余部分被认为是评论。


提供静态内容

一个重要的Web服务器任务是提供文件(如图像或静态HTML页面)。您将实现一个示例,根据请求,文件将从不同的本地目录/data/www (可能包含HTML文件)和/data/images (包含图像)提供。这将需要编辑配置文件,并 在 两个位置 块的http块内建立一个 服务器块。

首先,创建/data/www目录,并将index.html任何文本内容的 文件放入其中,并创建/data/images目录并放置一些图像。

接下来,打开配置文件。默认的配置文件已经包含了几个server块的例子,大部分都是注释掉的。现在注释掉所有这些块并开始一个新 server块:

http {
    server{
    }
}

通常,配置文件可能包括几个 由它们侦听的端口和 服务器名称区分的server块 。一旦nginx决定哪个进程处理请求,就会根据块内定义的指令 的参数来测试请求头中指定的URI 。 serverlocationserver

将下面的location块添加到 server块中:

location / {
    root / data / www;
}

该location块指定/与来自请求的URI相比较的“ ”前缀。对于匹配请求,URI将被添加到root 指令中指定的路径 ,即为了/data/www在本地文件系统上形成请求文件的路径。如果有几个匹配location块,nginx会选择最长前缀的块。location上面的块提供最短的前缀,长度为1,所以只有当所有其他location 块不能提供匹配时,才会使用该块。

接下来,添加第二个location块:

location / images / {
    root/data;
    }

这将是一个匹配的请求/images/ (location /也匹配这样的请求,但具有较短的前缀)。

所得到的配置server块应该是这样的:

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

    location / images / {
        root/data;
    }
}

这已经是在标准端口80上侦听的服务器的工作配置,并且可以在本地机器上访问 http://localhost/。为了响应以URI开始的请求/images/,服务器将从/data/images目录发送文件。例如,响应 http://localhost/images/example.png请求nginx将发送/data/images/example.png文件。如果这样的文件不存在,nginx会发送一个指示404错误的响应。具有不以URI开始的请求/images/将被映射到该/data/www目录上。例如,响应 http://localhost/some/example.html请求nginx将发送/data/www/some/example.html文件。

要应用新配置,请启动nginx,如果尚未启动,或者将reload信号发送到nginx的主进程,执行:

nginx -s reload

在一些情况下不按预期工作,您可以尝试找出原因access.log和 error.log目录中的文件 /usr/local/nginx/logs或 /var/log/nginx。


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

nginx经常使用的一种方法是将其设置为代理服务器,这意味着服务器接收请求,将它们传递给代理服务器,从中检索响应,并将它们发送给客户端。

我们将配置一个基本的代理服务器,它向本地目录中的文件提供图像请求,并将所有其他请求发送给代理服务器。在这个例子中,两个服务器将在一个nginx实例上定义。

首先,通过向server nginx的配置文件添加一个更多的块来定义代理服务器,其中包含以下内容:

server{
     listen 8080;
    root / data / up1;

    location / {
    }
}

这将是一个简单的服务器,它侦听端口8080(以前,listen自从使用标准端口80以来,该指令没有被指定)并将所有请求映射到/data/up1本地文件系统上的目录。创建这个目录并把index.html文件放进去。请注意,该root指令放置在 server上下文中。root当location选择用于请求的块不包括自己的root指令时使用 这样的指令。

接下来,使用上一节中的服务器配置并对其进行修改,使其成为代理服务器配置。在第一个location块中,将 proxy_pass 指令与参数中指定的代理服务器的协议,名称和端口(在我们的例子中是这样http://localhost:8080):

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

    location / images / {
        root/data;
    }
}

我们将修改第二个location 块,它将当前带有/images/ 前缀的请求映射到目录下的/data/images文件,使其与具有典型文件扩展名的图像的请求匹配。修改的location块如下所示:

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

该参数是一个正则表达式,匹配以.gif。.jpg,或者结尾的所有URI .png。正则表达式应该在前面~。相应的请求将被映射到该/data/images 目录。


当nginx选择一个location块来为请求提供服务时,它首先检查 指定前缀的loaction指令,记住location 最长的前缀,然后检查正则表达式。如果与正则表达式匹配,nginx选择这个 location,否则,选择之前记住的那个。

代理服务器的结果配置如下所示:

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

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

该服务器将过滤以.gif。 .jpg,或者结尾的请求,.png 并将它们映射到/data/images目录(通过将URI添加到 root指令的参数),并将所有其他请求传递给上面配置的代理服务器。

要应用新配置,请reload按前面部分所述将信号发送到nginx。

设置FastCGI代理

nginx可用于将请求路由到运行由各种框架和编程语言(如PHP)构建的应用程序的FastCGI服务器。

使用FastCGI服务器的最基本的nginx配置包括使用 fastcgi_pass 指令而不是proxy_pass指令,fastcgi_param 指令用于设置传递给FastCGI服务器的参数。假设FastCGI服务器可以访问localhost:9000。以上一节中的代理配置为基础,将该proxy_pass指令替换为该指令, fastcgi_pass并将该参数更改为 localhost:9000。在PHP中,SCRIPT_FILENAME参数用于确定脚本名称,QUERY_STRING 参数用于传递请求参数。由此产生的配置将是:

server{
    location / {
        fastcgi_pass localhost:9000;
        fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
        fastcgi_param QUERY_STRING $ query_string;
    }

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

这将建立一个服务器,将除了静态图像请求之外的所有请求路由到localhost:9000通过FastCGI协议运行的代理服务器 。



小说《我是全球混乱的源头》

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程