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;
这个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目录。
比如,对于访问恳求:
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)$。
这个正则表达式才能匹配所有以.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的服务器上。