这篇教程简单介绍了 nginx 而且讲解了一些 nginx 能够解决的简单任务。这里,咱们假设 nginx 已经安装在读者的机器上。若是没有,能够看一下如何安装 nginx。这篇教程主要讲解的是若是启用和中止ngixn,和从新加载配置,描述配置文件的基本结构和怎样搭建一个 nginx 静态辅助器,怎样配置 nginx 做为一个代理服务器来。
nginx 有一个主进程和其余子进程。主进程的主要工做是加载和执行配置文件,而且驻留子进程。子进程用来做为实际的请求处理。nginx 采起基于事件的模型和 OS 依赖的机制,在多个子进程之间高效的分配请求。子进程的个数会直接写在配置文件中而且,对于给定的配置能够是固定的,或者根据可用的 CPU 核数自动的进行调整(参考 子进程)。
nginx 和它模块的工做方式是在配置文件中写好的。默认状况下,这个配置文件一般命名为 nginx.conf
而且会放置在 /usr/local/nginx/conf
,/etc/nginx
,或者 /usr/local/etc/nginx
。php
运行可执行文件就能够开启 nginx,好比:html
// -c 为 nginx 的配置文件 nginx -c /usr/local/nginx/conf/nginx.conf
若是,nginx 已经开启,那么它就能够经过使用 -s
参数的可执行命令控制。使用下列格式:nginx
nginx -s signal
signal 能够为下列命令之一:正则表达式
nginx -s quit执行该命令的用户须要和启动的 nginx 的用户一致。
nginx -s reload一旦主进程接收到重载配置文件的命令后,它会先检查配置文件语法的合法性,若是没有错误,则会从新加载配置文件。若是成功,则主进程会从新建立一个子进程而且发送关闭请求给之前的子进程。若是没有成功,主进程会回滚改动而且继续使用之前的配置。老的子进程在接受关闭的命令后,会中止接受新的请求而且继续处理当前的请求,直处处理完毕。以后,该子进程就直接退出了。
/usr/local/nginx/logs
或者 /var/run
目录下。好比,若是主进程的 ID 是 1628,为了发送 QUIT
信号来使 nginx 优雅退出,能够执行:kill -s QUIT 1628
为了获得全部正在运行的 nginx 进程,咱们可能会使用到 ps 工具,好比,像下列的方式:数组
$ ps -ax | grep nginx // 结果为:(下面是单核 CPU 的状况) 516 pts/0 D+ 0:00 grep --color=auto nginx 1156 ? S 1:22 nginx: worker process 27999 ? Ss 0:00 nginx: master process ./nginx
更多关于发送信号给 nginx,能够参考 nginx 控制。缓存
nginx 是由一些模块组成,咱们通常在配置文件中使用一些具体的指令来控制它们。指令被分为简单指令和块级命令。一个简单的指令是由名字和参数组成,中间用空格分开,并以分号结尾。例如:服务器
// 简单指令 root /data/www;
块级指令和简单指令同样有着相似的结构,可是末尾不是分号而是用 {
和 }
大括号包裹的额外指令集。若是一个块级指令的大括号里有其余指令,则它被叫作一个上下文(好比:events,http,server,和 location)。
在配置文件中,没有放在任何上下文中的指令都是处在主上下文中。events
和 http
的指令是放在主上下文中,server
放在 http
中, location
放在 server
中。网络
以 #
开头的行,会被当作注释。dom
# this is a comment events { worker_connections 4096; ## Default: 1024 } http { server { listen 80; server_name domain1.com www.domain1.com; access_log logs/domain1.access.log main; root html; location ~ \.php$ { fastcgi_pass 127.0.0.1:1025; } } }
一个重要的网络服务器的任务是处理文件(好比图片或者静态 HTML 文件)。这里,你会实践一个例子,文件会从不一样的目录中映射(取决于请求):/data/www
(放置 HTML 文件)和 /data/images
(放置图片)。这须要配置一下文件,将带有两个 location
的指令的 server
的块级命令放在 server
指令中。
首先,建立一个 /data/www
目录,而后放置一个事先写好内容的 index.html 文件。接着,建立一个 /data/images
目录,而后放置一些图片。
下一步,打开配置文件。默认的配置文件已经包含了一些关于 server
指令的样式,大多数状况下直接把他们给注释掉。如今,注释掉其余的区块,而后写一个新的 server
区块:工具
http { server { } }
一般,该配置文件可能会包含多个 server
指令。这些 server
指令监听不一样的端口和服务器名。一旦 nginx 决定哪一个服务进程处理请求,它会根据在 server 块级指令中定义好的 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/
开头的请求(location /
也会匹配到该请求,只是前缀更短)
server
块级命令的配置结果以下:
server { location / { root /data/www; } location /images/ { root /data; } }
这已是一个可用的服务器配置,它监听标准的 80 端口而且能够在本地上经过 http://localhost/
访问。对于 URI 以 /images/
开头的请求,服务器会从 /data/images
目录中,返回对应的文件。例如,nginx 会返回 /data/images/example.png
文件,当接收到 http://localhost/images/example.png
的请求响应时。若是该文件不存在,nginx 会返回一个 404 错误的响应。没有以 /images/
开头的 URI 的请求,将会直接映射到 /data/www
目录中。好比,响应 http://localhost/some/example.html
的请求,nginx 会发送 /data/www/some/example.html
文件。
为了使用新的配置文件,若是还没开启 nginx 须要先开启,而后将重载信号发送给 nginx 的主进程,经过执行:
nginx -s reload
若是你发现有些地方出了问题,你能够在 /usr/local/nginx/logs
或者 /var/log/nginx
目录下的 access.log
和 error.log
文件中,找到缘由。
nginx 经常用来做为代理服务器,这表明着服务器接收请求,而后将它们传递给被代理服务器,获得请求的响应,再将它们发送给客户端。
咱们将配置一个基本的代理服务器,它会处理本地图片文件的请求并返回其余的请求给被代理的服务器。在这个例子中,两个服务器都会定义在一个 nginx 实例中。
首先,经过在 nginx 配置文件中添加另外一个 server
区块,来定义一个被代理的服务器,像下面的配置:
server { listen 8080; root /data/up1; location / { } }
上面就是一个简单的服务器,它监听在 8080 端口(以前,listen
并没被定义,是由于默认监听的 80 端口)而且会映射全部的请求给 本地文件目录 /data/up1
。建立该目录,而后添加 index.html
文件。注意,root
指令是放在 server
上下文中。当响应请求的 location
区块中,没有本身的 root
指令,上述的 root
指令才会被使用。
接着,使用前面章节中的 server
配置,而后将它改成一个代理服务配置。在第一个 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
结尾的 URIs。一个正则表达式须要以 ~
开头。匹配到的请求会被映射到 /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 给 root 指令的参数),接着将其余全部的请求映射到上述被代理的服务器。
为了使用新的配置,像前几个章节描述的同样,须要向 nginx 发送重载信号。
这还有不少其余的指令,能够用于进一步配置代理链接。
本文转载自腾云阁,已得到做者受权。