最近老是有朋友问我nginx方面的问题,其实我nginx在如今的公司就是作作安装,建立虚拟主机,作作优化,有时候对于朋友问个人问题,我也无能为力,感受本身超没面子,没办法只能本身恶补恶补下nginx的理论知识了,像我这样的人理论真心的不好啊,面试很吃亏啊,哈哈哈哈,因此我决定之后好好看看平时用到的东西的理论知识。php
下面就给你们,说说我对nginx理解,多多给于意见,谢谢:html
nginx 特性:node
1. nginx是模块化设计的,有较好的扩展性;nginx
2. 高可靠性web
master/worker 的设计模式面试
加载并分析配置文件是由master来实现的正则表达式
worker是nginx响应客户请求的apache
在nginx中master进程只能有一个,可是worker进程能够根据cpu来调整设计模式
3. 支持热部署浏览器
不停机(不中止服务)更新配置文件,更换日志文件,更新服务器程序版本,在服务不停机的状况下将老版本更新成新版本是彻底没有问题的能够称之为平滑升级;
4. 低内存消耗
例如:10000个keep-alive的链接模式下的非活动链接,仅消耗2.5M内存
5. 支持event-driven,aio,mmap等较新型的IO技术
nginx的基本功能:
1. 首先你们要知道,nginx是一个静态资源的web服务器,它自身只能接受http请求并返回;
2. 能够作http协议的反向代理服务;
3. 同时nginx仍是pop3,smtp,imap4等邮件服务的反向代理,这个不多用到,反正我是没有用到过
4. 能缓存打开的文件(仅限于元数据)、支持FastCHI(和php-fpm交互)等协议
5. 模块化(非DSO机制的),过滤器zip,ssi,ssl;
web服务相关的功能:
1. 虚拟主机(server),作过apache的人知道,apache有一个虚拟主机的功能,能够根据不一样的端口,主机名,域名来实现,一样nginx也有这个功能
2. keepalive,长连接,多数和keepalive软件相结合来实现的,多用于负载均衡
5. 路径别名,能够在配置文件来使用alias来设置路径访问别名
6. 基于IP及用户的访控制
7. 支持速率限制及并发数控制等等,在优化的时候会修改这两项配置
还有许多,就不在这里一一介绍了
...
nginx 的基本架构:
1. master/worker模型
一个master进程,可生成一个或者多个worker进程;
经过nginx事件驱动来响应用户请求,例如:epoll,/dev/poll
消息通知功能:select,poll
支持sendfile,sendfile64
支持AIO,mmap
master:加载配置文件,管理worker进程、平滑升级
worker:http服务,http代理
模块类型:
1. 核心模块:core,module 标准的
2. Standard HTTP modules 标准的
3. Optional HTTP modules 可选的,编译的时候可选择加不加入编译
4. Mail modules 可选的,编译的时候可选择加不加入编译
5. 3rd party modules 可选的,编译的时候可选择加不加入编译
用来作什么?
1. 静态资源服务器
通常结合apache来使用,由于nginx只能处理静态资源,配合apache的话,动态访问apache静态访问nginx,更加有效的提升了访问速度;
2. HTTP服务器的反向代理
下面来简单说下源码安装nginx吧
nginx 安装配置
1. nginx在redhat是没有被收录进官方的发行版本的,因此要epl源来安装,前提是能链接互联网,直接在nginx.org官网中就有epl的yum仓库源
2. nginx有三种版本
nginx stable 稳定版本
稳定版本是nginx官方不断的修改bug的版本
nginx mainline 主线版本 不建议在生产上使用
主线版本是nginx官方不断在添加新功能,知道肯定稳定好才会发行的
次版本号为偶数的, 多为传统版本
3. 编译安装nginx
1). yum -y groupinstall "Development Tools" "Server Platform Development"
2). nginx源码包安装通常依赖于如下几个组件(必须保证这三个报的开发包是安装好的)
PCRE library 主要是在url从新的时候支持poll扩展字符设定的
zlib library 传输压缩的
openssl
yum -y install openssl-devel pcre-devel zlib-devel
3). 源码包解压出来后文件介绍
*重点
*core 核心模块
*event 事件驱动模块
*http web服务模块
mail 邮件模块
misc 不变规则的杂项
os 系统自己相关的专用代码
4) ./configure --help 查询帮助
必定要使用普通用户来运维worker进程
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-debug
--conf-path=/etc/nginx/nginx.conf 指明配置文件
--user=nginx 指明用户
--group=nginx 用户所在组
--error-log-path=/var/log/nginx/error.log 错误日志
--http-log=/var/log/nginx/access.log 访问日志
--pid-path=/var/run/nginx/nginx.pid pid文件
--lock-path=/var/lock/nginx.lock lock文件
--with-http_ssl_module 默认没有启用,须要起来
--with-http_stub_status_module 启动状态页面
--with-http_gzip_static_module 支持gzip压缩
--with-debug 有必要的话,启用debug
编译完成后必定要确认epoll这个模块是被编译进去的,默认就在编译列表中的,要是没有编译成功为有大问题
5) .make && make install
4. 启动nginx服务
1). /usr/local/nginx/sbin/nginx -t 测试语法
2). /usr/local/nginx/sbin/nginx 启动nginx服务
3). /usr/local/nginx/sbin/nginx -s stop 平滑关闭服务
下面来简单说下nginx配置文件吧
nginx.conf配置文件参数介绍:
main配置段:
1. worker_connections #;
每一个worker进程所可以响应的对打的并发请求数量;
worker_processes * worker_connections
请求的最大数
2. use [epoll|rgisg|select|poll]
定义使用的事件模型,建议让nginx自动选择
3. accept_mutex [on|off]
各worker接受用户的请求的负载均衡锁;启用时,表示用于让多个worker轮流序列化的响应新请求
4. lock_file /PATH/TO/LOCK_FILE;
event{
...
}
http{
...
1. server{}
定义一个虚拟主机
---基于端口,ss -tnl ---
server{
listen POST;
server_name www.b.com;
root /PATH/TO/DOCUMENTROOT
}
---基于主机名,ss -tnl ---
server{
listen POST;
server_name www.a.com;
root /PATH/TO/DOCUMENTROOT
}
2. listen指令
listen address:[post]
listen post
default_server: 默认虚拟主机,如果没有定义的话,就选择第一个虚拟主机来做为默认的虚拟主机
ssl:用于限制只能经过ssl链接提供服务
http2: http version 2;
3. server_name NAME[....];
server_name能够跟一个或者多个,还可使用通配符和正则表达式,可是二者要分开使用
(1). 首先作精确匹配 :www.lanyulei.com;
(2). 左侧通配符 *.lanyulei.com;
(3). 右侧统配符 www.lanyulei.*
(4). 正则表达式 !\^\$
(5). default_server
4. tcp_nodelay on|off;
在keepalive模式下的链接是否使用TCP_NODELAY;推荐不使用
5. tcp_nopush on|off
6. alias
定义路径别名的,只能用于location中
7. index
index file...;
8. error_page code .. url;
根据http的状态码重定向错误页面
error_page 404 404.html
9. try_file ... ... ... ...;
设置多个主页
客户端请求相关的配置
10. keepalive_timeout 默认是75秒
设定keepalive链接的超时时长;0表示禁止长链接
11. keepalive_requests number;
在keepalive链接上所容许请求的最大资源数量:默认是100个
12. keepalive_disable
指明禁止何种浏览器使用keepalive功能
13. send_timeout 默认是60秒
当服务器发送给客户端请求的资源的时候客户端没有任何响应,就在设置的超时时间
}