Beginner’s Guide
今天下午没有太多的事。就翻译了nginx官方的文章,比较仓促。语言上没有怎么雕琢。我会逐步完善。欢迎大家指正。
问号部分因为本人词穷,一时不知道用汉语表达,所以先空着。(手指骨折,单手打字,熬了好几个小时,所以文字漏洞应该比较多,找个时间再优化吧!)。
nginx官网文章地址:http://nginx.org/en/docs/begi...。
这个指导对nginx做了一个基础的的介绍和用nginx可以做的一些简单的任务,确保读者的的机器上已经安装了nginx,如果没有安装,请看安装nginx页面,这个指导描述了怎样开启,关闭和重启它的配置,解释配置文件的结构和描述怎样配置nginx的非静态服务,怎样配置nginx作为一个代理服务器和怎样把nginx与fastcgi应用连接起来。
nginx有一个主进程和一些worker进程,主进程的主要目的是读取和执行配置和确保worker进程正常运行,worker进程处理真实的请求,nginx雇佣event-based模式和系统独立的机制去有效分发请求给worker进程。worker进程的数量被定义在配置文件中和被设置好的配置文件,或者自适应cup的核数。
nginx的工作方式和模块被确定在配置文件,配置文件的的默认是名字是nginx.conf,放在/usr/local/nginx/conf, /etc/nginx, 或者/usr/local/etc/nginx目录下。
Starting, Stopping, and Reloading Configuration
运行可执行的文件,开启nginx,一旦nginx被开启,nginx通过可执行 -s parameter 控制。用以下的语法:
nginx -s singal
以下是可以用到的信号:
stop -快速关闭nginx
quit - 平滑的关闭nginx
reload - 重新加载配置文件
reopen - 重新打开日志文件
比如,停止worker进程去结束正在服务的外部请求。以下的命令能被执行:
nginx -s quit
注:这个命令的执行应该与开启nginx的用户是同一用户
被改变配置文件只有到重新加载配置后才能被应用,重启配置,执行以下命令:
nginx -s reload
一旦主进程收到重启配置的信号,nginx会检查新配置文件的语法的正确性和试着应用被提供的配置,如果成功,主进程会开启新的worker进程和发送一下信息到老的worker进程,要求老的worker进程关闭,否则,主进程将会回滚到改变前的配置和继续用老配置执行。老worker进程收到关闭的命令,停止接受新的连接和继续执行当前的请求直到所有的的请求被执行完毕。之后,老的worker进程退出。
对nginx进程发送的信号也可用unix工具的帮助。比如kill工具。这类信号被直接发送到一个被给定的进程ID的进程。nignx主进程的进程ID被默认写到nginx.pid文件中。此文件在/usr/local/nginx/logs 或者/var/run文件下。例如,如果主进程ID是1628,对nginx发送Quit信号关闭nginx。执行以下命令:
kill -s Quit 1628
获取所有正在运行的nginx进程,可以用ps工具,比如,用以下方式:
ps -ax | grep nginx
想要获取发送到nginx的更多信号,请看controller nginx
配置文件的结构
nginx是由在配置文件中被特定的指令控制的模块组成的。指令被划分成一些简单的指令和指令模块。一个简单的指令是由名字和以空格分离的参数组成,以”;”结尾。指令块有同样结构作为一个简单的指令。但是代替“;”,指令块是用”{}”结尾的。如果一个指令块内部有其他的指令。它被叫做context(例如:events,http,server,location)
运行静态内容
web 服务器的一个重要的任务是运行文件(比如 图片或者静态html页面)。你可以实现一个例子,通过一个请求。文件将会通过不同的本地文件夹分发运行:/data/www (可能包括html文件) and /data/images (包含图片)。这要求编辑配置文件和etting up of a server block inside the http block with two location blocks.
首先,建立/data/www目录,并且放一个index.html文件(可以写入任何内容)在目录下,建立/data/images目录来存放图片。
下一步,打开配置文件,默认的配置文件已经包括了几个server块,大部分已经注释了,现在注释所有的区块并且开始创建一个新的sever块。
http {
server {
}
}
通常,配置文件可能包括多个server,这些server可以通过监听的端口和server_name区分开。一旦,nginx确定是哪个server来处理request ???????
添加以下location区块到sever区块中:
location / {
root /data/www;
}
以上的location块指定"/"前缀与来自于request中的url做对比,对于匹配上的request,url将被添加到root指令指定的路径上去,这里是/data/www, ????。如果匹配上了好几个location区块,nginx将选择最长的那个前缀,长前缀location的优先级在最短前缀之上,所以如果所得的loaction区块都匹配失败,那么最短的loaction区块将被使用。
下面,添加第二个location区块:
location /images/ {
root /data;
}
想要所有的请求匹配上/images/(loaction / 也可以匹配上所有的request,但是它有最短的前缀)
配置文件的最终样子应该像这样:
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
这已经有一个监听标准80端口的服务器配置和一个可以通过http://localhost/访问的本地机器。对于以/images/开始的url的request的响应,服务器将发送来自/data/images目录下的文件。比如,对于http://localhost/images/examp...请求的回应,nginx将发送/data/images/example.png文件。如果文件不存在,nginx将发送404错误的回应指示。没有以/images/开始的url请求将被映射到/data/www目录下,例如,对于http://localhost/some/example...的请求,nginx将发送/data/www/some/example.html文件作为回应。
为了使用新的配置文件,启动还有启动的nginx服务,或者通过执行以下命令发送reload信号到nginx的主进程中:
nginx -s reload
在一些情况下,nginx不能工作,你可以试着在 /usr/local/nginx/logs或者/var/log/nginx目录下的access.log和error.log日志文件中找出原因
Setting Up a Simple Proxy Server
nginx中最常用的一个是功能是把nginx作为代理服务器,这意味着一个服务器接收request,把request传给给代理服务器,从代理服务器回收响应信息,然后将这些信息发送给客户端。
我们将配置一个基础的代理服务器,它用于处理图片请求(图片来自本地目录)和发送所有其他的request到代理服务器。在这个例子中,两个server将被定义到一个单独的nginx实例。
首先,通过添加一个sever块到nginx配置中来定义proxy server,配置文件内容如下:
server {
listen 8080;
root /data/up1;
location / {
}
}
这个简单的server监听的是8080端口,并且映射所有的请求到/data/up1目录下。创建/data/up1目录,并将index.html文件放到这个目录中,要注意的是root指令要放到server代码块中,???。
下一步,用之前的server配置,把sever配置修改成一个proxyserver配置。在第一个location块中,?用proxyserver指定的参数填充proxy_pass指令(在我们这个例子中,是http://localhost:8080)
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
我们将修改第二个loaction块,它把带有 /images/ 前缀的请求映射到到/data/images目录下,为了匹配带有特殊扩展名的图片请求,修改的location应该像这样:
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
这个参数是一个匹配所有以.gif,.jpg,.png结尾url的正则表达式。正则表达式应该优先于~匹配。符合的请求将被映射到/data/images目录下。
当nginx选择一个loaction去处理一个请求,它首先会检查指定前缀的loaction指令,记忆最长前缀的loaction,然后检查正则表达式。如果匹配到正则表达式,nginx选择这个loaction,??
最终的proxy server配置文件应该是这样的:
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
这个server过滤以.gif, .jpg, .png 结尾的请求,然后将他们映射到 /data/images目录下,把他的请求传给上面配置我呢间中的proxy server。
为了应用新的配置文件,为了说明前面的描述,发送reload信号给nginx
这还有很多被用于配置proxy连接的指令 more
Setting Up FastCGI Proxying
nginx被用于指定request到用各种框架和例如php语言的程序的fastcgi服务器。
大多数基本的fastcgi的nginx配置用fastcgi_pass指令代替了proxy_pass 指令,并且fastcgi_param设置参数发送到fastcgi服务上,假设fastcgi服务是可以通过localhost:9000可以访问的,把前面内容的proxy配置文件作为一个基础。用fastcgi_pass指令代替proxy_pass 指令,并且设置proxy_pass为localhost:9000,在php中,SCRIPT_FILENAME 参数被用于确定脚本名称,QUERY_STRING 参数被用于传递request参数,最终的配置文件应该是:
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;
}
}
这个配置文件将把所有请求(除了静态图片的request)通过fastcgi协议 打到运行localhost:9000的代理服务器
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。