继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Nginx新手指南

艾贺521
关注TA
已关注
手记 292
粉丝 1.1万
获赞 1544

1.1 简介

这个指导对nginx的基础功能做了简单的说名。现在nginx也应该已经在读者机器上安装了,如果还没有,那么看看安装页面。这个指导将会讲到如何启动,停止nginx和重载它的配置文件,解释了配置文件的结构,如何设置nginx服务静态内容,如何配置nginx作为代理服务器,如何连接一个FastCGI应用。

nginx有一个master主进程和几个worker进程。master进程的目的是为了读取和评估配置文件,和维护worker进程。Woker进程是实际处理请求的。nginx使用了基于事件的模型和依赖OS(OS-dependent)的机制来高效的分发请求到woker 进程中,worker进程的数量可以在配置文件中定义,可以使用固定的数量或自动的调整为可用的CPU核数(see worker_processes)。

nginx和它的模块工作方式取决于配置文件。默认这个配置文件名称为nginx.conf,位于/usr/local/nginx/conf或/usr/local/etc/nginx目录下面。

 

1.2 启动,停止,和重载配置文件

一般使用ngixn的可执行文件启动nginx,nginx的可执行文件有如下用法。

nginx -s signal

信号可以是下面中的其中之一

·   stop — fast shutdown

·   quit — graceful shutdown

·   reload — reloading the configuration file

·   reopen — reopening the log files

在配置文件中的改变不会立即生效,除非你重载配置文件或者重启nginx,想要重载配置,执行。

nginx -s reload

一旦主进程收到了重载配置文件的信号,它首先检查语法是否有错,然后试着应用配置文件。如果成功了,主进程启动新的worker进程同时,向老的worker进程发消息请求他们关闭。否则的话,主进程仍然回滚到改变之前继续工作在旧的配置文件之下。老的worker进程,在收到关闭命令之后,停止接受新的请求,但是继续处理当前的请求知道所有的请求都处理完毕。然后老的worker进程退出。


1.3 配置文件的结构

nginx由模块组成,而模块通过在配置文件中指定指令来控制。指令分为简单的指令和块指令,简单额指令由名字和参数通过空格分开,以分号”;”结尾。块指令作为简单指令也有同样的结果,但是不再使用分号结尾,而是花括号{}。块指令包含其它指令在花括号内部,它叫做上下文(context),例如events,http,server,和location。

指令放置在任何上下文之外,都被看做主上下文(main context)。events和http指令放在主上下文里面,server放在http里面,location放在server里面。

每一行在#后面的标示为注释

1.4 提供静态内容

web服务器的一个重要任务就是服务文件,(例如图片,或静态HTML页面)。你会在哪里实施例子,依赖于请求,文件不同的本地目录提供服务,/data/www(包含HTML页面)和/data/images(包含图片)。这只需要在位于http中的server块里面编辑两个location块即可。

首先,创建一个/data/www 目录然后放一个静态文件,文件包含一些文本信息。然后创建/data/iamges目录,存放一些图片。

下一步,打开配置文件默认的配置文件以及包含了几个server块的例子,不过大部分被注释掉了。现在注释掉所有的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/开始的请求(/也会匹配,只不过是短前缀)

server块的配置结果就像这样。

server {

    location / {

        root /data/www;

    }

 

    location /images/ {

        root /data;

    }

}

这已经是一个可以正常监听在80端口的配置文件,通过本地机器 http://localhost/访问。在请求中以/images/开头的请求,服务器会从/data/images目录发送文件。例如,回复http://localhost/images/example.png,服务器会发送/data/images/example.png文件。如果这个文件不存在,nginx会发送一个404错误。不是以/images/开头的文件会映射到/data/www目录下面。例如 http://localhost/some/example.html  ,ngixn会发送/data/www/some/example.html 文件。

在有时,不像自己预期的那样工作,你可以试着在access.log或error.log中找到原因,它们位于/sur/local/nginx/logs或者/var/log/nginx 目录下面。

 

1.5 配置一个简单的代理服务器

nginx的一个常用方式是作为代理服务器,意味着服务接受到的请求,把请求传递到代理服务器,然后从代理服务器取回响应,然后在发送给客户端。

我们会配置一个基础的代理服务器,本地服务器服务图片请求,其它的请求发送给代理服务器,在这里例子中,两个服务器都会定义为简单的nginx实例。

首先,在配置文件中,通过添加一个或多个server块定义多个代理服务器。

server {

    listen 8080;

    root /data/up1;

 

    location / {

    }

}

这是一个简单的工作监听在8080端口的服务器,映射所有的请求到/data/up1本地文件系统目录下面,创建这个目录然后放index.html文件到里面,记住root指令放在server上下文里面(context)。当location块里面没有放root指令的时候,这个指令会生效。

下面使用前面定义的配置文件,修改它让它作为代理服务器,在第一个location块里面,放置proxy_pass指令,然后指定参数。我们这里使用http://localhost:8080  。

server {

    location / {

        proxy_pass http://localhost:8080;

    }

 

    location /images/ {

        root /data;

    }

}

我们会修改第二个location块,当前映射的是/images/前缀到/data/images目录下面,现在为了匹配典型的图片,修改locatio块就像下面这样。

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

    root /data/images;

}

这参数是正则表达式匹配以.gif,.jpg,或.png结尾的文件。正则表达式应该以 ~开头。匹配的请求会映射到/data/images目录下面。

当nginx选择一个location块服务请求的时候,它首先检查指定前缀的location指令,然后检查正则表达式。

代理服务器的配置结果就像下面这样。

server {

    location / {

        proxy_pass http://localhost:8080/;

    }

 

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

        root /data/images;

    }

}

这个服务器会过滤所有以.gif或.jpg或png结尾的文件,映射他们到/data/images目录下面。然后传递所有的请求到代理服务器那里。

还有更多的指令用于更深入的配置代理连接


1.6 配置一个FastCGI代理

nginx可以用于路由请求到FastCGI服务器.最基本的ngxin配置,可以使用fastcgi_pass使fastcgi服务和nginx服务器协同工作,而不是使用proxy_pass指令,fastcgi_param指令设置传递到FastCGI服务器的参数。在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;

    }

}

This will set up a server that will route all requests except for requests for static images to the proxied server operating on localhost:9000 through the FastCGI protocol.

这会设置一个服务器,路由所有的除了images的request请求到代理服务器,运行在localhost:9000通过FastCGI协议。


原文:http://nginx.org/en/docs/beginners_guide.html
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP