这是我参与「第五届青训营」伴学笔记创作活动的第 1 天
1.什么是Nginx?
一个最简短的概念是:Nginx是一个高性能的HTTP和反向代理web服务器。
HTTP服务器很好理解,那我们先来看看,什么是正向代理和反向代理:
当你打开Google,被防火墙拦截,此时如果你打开VPN,由VPN替你请求Google,再把内容返回给你,这个过程就是一个正向代理。在这个过程中,VPN代替你向Google发送请求,Google并不知道请求的是VPN的服务器还是其他什么。
而反向代理呢?你打开百度,百度的服务器接收到你的请求后,转发到对应的服务进行响应,这个过程中百度的代理服务器对自身的服务进行代理,就是一个反向代理。
我的愚见是,可以用代理服务在哪里启动来判定,例如VPN的应用是在自己设备上启动,自己非常直观清楚的知道自己用它进行代理,就是正向代理。而反向代理往往运行在服务端,用户并不直接清楚整个请求过程是否有代理,则为反向代理。
2.安装Nginx和启动
windows: nginx: download
linux:
下载组件:
# wget http://nginx.org/download/nginx-1.10.2.tar.gz
# wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
# wget http://zlib.net/zlib-1.2.11.tar.gz
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
openssl安装:
# tar zxvf openssl-fips-2.0.10.tar.gz
# cd openssl-fips-2.0.10
# ./config && make && make install
pcre安装:
# tar zxvf pcre-8.40.tar.gz
# cd pcre-8.40
# ./configure && make && make install
zlib安装:
# tar zxvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11
# ./configure && make && make install
nginx安装:
# tar zxvf nginx-1.10.2.tar.gz
# cd nginx-1.10.2
# ./configure && make && make install
Windows启动:双击Nginx.exe就好啦
Linux启动:
# whereis nginx
查看nginx安装位置,然后cd到安装目录下/sbin目录下,执行./nginx
然后打开浏览器,启动:http://localhost:80,出现Welcome to nginx!即可。
3.配置Nginx
先来看看Nginx的配置文件结构:
#全局配置
events {
#events配置
}
http
{
#http全局配置
server
{
#server全局配置
location [PATTERN]
{
#location配置
}
}
}
其中配置分别作用是: 1、全局配置:配置影响nginx全局的指令。
2、events配置:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http配置:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server配置:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location配置:配置请求的路由,以及各种页面的处理情况。
我们先看看events,它的配置主要包含了accept_mutex, multi_accept,worker_connections 和 use这几个指令。
| 指令 | 可选值 | 默认值 | 介绍 |
|---|---|---|---|
| accept_mutex | on/off | on | 设置网路连接序列化,防止惊群现象发生 |
| multi_accept | on/off | off | 设置一个进程是否同时接受多个网络连接 |
| worker_connections | number | 512 | 单个work进程允许的最大连接数 |
| use | epoll,kqueue,rtsig,eventport,poll | 事件驱动模型 |
另外,惊群指的是:
当客户端有新建连接的请求到来时,就会触发各个worker进程的连接建立事件,但是只有一个worker进程能够正常处理该事件,而其他的worker进程会发现事件已经失效,从而重新循环进入等待状态,从而浪费了大量资源。
下一篇文章我们来看配置的详情吧