server{

通常来说,配置文件可能包含几个server区块,它们拥有不同的窃听端口和servername。

一旦nginx决定好使用哪一个server处理用户恳求,nginx测试恳求首部的URI数组,

将它与server区块中的location指令定义的参数进行对比。

在server区块中添加如下location区块:

location/{

root/data/www;

这个location区块指定“/”前缀,并将它和恳求首部中的URI进行比较。对于匹配的恳求,

URI将被添加到root指令所指定的路径的末尾,这儿root指令定义的路径是/data/wwwlinux模拟,

这样产生用户所恳求的文件的本地路径。倘若有多个location区块与恳求的URI匹配,nginx

选择其中前缀最长的那种location区块。

这儿的location提供了最短的前缀,宽度为1,所以只有当所有其他location区块都匹配失败,

就会选择这个location区块。

下一步,添加第二个location区块:

location/images/{

root/data;

linux启动nginx命令_ location 指令使用 _nginx server 配置

这个location区块才能匹配URI以/images/起始的恳求(location/也能匹配这样的恳求,但它的

前缀比/images/短,所以优先匹配location/images/)

我们的server区块的配置是这样的:

server{

location/{

root/data/www;

location/images/{

root/data;

这早已是一个可工作的服务配置,nginx窃听于80端口,可通过本地访问。

对于URI以/images/起始的恳求,nginx会将/data/images目录中的文件发送给顾客端。

比如,对于访问恳求:

,nginx会发送/data/images/example.png文件。假如这个文件不存在,nginx会发送404error响应给顾客端。

对于URI不是以/images/起始的恳求,会被映射到/data/www目录。

比如,对于访问恳求:

nginx server 配置 _ location 指令使用 _linux启动nginx命令

linux查看操作系统,nginx会发送

/data/www/some/example.html文件。

更改了配置文件以后,为使新配置生效,可重启nginx,或则使用nginx命令发送reload讯号给nginx主进程:

nginx-sreload

Note:

当出现了错误,请查看access.log和error.log文件找寻可能的诱因。

这两个文件的位置若果是yum安装,在/var/log/nginx目录下,假如是编译安装,

默认在prefix/logs/目录下。

将nginx配置为简单的代理服务器

——————————--

nginx常常被拿来设置成一个代理服务器,这时nginx接收恳求,之后将恳求转发给被代理的前端服务器,并从前端服务器拿回响应报文,之后发送给顾客端。

我们将配置一个基础的代理服务器,服务器对于image文件的恳求选择从本地响应,对于其他恳求,服务器转发给一个前端服务器。在这个示例中,这两个服务器将被定义在同一个nginx实例之上。首先定义前端服务器,添加一个server区块定义:

server{

listen8080;

root/data/up1;

location/{

这个服务器窃听在8080端口(在前一小节的配置中,我们并没有指定listen指令,nginx默认使用80端口),并将所有恳求映射到本地的/data/up1目录中。创建/data/up1目录,并在其中创建一个index.html文件。注意root指令被放置于servercontext中,这样只有当一个没有包含自己的root指令的location区块被选中时,这个server区块中的root指令才能被使用。

[root@lamp1nginx]#mkdir/data/up1[root@lamp1nginx]#echo”backendserver”>/data/up1/index.html

下一步,承袭前一小节的配置,将其更改为一个代理服务器的配置。在第一个locaiton区块中加入proxy_pass指令,指定前端服务器的:合同、主机名、端口(本例中,指定为:8080):

server{

location/{

proxy_pass:8080/;

location/images/{

root/data;

我们将更改第二个location区块,目前这个location区块将URI以/images/起始的恳求映射到

/data/images目录。将其更改为才能匹配对于典型图象文件的恳求,这种图象文件有典型的后缀名:

location~.(gif|jpg|png)${

root/data/images;

在“location~.(gif|jpg|png)$”语句中,~EXPRESSION表示使用正则表达式匹配,

正则表达式为:.(gif|jpg|png)$。

nginx server 配置 _ location 指令使用 _linux启动nginx命令

这个正则表达式才能匹配所有以.gif,.jpg,.png结尾的URI。匹配的恳求将被映射到/data/images目录中。

当nginx选择以那个location区块匹配恳求时,nginx首先检测指定了prefix前缀的location指令,nginx会记住被匹配的拥有最长prefix的location指令,之后开始检测正则表达式。

假如有一个正则表达式被匹配了,nginx会选择这个正则表达式的location,假如没有正则表达式被匹配,它选择之前记下的那种拥有最长前缀的location。

最终我们的配置文件是这样的:

server{

location/{

proxy_pass:8080/;

location~.(gif|jpg|png)${

root/data/images;

nginx服务器会过滤以.gif,.jpg,.png为结尾的URI的恳求,将它们映射到/data/images目录中(将URI添加到root指令的参数前面),并将其他恳求转发给前端服务器。

使新的配置生效,执行nginx-sreload。

在另一个Linux虚拟机中测试访问:

[root@vm1nginx]#curlbackendserver

在浏览器中访问:

关于配置代理联接,更深入的阐述可参考:

设置FastCGI代理

————————

nginx可用于将恳求路由到FastCGI服务器linux启动nginx命令,在FastCGI服务器上运行着以各类框架和编程语言建立的应用,例如PHP。

配置nginx与FastCGI服务器协同工作,最基础的配置包括:使用fastcgi_pass指令取代proxy_pass指令,并使用fastcgi_param指令设置传递给FastCGI服务器的参数。

假定FastCGI服务器可通过localhost:9000访问,我们以上面的配置为基础,首先将proxy_pass指令替换为fastcgi_pass指令,指令参数更改为localhost:9000。在PHP中,SCRIPT_FILENAME参数被用于决定脚本的名称linux启动nginx命令,QUERY_STRING参数被用于传递恳求参数。最终的配置如下:

server{

location/{

fastcgi_passlocalhost:9000;

fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;

fastcgi_paramQUERY_STRING$query_string;

location~.(gif|jpg|png)${

root/data/images;

通过这个配置,对于静态图形文件的恳求由本地服务响应,除此之外的恳求将通过FastCGI合同

被路由到工作于localhost:9000的服务器上。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复