[译]Nginx入门引导教程

本文为【Beginner’s Guide】译文,原文地址:nginx.org/en/docs/beg…html

Guide

本教程基础的介绍了 nginx,以及能使用nginx完成的简单任务。本教程创建在读者已经安装了 nginx,若是并无,请移步 Installing nginx。本教程将包括如下内容:nginx

  • nginx 的开启和关闭
  • nginx 重启配置
  • 配置文件结构说明
  • 配置 nginx 提供静态服务
  • 配置 nginx 做为代理服务器
  • 链接 nginx 与 FastCGI 应用

nginx 拥有一个主进程多个工做进程,主进程的主要任务是管理配置信息和调度工做进程。工做进程作真实的请求处理。nginx 基于事件的模型和操做系统平台依托的机制在工做进程间有效地分发请求。工做进程的数量是配置文件定义的,能够经过配置文件固定,也能够根据cpu核心数自适应(详见 worker_processes)。nginx的工做方式和模块状况取决于它的配置文件 nginx.conf ,而它的配置文件通常在正则表达式

  • /usr/local/nginx/conf 或者
  • /etc/nginx 或者
  • /usr/local/etc/nginx

启动,关闭,刷新配置

运行可执行文件启动nginx,nginx启动后能够经过 -s 参数去 控制它服务器

nginx -s SIGNAL复制代码

SIGNAL 能够是以下值微信

  • stop —— 快速中止
  • quit —— 优雅中止
  • reload —— 刷新配置文件
  • reopen —— 从新打开log文件

好比:你但愿 等工做进程完成当前正在处理的请求后就中止 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 由模块组成,这些模块由配置文件中指定的指令控制。指令分为 简单指令指令块

  • 简单指令 - 由以分号结尾,空格分隔的键值对组成 [ key value ; ]
  • 指令块 - 和简单指令结构相同,可是使用一对大括号( {} )去包裹一组指令。
    包含其余指令的指令块称为 上下文 (好比events,http, server和location)

在配置文件中,块级指令以外的区域称之为 主(根)上下文(main context) 。好比:events 和 http 指令是处在主上下文里的,server 指令是处在 http 上下文里中,location 指令又是处在 server 上下文里中。

#主(根)上下文
http{
    server{
       location {
       }
    }
}复制代码

同一行内 # 字符后的都是注释

静态资源服务

Web服务器的一项重要功能就是能充当 静态服务器(如:图片,静态HTML文本)。好比你要实现这样的情景:

根据不一样的请求,nginx 能返回指定的文件资源

  • /data/images 目录下的图片
  • /data/www/ 目录下的html文件。

只须要配置 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/ 目录下的文件

  • 例如:访问 http://localhost/images/example.png,Web服务器会响应 /data/images/example.png
    若是该文件不存在,则返回 404 error。若是 URI 不是以 /images/ 开头,那就映射到(更短的 location //data/www 目录,
  • 例如:访问 http://localhost/some/example.html,Web服务器将会把 /data/www/some/example.html 响应给客户端。
    修改 nginx 配置文件以后,记得让主进程从新读取配置文件才能生效
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

更多

更多优秀内容,能够经过关注微信公众号【极客收藏夹】获取

wx

相关文章
相关标签/搜索