Nginx中文配置文档1-新手引导

本文主要翻译一部分常用的Nginx配置文档
环境:
Ubuntu14.04 x64
Nginx1.4.6

参考内容:
官方文档:http://nginx.org/en/docs/
相关概念:http://blog.hylstudio.cn/archives/380

nginx的初步使用

安装:配置好apt源后,执行sudo apt-get install nginx即可
启动:sudo service nginx start
重启:sudo service nginx restart
关闭:sudo service nginx stop
查看状态:sudo service nginx status

默认目录

网站根目录:/usr/share/nginx/html
日志目录:/var/log/nginx
配置文件目录:/etc/nginx

配置文件目录中的
├── sites-available
├── sites-enabled
这两个文件夹和apache配置同理,可以配置多个站点。使用软连接生效。

原文:http://nginx.org/en/docs/beginners_guide.html

本引导提供了nginx基本的介绍和描述以,并提供一些可以用来练习的任务。假设nginx已经在读者的机器上装好了,如果还没有安装,请参考安装指导。这个指导描述了如何启动和停止nginx、重新加载配置文件、解释了配置文件的结构、描述了如何设置nginx用来提供静态内容的服务、如何配置nginx作为代理服务器以及如何用nginx连接FastCGI应用程序。

nginx有一个主进程和多个worker进程,主进程的主要任务是读取加载配置和维持worker进程,Worker进程负责处理实际的网络请求。 nginx使用了基于事件的模型和操作系统相关原型来高效在worker进程中分发请求。worker进程的数量定义在配置文件中,可能是固定的数值或自动的根据可用的CPU核心数调整(参见worker_processes)。

nginx和模块的运行方式由配置文件决定。默认情况下,配置文件名为nginx.conf,放在/usr/local/nginx/conf, /etc/nginx, 或/usr/local/etc/nginx

启动、停止、重新加载配置

以非服务形式启动:
想要启动nginx,执行可执行文件即可,一旦nginx启动,它可以通过调用可执行文件和-s参数来控制,语法如下:
nginx -s signal
在signal的位置可以是以下几种:

stop — 快速关闭
quit — 平滑的关闭
reload — 重新加载配置文件
reopen — 重新打开日志文件

例如,想等待worker处理完当前请求再退出可以这样写:
nginx -s quit
这个命令可以用启动nginx的同一个用户执行。
配置文件的更改不会立即生效,直到执行reload命令或重启nginx,命令如下:
nginx -s reload
一旦主进程收到重新加载配置文件的新号,它会检查新的配置文件语法是否正确并且尝试更新配置。如果成功了,主进程会开启新的worker进程并且向旧的worker进程发送关闭信号来重新加载配置文件。否则,主进程会回滚到之前的状态使用旧的配置继续工作。旧的worker进程接收到关闭信号后,停止接收新的连接请求并把当前的请求处理完,然后旧的进程会结束。

信号也可以在Unix工具的帮助下被发送给nginx,例如kill命令。在这种情况下信号会通过提供的PID直接发送给一个进程,这个PID默认被写入到了名为nginx.pid的文件中,默认情况下存在/usr/local/nginx/logs或者/var/run。例如如果主进程的PID是1628,想要发送QUIT信号的话,执行下面的命令:

kill -s QUIT 1628
想要获得所有运行中的nginx进程,可以使用ps命令如下:

ps -ax | grep nginx
想要知道更多的信息,请查看Controlling nginx章节

配置文件的结构

nginx由多个模块组成,这些模块通过配置文件中的指令控制。指令分为简单指令和块指令,一个简单指令由空格分隔的名称和参数组成,结尾是英文的分号(name parameter [parameter2];)。块指令和简单指令结构一样,但是最后不是分号,而是附加了一系列大括号括起来的附加指令。如果一个块指令可以在大括号中包含其他的指令,那么它可以被叫做上下文,例如events, http, server, and location。

指令放在配置文件中上下文之外,event和http指令属于主上下文、server属于http、location属于server。

以#开头的行为注释

提供静态内容服务

一个web服务器重要的任务就是提供文件(比如图片或静态的HTML页面)服务,你将会实现一个例子,web服务器会基于请求,从本地不同的文件夹中提供文件服务。/data/www (这里放着HTML文件)和 /data/images (包含了图片文件). 这要求你编辑配置文件并在http块下的server块中设置设置两个location块。
首先,创建 /data/www文件夹并且放进一个index.html文件,创建/data/images文件夹并且放入一些图片。

接下来,打开配置文件,默认的配置文件已经在server块写好了几个例子,大多数都被注释掉了。

一般来说,配置文件可能包括好几个server块用来区分不同的监听端口和服务器名称。一旦nginx决定哪个进程处理请求,它会测试在URI头部指定的参数是否和server块中location指令定义的参数不一致。
在server块下添加下面的location块:

这个location块指定要比较开头为“/”的URI请求。为了匹配请求,URL需要添加指定相对于根的路径。如果有多个location块匹配到了的话,nginx会选择匹配最长前缀的location。上面的location块指定了一个最短的前缀,所以当所有其他的location匹配失败的时候,这个location将会被使用。

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

它会匹配开头为/images/的请求 (location / 也匹配这个请求,但是它是最短的前缀匹配).

最终的结果应该像下面这样。

这已经是一个可用的配置文件了,监听在默认的80端口,可以通过http://localhost/进行访问。
在所有开头为/images/的请求中,服务器会从/data/images文件夹中发送请求的文件。
例如:请求http://localhost/images/example.png的话,nginx会返回/data/images/example.png文件。如果这个文件不存在,nginx会返回404错误。

所有不以/images/开头的请求会被匹配到/data/www文件夹。
例如:请求http://localhost/some/example.html的话,nginx会返回/data/www/some/example.html文件。

为了应用新的设置,请重启nginx:
如果出现了某些异常,你可以尝试在access.log中找到原因,这个文件默认在/usr/local/nginx/logs或/var/log/nginx.

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

一个常见的使用场景是nginx作为代理服务器,这意味着nginx服务器接收请求,转为其他服务器,接收结果后再发送给客户端。

我们接下来将会设置一个基本的代理服务器,这个服务器接收图片请求从本地获取文件,其他所有的请求会转给另一个服务器,在这个例子里,所有的服务将会被定义在一个nginx实例中。

首先,通过增加唉一个server块定义一个代理服务器,如下:

这将是一个监听8080端口的简单服务器并且匹配所有请求到/data/up1本地文件夹。创建这个文件夹并且放入index.html文件。注意root指令是放在server上下文下的,当备选location块的路径不包含自己的root指令的时候使用这样的root指令。

接下来,使用上一节的server配置,并更改它作为代理服务器。在第一个location块,增加proxy_pass指令,同时指定被代理服务器的协议、名称、端口。

我们要更改第二个location块的内容,它现在是匹配所有以/images/开头的请求,在/data/images文件夹寻找文件。想让它匹配常见的图片文件,更改成下面这样即可:

这个参数是一个正则表达式,匹配所有以.gif, .jpg, or .png结尾的请求,一个正则表达式应当在前面加个~符号,相应的请求会被匹配到/data/images文件夹。

当nginx选择一个location块处理一个请求时,它首先检查指定了前缀的location指令,记住最长匹配前缀的location,然后检查使用正则表达式的location。如果这里匹配到了使用正则表达式的location,那么nginx会选择使用正则表达式的location,否则就使用之前记住的那个。

最终的配置文件结果如下:

这个服务器会过滤所有结尾是.gif, .jpg, or .png的图片请求并匹配到/data/images文件夹(通过与root指令的参数拼接)并且转发所有其他的指令到上面配置的服务器。

为了应用新的设置,请重启nginx。

这里有更多的指令可能之后会在配置代理连接时用到。

设置FastCGI代理

nginx可以被用来作为路由请求多种框架和语言实现应用的FastCGI服务器,比如PHP。

和FastCGI运行最基本的配置是用fastcgi_pass指令代替proxy_pass指令。并且可以使用fastcgi_param指令设置转发给FastCGI服务器的参数。假设FastCGI服务器在localhost:9000。基于之前设置的代理服务器,用fastcgi_pass指令代替proxy_pass指令,并且更改参数为localhost:9000替换。在PHP中,SCRIPT_FILENAME蚕食是用来确定脚本名称的,QUERY_STRING参数是用来传递查询参数的。结果如下:

这样就设置了一个可以使用FastCGI协议转发所有非图片资源请求到localhost:9000的路由。

0 Comments
Leave a Reply