nginx教程-----开始指导

这份知道提供了对nginx的一个基本的介绍并且描述了一些能用它工作的一些简单的任务.它假设nginx已经安装在了读者的机器上.如果没有,请阅读<安装nginx>教程.这份知道描述了如何启动和停止nginx,并且加载它的配置,解释配置文件的结构并且描述如何建立nginx来服务静态内容,如何配置nginx作为一个代理服务,并且如何使用一个FastCGI应用来连接。


nginx有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,并且维持工作进程。工作进程做实际请求的处理。nginx使用事件驱动模型和OS依赖机制来在工作进程中高效的分发请求。工作进程的数量定义在配置文件里并且可以通过一个给定的配置来固定或者自动调整到可用的CPU核心的数量(阅读<工作进程>)。


nginx和它的模块工作的方式由配置文件决定。默认的,配置文件的名称是nginx.conf并且位于/usr/local/nginx/conf,/etc/nginx,或者/usr/local/etc/nginx。


1.开始,停止和加载配置

为了开始,运行可执行文件。一旦nginx开始了,它可以通过引用带-s参数的可执行文件来控制。使用下列语法:

nginx -s signal

其中signal可以是以下中的一个:

  • stop ----- 快速关闭
  • quit  ----- 优雅的关闭
  • reload ----- 重载配置文件
  • reopen ----- 重新打开日志文件
例如,为了在工作进程完成它的当前服务请求后停止nginx进程,下列的命令可以执行:
nginx -s quit
这个命令应该在启动nginx的相同用户下执行。

在配置文件所作的更改将不会被应用直到重载配置的命令被发送到nginx或者它重启。为了重载配置,执行:
nginx -s reload
一旦主进程接收到了重载配置的信号,它检测新配置文件的语法验证并且尝试应用它。如果成功了,主进程启动新的工作进程并且给旧的工作进程发送消息来要求它们关闭。否则,主进程回滚修改并且继续以旧的配置运行。旧的进程,接收到关闭命令后,停止接受新的连接并且继续服务当前请求知道所有这些请求都服务完毕。在那之后,工作进程将会退出。

一个信号也可以在例如kill套件这样的Unix工具的帮助下发送给nginx进程。在这个例子中,一个信号被使用一个个定的进程ID直接发送给了一个进程。nginx主进程的进程ID,默认的,被记录在/usr/local/nginx/logs或/var/run目录下的nginx.pid中。例如,如果主进程ID是1628,为了发送一个导致nginx优雅关闭的信号,执行:
kill -s QUIT 1628
为了得到所有运行中的nginx进程的列表,可以使用ps功能,例如,以下面这种方式:
ps -ax | grep nginx
想要了解更多关于发送信号到ngxin的信息,请阅读<控制nginx>

2. 配置文件结构

nginx由在配置文件中指定的指令控制的模块组成。指令被分成了简单的指令和指令块。简单的指令由名称和参数组成,使用空格和分号(;)分隔。指令块和简单指令一样的结构,但不是分号,它由一套被花括号({和})包围的指令结束。如果一个指令块有其他的指令在花括号内部,他就被称为上下文(例子:events,http,server,和location)

在任何上下文之外防止的配置文件中的指令被认为是在主上下文里。events和http在main上下文里,server在http里,location在server里。

在#号后面的行被认为是注释。

3. 提供静态内容

web服务的一个重要的任务就是提供文件(例如图片或者静态HTML页面)。你将在这里实现一个例子,根据请求,文件将会从不同的本地路径中提供:/data/www(它也可能包含HTML文件)和/data/images(包含图片)。这将需要配置文件的编辑和在http块里使用2个location块来设置一个server块。

首先,创建一个/data/www路径并且将一个带有任何内容index.html文件放在里面,并且创建/data/images路径,将一些图片放在里面。

下一步,打开配置文件。默认的配置文件已经包含了一些server块的例子,大部分注释掉了。对现在来说,注释掉所有这些块并且开始一个新的server块:
http {
    server {
    }
}
通常,配置文件也许包括几个server块,它们由它们监听的端口和服务名称来区别。一旦nginx决定了那个server处理请求,它测试在请求头指定的URI来对应定义在server块里的location指令的参数。

添加下列location块到server块:
location / {
    root /data/www;
}
这个location块指定“/”前缀来与请求中的URI比较。为了匹配请求,URI将会被添加到指定在root指令的路径下,那就是说,到/data/www下,为了形成在本地文件系统中到请求文件的路径。如果这里有几个location块都匹配,nginx选择拥有最长前缀的那个。上述的location块提供了最短的前缀,所以除非所有其他location块都匹配失败,这个块才会被使用。

下一步,添加第二个location块:
location /images/ {
    root /data;
}
它将会匹配一个以/images/开头的请求(location / 同样匹配这样的请求,但是它有最短的前缀 )。

server块的配置结果应该是这样:
server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}
这已经是一个监听标准80端口并且能以http://localhost/访问本地机器的工作配置了。在响应以/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
唯一有些东西不是如预期般工作,你可以在access.log和error.log文件中找到原因,它们在/usr/local/nginx/logs或/var/log/nginx。

4. 建立一个简单的代理服务

nginx最频繁被使用的用处之一就是作为一个代理服务,这意味着是一个接收请求,并将它们传递到被代理服务,从被代理服务提取响应,并将它们发送回客户端的服务。

我们将配置一个基本的代理服务,它提供本地路径文件图片的请求并且将其他所有的请求发送到一个被代理服务。在这个例子中,2个服务都会被定义在一个单独的nginx实例上。

首先,通过使用下列内容在nginx的配置文件上添加另一个server块来定义被代理服务:
server {
    listen 8080;
    root /data/up1;

    location / {
    }
}
这将是一个简单的监听端口8080的服务(先前,listen指令没有指定是因为使用的标准80端口)并且映射所有的请求到本地文件系统的/data/up1路径下.创建这个路径,并且放置index.html文件在里面。注意root指令被放在了server内容中。当被用来服务一个请求的location块布包含自己的root指令时,这样的root指令才会被使用。

下一步,使用前一节的服务配置并且略微修改来让它变成一个代理服务配置。在第一个location块中,放入带有协议的proxy pass指令,在参数中指定被代理服务的名称和端口(在我们的例子中,是http://localhost:8080):
server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}
我们将修改第二个location块,它映射带有/images/前缀的请求到/data/images路径下,来使它匹配典型文件扩展的图片请求。修改后的location块应该是这样:
location ~ \.(gif|jpg|png)$ {
    root /data/images;
}
参数是一个匹配所有以.gif,.jpg或.png结尾的URI的正则表达式。一个正则表达式应该以~开头。相应的请求将会被映射到/data/images路径。

当nginx选择一个location块来服务一个请求时它首先检查指定前缀的location指令,记得是带有最长前缀的location,然后检查正则表达式。如果匹配上来正则表达式,nginx将选择这个location,否则,它将选择之前的那个。

代理服务的配置结果应该是这样:
server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}
这个服务将会过滤.gif,.jpg或.png结尾的请求并且将它们映射到/data/images路径(通过将URI添加到rott指令参数)并且将所有其他请求传递到上面配置的被代理服务。

为了应用一个新的配置,将reload按照之前选择描述的一样发送到nginx。

还有更多能用于将来配置一个代理连接的指令。


5. 建立一个FastCGI代理

nginx可以用于将请求路由到使用多种框架和编程语言例如PHP组成的应用的FastCGI服务上。

和一个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上将需求静态图片的请求路由到被代理服务的一个服务。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值