记录一下查看nginx官网的翻译内容,翻译有误请指正。
配置文件结构介绍
nginx配置文件由特定指令控制的模块组成。指令分为简单指令和块指令。 一个简单的指令由名字和参数(由空格分隔)组成,以分号(;)结尾。 块指令具有与简单指令相同的结构, 但它不是以分号结尾,而是一组指令集合由大括号({和})包围而结束的。 如果一个块指令在大括号中包含其他指令,则称为上下文(如 , , , 和). 。
放在配置文件中任何上下文外部的指令都被认为是在 上下文中。 events
和http
指令应该放在main
上下文 , server
放在http,
location
放在 server
里。
#
号之后的其余部分被视为注释。
提供静态内容的服务
一个重要的web服务器任务是提供文件(如图像或静态HTML页面)。 下面示例演示nginx根据请求,将从不同的本地目录提供文件服务: /data/www
( 可能包含HTML文件 ) 而data/images
(包含图片) 。这就需要编辑配置文件, 块里添加一个 块,并且 块包含两个 块。
首先,创建 /data/www
目录后放进 index.html
文件,创建 /data/images
目录后放进需要向外提供服务的图片。
接下来,打开配置文件。 默认的配置文件已经包含了服务器块的几个示例,大部分都被注释掉了。 现在,注释掉所有这些块,并启动一个新的服务器块:
http { server { }}
通常,配置文件可能包括几个服务器块,这些服务器块由它们所的端口和。 一旦nginx决定哪个服务器处理一个请求, 它就会根据服务器块中定义的 location
指令的参数测试请求头中指定的URI。
将以下 location
块添加到 server
块 :
location / { root /data/www;}
这个location
块指定 “/
”前缀与请求的URI相比较的。 对于匹配的请求, URI将被添加到 指令中指定的路径,即 /data/www
,以形成本地文件系统中请求文件的路径。 如果有几个匹配的location
块,nginx选择前缀最长的一个。 上面的location块提供了长度为1的最短前缀,因此只有当所有其他location块都不能提供匹配时,才会使用这个块。
接下来,添加第二个location块:
location /images/ { root /data/images;}
它将匹配以 /images/
开头的请求 ( location /
也匹配这样的请求,但是前缀更短,优先权相对/images/
低).
server
块的最终配置应该是这样的:
server { location / { root /data/www; } location /images/ { root /data/images; }}
对于以 /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的主进程,方法如下:
nginx -s reload
备注: 如果无法像预期的那样工作,您可以尝试在/usr/local/nginx/logs
或 /var/log/nginx
目录中的access.log和error.log文件中找出原因
建立一个简单的代理服务器
nginx的常见用途之一是将其设置为代理服务器,这意味着服务器接收请求,将它们传递给代理服务器,从代理服务器检索响应,并将它们发送给客户机。
示例配置一个基本的代理服务器,它使用本地目录中的文件为图像请求提供服务,并将所有其他请求发送到代理服务器。 在本例中,两个服务器将在单个nginx实例上定义。
首先,通过向nginx配置文件中添加一个服务器块来定义代理服务器,该服务器块的内容如下:
server { listen 8080; root /data/up1; location / { }}
这是一个简单的服务器,它监听端口8080(以前,由于使用了标准端口80,所以没有指定listen指令),并将所有请求映射到本地文件系统上的 /data/up1
目录。 创建这个目录并将index.html文件放入其中。 注意,此处的root
指令放在server
上下文中。 当为服务请求而选择的location
块不包含自己的root
指令时,使用 server
的root指令。
接下来,使用上一节中的服务器配置并将其修改为代理服务器配置。 在第一个location
块中, 使用 指令配置协议、代理服务器的名称和端口。如下例子所示:
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data/images; }}
在第二个location块中,它当前将带有 /images/
前缀的请求映射到 /data/images
目录下的文件,修改后将变成与具有典型文件扩展名的图像请求匹配。 修改后的 location
块如下所示:
location ~ \.(gif|jpg|png)$ { root /data/images;}
参数是一个正则表达式,匹配所有以.gif、.jpg或.png结尾的uri。 正则表达式的前面应该加上 ~
。 相应的请求将映射到/data/images
目录。
当nginx选择一个 location
块来服务一个请求时,它首先检查指定前缀的 指令,记录带有最长前缀的 ,然后检查正则表达式。 如果与正则表达式匹配,nginx会选择这个 location
,否则,它会选择前面记录的location
。
代理服务器的最终配置如下所示:
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; }}
此服务器将筛选以.gif、.jpg或.png结尾的请求,并将它们映射到 /data/images
目录,并将所有其他请求传递到上面配置的代理服务器。
要应用新的配置,按照前面部分的描述将重新加载信号发送到nginx。
更多的指令来进一步配置代理连接查看。
建立FastCGI代理
nginx可用于将请求路由到FastCGI服务器,后者运行使用各种框架和编程语言(如PHP)构建的应用程序。 使用FastCGI服务器最基本的nginx配置包括:使用 指令而不是proxy_pass
指令,以及 指令来设置传递给FastCGI服务器的参数 。 假设FastCGI服务器可以在localhost:9000上访问。 以上一节中的代理配置为基础,用fastcgi_pass
指令替换proxy_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/images; }}
这将设置一个服务器,该服务器通过FastCGI协议将除静态图像请求之外的所有请求路由到在localhost:9000上操作的代理服务器。
翻译自: