本指南给出了对nginx的基本介绍,并描述了一些可以完成的简单任务
假设你已经安装好了nginx。本指南介绍如何启动和停止nginx,并重新加载其配置,介绍了配置文件的结构,并介绍如何设置nginx以提供静态内容,如何将nginx配置为代理服务器,以及如何将nginx连接一个FastCGI应用程序。
nginx有一个主进程 master process 和几个工作进程 worker processes 。主进程的主要功能是读取和评估配置,并维护工作进程。工作进程对请求进行实际处理。nginx使用基于事件的模型和依赖于操作系统的机制来高效地在工作进程间分配请求。工作进程的数量在配置文件中定义,如果不配置,nginx会将worker_processes数目调整为与可用的CPU核数相等
nginx及其模块的工作方式是由它的配置文件决定的。默认的名称是 nginx.conf 并且存放在 /usr/local/nginx/conf, /etc/nginx, 或者/usr/local/etc/nginx.目录之中
要启动nginx,请运行可执行文件。一旦nginx启动,就可以通过使用-s参数调用可执行文件来控制它。使用以下语法: 语言
stop - 快速关闭
quit - 正常关闭
reload - 重新加载配置文件
reopen - 重新打开日志文件
例如,要在工作进程完成当前请求之后,停止nginx进程。可以执行以下命令:
执行这个命令的用户应该和启动nginx的用户是同一个
一旦主进程接收到重新加载配置的信号,它将检查新配置文件的语法是否正确,并应用其中提供的配置。
如果成功,则主进程会启动新的worker processes,并将消息发送给旧工作进程,请求关闭它们。旧工作进程接收到一个关闭命令,停止接受新的连接,但是会继续服务当前的请求,直到所有当前的请求都被处理完毕。之后,旧的worker processes退出。
一个信号也可以在Unix工具的帮助下发送给nginx进程,比如kill。在这种情况下,信号直接发送给具有给定进程ID的进程。nginx主进程的进程ID 默认会写入目录/usr/local/nginx/logs or /var/run. 中的nginx.pid。
例如,如果主进程ID是1628,要发送QUIT信号来正常关闭nginx,请执行:
要获取所有正在运行的nginx进程的列表,可以使用ps,例如,以下列方式:
nginx包含的模块由配置文件控制。指令分为简单指令和块指令。一个简单的指令由用空格分隔的名称和参数组成,并以分号(;)结束。一个block指令与简单的指令有相同的结构,但不是以分号结束,而是以一系列由大括号({ 和 })包围的附加指令结束。如果一个block指令在大括号内可以有其他的指令,它就被称为一个 上下文contexts (例如:events,http,server和location)。置于任何 contexts 之外的配置文件中的指令被认为是在 主要上下文main contexts 中。 events 和 http 指令在 main contexts 中, server 在 http中 , 并且 location 在 server中 .
Web服务器的一个重要任务是提供文件访问(如图像或静态HTML页面)。
您将实现一个示例,根据请求,文件将从不同的本地目录/data/www(包含HTML文件)和/data/images(包含图像)。这将需要正确的编辑配置文件。
1 第1步:准备静态文件
创建 /data/www 目录,并将带有文本内容的index.html文件放入其中,并创建/data/images目录并放置一些图像。
2 第2步:编辑配置文件
接下来,打开配置文件。默认的配置文件已经包含了几个服务器块的例子,大部分注释掉了。现在注释掉所有这些块,并启动一个新的服务器块
一般来说,配置文件可能包含几个 server 模块,
这些 server 模块可以通过它们侦听的端口和名称来区分。一旦nginx决定哪个server 处理请求,就会根据server块内定义的 location指令的参数来尝试检验头中指定的URI。将以下位置块添加到服务器块中:
location / {
root /data/www;
}
该location 指定与来自请求的URI相比较的“/”前缀。为了匹配请求,URI将被添加到根指令中指定的路径,即/data/www,(所请求文件的路径)。
如果有几个匹配的location块,则nginx会选择最长前缀的块。上面的location块提供了最短的前缀,长度为1,所以只有当所有其他位置块都不能提供匹配时,才会使用这个块。接下来,添加第二个位置块:
location /images/ {
root /data;
}
它将匹配以 /images/ 开始的请求。到目前,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错误的响应。 URI不以/images/ 开头的请求将映射到/data/www目录。例如,为了响应http://localhost/some/example.html请求,nginx将响应/data/www/some/example.html文件。
如果不能按预期工作,可以尝试在 access.log 和 error.log 文件中找出原因。在目录 /usr/local/nginx/logs 或者 /var/log/nginx .
nginx经常使用的一种方法是将其设置为代理服务器。
我们将配置一个基本的代理服务器,两个服务器将在一个nginx实例上定义。首先,通过向nginx的配置文件中添加一个server 块来定义 服务器A ,其中包含以下内容:
server {
listen 8080 ;
root /data/up1 ;
location / {
}
}
server {
location / {
proxy_pass http://localhost:8080 ;
}
location /images/ {
root /data ;
}
}
服务器B 将过滤以.gif,.jpg或.png结尾的请求,并将它们映射/data/images目录(通过将URI添加到root指令的参数),并将所有其他请求传递到上面配置的 服务器A 。
nginx可用于将请求路由到运行由各种框架和编程语言(如PHP)构建的应用程序的FastCGI服务器。
使用FastCGI服务器的最基本的nginx配置包括使用 fastcgi_pass 指令,以及 fastcgi_param 指令来设置传递给FastCGI服务器的参数。
假设FastCGI服务器可以在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/images ;
}
}