Nginx
初识Nginx
前端开发者或多或少都听说过Nginx。即使没有使用过Nginx,也应该了解Nginx。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力在同类型的网页服务器中表现较好。
一般来说Nginx有三大应用场景:
- 静态资源服务-通过本地文件系统提供服务
- 反向代理服务-缓存、负载均衡
API服务-openresty
一般而言,应用服务的运行效率是很低的,而且并发是受限的。所以需要把很多应用服务组成一个集群,向用户提供高可用性。随着把应用服务都组成集群,那么就会带来两个需求。
- 一、需要动态的扩容.
- 二、有些服务出了问题之后,需要做容灾。 所以就需要
Nginx具有反向代理功能。
在这样的一个链路中,nginx一般是处于企业内网的一个边缘节点,随着网络链路的增长,用户体验的到时延就会增加。所以需要把一些不变的,或者说在一段时间内不变的资源缓存在nginx中,比如css文件、图片,由nginx直接提供服务,这样时延就会减少很多。所以这样就衍生出nginx的缓存功能。
数据库服务要比应用服务好得多,应用功能比较简单,所以并发与运行都要远高于应用服务。所以衍生出第三个应用场景,直接由nginx访问数据库服务,利用nginx的强大并发性实现如web防火墙等复杂的业务功能
Nginx组成
Nginx主要有4部分组成:
Nginx二进制可执行文件Nginx.conf配置文件asscess.log文件error.log文件
编译Nginx
编译Nginx大概分以下步骤:
- 下载
Nginx。 - 执行
configure。 - 编译与安装
Nginx。
1、下载Nginx
从nginx.org网站下载即可!
nginx的版本分为三类:
Mainline:开发版Stable:最新稳定版Legacy:老版本的稳定版
下图为解压后的nginx目录auto目录:是一些判用于断操作系统支持与编译等相关的文件。
CHANGES文件:nginx版本的迭代日志(.ru是俄语版,因为作者是俄罗斯)
conf目录:是示例配置文件,用于配置参考。
configure文件:用于编译生成中间文件的脚本。
contrib目录: 提供了nginx语法支持脚本。
man目录:提供了nginx帮助文档。
html目录: 提供了两个标准的html文件
src目录: 源码目录
2、编译与安装Nginx
bash
复制代码
// 使用以下命令行,查看执行configure时的参数
./configure --help
这些代码是配置这几个模块的地址,引导
nginx在执行在这些地址中读取相应的内容。
这些代码是说明使用哪些模块,不使用哪些模块。主要是用
with和without区分。
默认情况下,只需要配置prefix就行,该参数是指定将nginx编译在哪里,比如:
bash
复制代码
./configure -- prefix=/home/nginx
生成的中间文件在objs目录下
接着编译nginx
go
复制代码
make
make install
ok
Nginx语法
Nginx的配置文件是一个ASNCLL文本文件,由指令和指令块两部分组成。比如说
arduino
复制代码
http {
include mine.types;
upstream image {
server: 127.0.0.1:8080
}
server {
listen 443 http2;
limit_req_zone $binary_remote_addr
location ~*.(jpg|png)$ {
proxy_pass http://image
}
}
}
http{}大括号组成一个指令块,而include则是一条指令。指令块是否能配置名字是根据提供这个指令块的nginx模块来决定的。每条指令都是以;分号结尾,指令与参数之间以一个或多个空格分隔。而mine.types则是include指令的参数,可以有多个参数。
特别是include指令,它是允许组合多个配置文件以提升可维护性。mine.types这是一个含有很多条不同文件的后缀名与http协议中mine格式的对照关系表。
使用$符合表示一个变量。比如$binary_remote_addr作为limit_req_zone指令的参数,表示远端的地址。
部分指令的参数是支持正则表达式的。比如location指令的参数正是正则表达式,而且正则表达式中括号的内容可以用$1,$2等方式取出来。
http指令块包含以下4个块:
httpserver--对应一个/一组域名upstream--表示上游服务,当nginx需要与tomcat、企业内网等服务交互时就可以定义一个upstreamlocation--一个url表达式http指令块的所有指令都是由http模块解析执行的,也就是说http模块只能解析执行上面4种模块。
命令行主要格式是nginx指令参数,比如nginx -s reload。其中-s就是指令,表示发送信号,reload就是参数,表示重载配置文件。以下是几种常用指令的介绍:
- 帮助: -?、-h
- 使用指定的配置文件:-c 默认的情况下,编译出来的
nginx会寻找在执行configure时指定的配置文件,但可以使用命令行指令使用指定的配置文件,使用-c+配置文件路径 - 指定配置指令:-g 在命令行使用的配置指令可以覆盖在
config目录里的指令 - 指定运行目录:-p 在命令行使用指定目录会将默认的目录替换掉
- 发送信息:-s nginx操作运行中的进程方法一般是通过发送信号-s,有以下几种操作: 1、
stop:表示立即停止服务 2、quit:表示优雅的停止服务,在退出前完成已经接受的连接请求 3、reload:表示优雅的停止服务再重新载入配置文件 4、reopen:表示重新开始记录日志文件 - 测试配置文件是否有语法错误: -t -T 修改完配置之后,重新运行之前,可以先使用-t来测试是否有语法错误
- 打印
nginx的版本信息、编译信息等:-v -V