本文为【Beginner’s Guide】译文,原文地址:nginx.org/en/docs/beg…html
本教程基础的介绍了 nginx,以及能使用nginx完成的简单任务。本教程创建在读者已经安装了 nginx,若是并无,请移步 Installing nginx。本教程将包括如下内容:nginx
nginx 拥有一个主进程和多个工做进程,主进程的主要任务是管理配置信息和调度工做进程。工做进程作真实的请求处理。nginx 基于事件的模型和操做系统平台依托的机制在工做进程间有效地分发请求。工做进程的数量是配置文件定义的,能够经过配置文件固定,也能够根据cpu核心数自适应(详见 worker_processes)。nginx的工做方式和模块状况取决于它的配置文件 nginx.conf ,而它的配置文件通常在正则表达式
运行可执行文件启动nginx,nginx启动后能够经过 -s 参数去 控制它服务器
nginx -s SIGNAL复制代码
SIGNAL 能够是以下值微信
好比:你但愿 等工做进程完成当前正在处理的请求后就中止 nginx 进程,可使用ide
nginx -s quit复制代码
注意,执行这个命令的用户要和启动nginx的用户是同一个。ui
若是你修改了配置文件,那么你须要执行reload命令或者重启nginx才能生效spa
nginx -s reload复制代码
主进程在收到reload命令时,会去 检查配置文件的语法 而且 尝试 去应用配置的内容。若是成功,主进程就会启动一个新的工做进程去发送信息命令其余工做进程关闭;不然主进程将会 回滚,并应用回上一次的配置信息,工做进程继续工做着。工做进程收到关闭的命令后将再也不接受新的客户端请求,继续完成手头上的请求后关闭。操作系统
在类 Unix 系统平台上也能够经过相似 kill 的命令向 nginx 发送消息,这样的消息通常是直接发送给用进程ID标识的nginx 进程。nginx 的主进程ID默认是写在 /usr/local/nginx/logs 或者 /var/run 目录下的 nginx.pid。好比当前 nginx 主进程的进程ID是1628,能够这样代理
# 优雅的关闭nginx
* kill -s quit 1628
# 经过 ps 能够获取到 nginx 进程号
* ps -ax | grep nginx复制代码
更多的信息,请查看 Controlling nginx
nginx 由模块组成,这些模块由配置文件中指定的指令控制。指令分为 简单指令 和 指令块。
{}
)去包裹一组指令。在配置文件中,块级指令以外的区域称之为 主(根)上下文(main context) 。好比:events 和 http 指令是处在主上下文里的,server 指令是处在 http 上下文里中,location 指令又是处在 server 上下文里中。
#主(根)上下文
http{
server{
location {
}
}
}复制代码
同一行内 # 字符后的都是注释
Web服务器的一项重要功能就是能充当 静态服务器(如:图片,静态HTML文本)。好比你要实现这样的情景:
根据不一样的请求,nginx 能返回指定的文件资源
只须要配置 nginx 文件,在 http 配置块的 server 下写两个 location 块。首先建立 /data/www 目录,在这个目录下创建 index.html
文件,里面随便写点什么内容建立 /data/images 目录,里面放一些图片。而后打开配置文件(文件中默认是配置有几个 server 块的,但大部分是被注释掉的),把那些 server 都注释掉在http 块下从新配置一个 server 块。
http{
server{
}
}复制代码
通常来讲,配置文件应该根据监听端口号或者主机名分为几个 server 块,而 nginx 到底把 http 请求交给哪一个 server 处理,则是根据请求的 URI 和 server 里 location 指令的值的 匹配状况 来处理的。下面咱们添加一个 location 到 server 中
location / {
root /data/www;
}复制代码
上述 location 的 "/
" 前缀,是用来匹配 http 请求 URI 的。而它会添加到 root 指定的路径下,也就是 /data/www,以此来造成 请求资源(文件)和本地文件系统的对应。若是有多个 location 和 URI 匹配的话,那就 优先选择最长匹配的 location。第一个 location /
只提供了最短的前缀,长度为1。因此,只有其余 location 匹配失败的状况下才能使用第一个。
如今,咱们再添加一个location
location /images/ {
root /data;
}
}复制代码
上述的 location 将会匹配一个以 /images/ 开始的 http 请求(location /
也会被匹配可是它更短)。配置好后,应该是相似下面的内容
http{
server{
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
}复制代码
这样就配置了监听标准 80 端口的 server,能够经过 http://localhost 验证。当请求 URI 以 /image/ 开头,服务器将响应 /data/images/ 目录下的文件
/data/images/example.png
location /
) /data/www 目录, /data/www/some/example.html
响应给客户端。nginx -s reload复制代码
若是出错的话,记得查看 access.log 和 error.log 日志文件的内容。
日志目录通常在 /usr/local/nginx/log/ 或者 /var/log/nginx/ 里。
nginx 的一个常见用途是做为 代理服务器
代理服务器是接受请求,转发请求的到被代理的服务器,再从被代理的服务器获取响应回传给客户端。
在下面这个例子中,咱们会配置一个简单的代理服务器,直接返回静态文件,其余的则转发给被代理的服务器。首先,编写个server块
server {
listen 8080;
root /data/up1;
location / {
}
}
复制代码
这样就能提供一个简单 监听 8080 端口 的 server (这里须要写 listen 是由于以前默认的 80 端口已经被占用了),这个 server 映射全部请求到本地 /data/up1 目录。建立一个 index.html
文件到这个目录下。注意,当 location 下未指定 root 目录时将会使用 server 的 root 目录(相似 默认值 )而后,修改配置文件 在先前 server 的第一个 location 处放入 proxy_pass,指定 **协议,域名,端口**,如:
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}复制代码
修改第二个 localtion(映射 /images/
开头到本地目录)成根据文件类型拓展名匹配
location ~ \.(gif|jpg|png)$ {
root /data/images;
}复制代码
该参数是一个正则表达式,匹配以 .gif,.jpg 或 .png 结尾的全部 URI。正则表达式应该以〜开头。相应的请求将映射到 /data/images 目录。
nginx 在分发请求给 location 时,会 先选出最长的匹配前缀 的 location,而后去 检查正则表达式,若是正则表达式匹配就选择正则表达式所在的 location,不然就使用以前选出最长匹配 location
最终的代理服务器配置文件应该这样:
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}复制代码
这个 server 将会映射以 .gif,.jpg 或 .png 结尾的 URI 到 /data/images/ (root 对应的路径)目录下,其余的请求将会 转发给 proxy_pass 的代理服务器
更多代理配置的指令请移步 more
更多优秀内容,能够经过关注微信公众号【极客收藏夹】获取