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

Guide

本教程基础的介绍了 nginx,以及能使用nginx完成的简单任务。

本教程建立在读者已经安装了 nginx,如果并没有,请移步 Installing 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 进程,可以使用

nginx -s quit

注意,执行这个命令的用户要和启动nginx的用户是同一个。

如果你修改了配置文件,那么你需要执行reload命令或者重启nginx才能生效

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/ 目录下的文件

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

更多

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

[译]Nginx入门引导教程的更多相关文章

  1. Nginx 入门学习教程

    昨天听一个前同事说他们公司老大让他去研究下关于Nginx 方面的知识,我想了下Nginx 在如今的开发技术栈中应该会很大可能会用到,所以写篇博文记录总结下官网学习教程吧. 1. 什么是Nginx? 我 ...

  2. Nginx教程(一) Nginx入门教程

    Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由 ...

  3. Sagit.Framework For IOS 开发框架入门开发教程2:一行代码实现引导页

    前言: 开篇比较简单:Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置 第二篇教程之前写了一半,感觉不太好写,而且内容单纯介绍API,要说的很多,又枯燥乏味. ...

  4. nginx入门教程

    nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器.   什么是反向 ...

  5. Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例

    场景 Nginx入门简介和反向代理.负载均衡.动静分离理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ub ...

  6. Nginx 极简教程(快速入门)

    作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4.  ...

  7. Nginx入门教程(转)

    原文:https://www.cnblogs.com/qdhxhz/p/8910174.html nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻 ...

  8. Nginx教程(一) Nginx入门教程 (转)

    1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由俄罗斯的程序设计师IgorSysoev所开 ...

  9. ThinkJS框架入门详细教程(二)新手入门项目

    一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...

随机推荐

  1. solr学习篇(四) java使用solr简单查询(初识solrj)

    使用java实现solr查询 目录:1:导入jar包 2:核心类介绍 3:代码实现 4:注意事项 一 导入jar包 solrj可以使Java应用程序很方便的访问与操作solr. solrj有几个核心类 ...

  2. 记录面试龙腾简合-java开发工程师经历

    /** * ############ * 变强是会掉光头发的!现在的头发还是很茂盛,是该开心还是难过呢.. * ############ * / 总结下近期面试龙腾简合-java开发岗的经历.附上笔试 ...

  3. 设计模式(十四)Chain of Responsibility模式

    Chain of Responsibility模式就是当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任.也就是说,当一个人被要求做什么事时,如果他可以做就自己做, ...

  4. Docker 实战—使用 Dockerfile 构建镜像

    Dockerfile 指令详解请访问:https://www.cnblogs.com/cloudfloating/p/11737447.html 使用 Alpine Linux 作为基础镜像 Alpi ...

  5. ABP WebApi的请求类型

    Api对应的请求类型分为以下四种方法: 1.POST 2.PUT 3.DELETE 4.GET 一般abp的请求类型都是根据接口命名来定义的,Create——POST,Delete——DELETE,U ...

  6. Azure 上的物联网产品介绍

    微软云Azure上物联网产品提供了从设备接入到设备与云的双向通信,到数据在云中存储,到数据分析,最后到数据展示的完整解决方案,本文主要介绍一些基本的概念,后续的章节中,会详细介绍每款产品的使用方法及步 ...

  7. MySQL如何进行索引重建操作?

    在MySQL数据库中,没有类似于SQL Server数据库或Oracle数据库中索引重建的语法(ALTER INDEX ... REBUILD),那么在MySQL数据库中,是否有什么方式重建索引呢? ...

  8. 前端与算法 leetcode 350. 两个数组的交集 II

    目录 # 前端与算法 leetcode 350. 两个数组的交集 II 题目描述 概要 提示 解析 解法一:哈希表 解法二:双指针 解法三:暴力法 算法 # 前端与算法 leetcode 350. 两 ...

  9. javascript 作用域链及性能优化

    在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象.函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性.其中一个内部属 ...

  10. st表复习笔记

    st表,一种高效的区间最值查询(RMQ)算法.本质其实是一个动态规划. 其实吧,对于看过线性dp的人来说应该不难理解,只是处理有些麻烦.但是本土狗因为-1的问题居然改了许久... 用两个2^i的区间把 ...