共计 4738 个字符,预计需要花费 12 分钟才能阅读完成。
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 协议。
CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm
使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-12/125791.htm