nginx配置文件的基本配置

记录一下查看nginx官网的翻译内容,翻译有误请指正。

配置文件结构介绍

nginx配置文件由特定指令控制的模块组成。指令分为简单指令和块指令。 一个简单的指令由名字和参数(由空格分隔)组成,以分号(;)结尾。 块指令具有与简单指令相同的结构, 但它不是以分号结尾,而是一组指令集合由大括号({和})包围而结束的。 如果一个块指令在大括号中包含其他指令,则称为上下文(如 events, http, server, 和location). 。

放在配置文件中任何上下文外部的指令都被认为是在 main 上下文中。 eventshttp指令应该放在main上下文 , server放在http, location 放在 server 里。

#号之后的其余部分被视为注释。

 提供静态内容的服务

一个重要的web服务器任务是提供文件(如图像或静态HTML页面)。  下面示例演示nginx根据请求,将从不同的本地目录提供文件服务: /data/www ( 可能包含HTML文件 )  而data/images (包含图片) 。这就需要编辑配置文件, http块里添加一个 server 块,并且 server 块包含两个 location 块。

首先,创建 /data/www 目录后放进 index.html 文件,创建 /data/images 目录后放进需要向外提供服务的图片。

接下来,打开配置文件。 默认的配置文件已经包含了服务器块的几个示例,大部分都被注释掉了。 现在,注释掉所有这些块,并启动一个新的服务器块:

http {
    server {
    }
}

通常,配置文件可能包括几个服务器块,这些服务器块由它们所侦听的端口和服务器名称区分。 一旦nginx决定哪个服务器处理一个请求, 它就会根据服务器块中定义的 location指令的参数测试请求头中指定的URI。

将以下 location块添加到 server 块 :

location / {
    root /data/www;
}

这个location块指定 “/”前缀与请求的URI相比较的。 对于匹配的请求, URI将被添加到 root 指令中指定的路径,即 /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块中, 使用 proxy_pass 指令配置协议、代理服务器的名称和端口。如下例子所示:

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块来服务一个请求时,它首先检查指定前缀的 location 指令,记录带有最长前缀的 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配置包括:使用 fastcgi_pass 指令而不是proxy_pass指令,以及 fastcgi_param 指令来设置传递给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上操作的代理服务器。

 

 

翻译自:http://nginx.org/en/docs/beginners_guide.html

 

转载于:https://my.oschina.net/jennerlo/blog/3016665

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值