nginx 基础
第1章 Nginx介绍
1.1 nginx软件概念介绍
是一个开源的,支持高性能、高并发的www服务器和代理服务软件
1.2 nginx服务软件特点说明或优势
01. 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)
02. 资源消耗少:在3万并发连接下,开启10个nginx线程消耗的内存不到200MB
03. 可以做HTTP反向代理及加速缓存、即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或者LVS的功能
04. 具备Squid等专业缓存软件等的缓存功能
05. 支持异步网络I/O事件模型epoll(Linux 2.6+)
1.3 nginx功能特性
01. web服务软件
02. 反向代理负载均衡(nginx lvs happroxy)
03. nginx缓存服务(memcache redis mongodb)
第2章 Nginx Web服务应用
2.1 nginx软件企业应用情况
静态业务:若是高并发场景,尽量采用Nginx或Lighttpd,二者首选Nginx。
动态业务:理论上采用Nginx和Apache均可,建议选择Nginx,为了避免相同业务的服务软件多样化,增加额外维护成本。动态业务可以由Nginx兼做前端代理,再根据页面元素的类型或目录,转发到后端相应的服务器处理进程。---首选tomcat
既有静态业务又有动态业务:采用Nginx
利用nginx软件是无法处理动态业务请求,要让nginx结合php软件处理动态业务请求,在加上mysql
2.2 nginx软件的动态访问瓶颈
2.2.1 网站数据请求处理流程:
01. web静态服务软件:主要负责处理静态页面请求 3W
02. php动态程序解释器:主要负责处理动态页面请求
03. db数据库:存取数据信息(重要的瓶颈点)3000-5000
说明:了解了架构瓶颈问题,就需要响应优化的技术进行解决,后期会在优化课程中进行详细说明讲解
2.2.2 网站数据请求模型说明:
epoll模型与select模型的区别说明(比喻说明)
nginx依赖epoll模型
apache依赖select模型
01. 例子-宿管大妈
select模型方式请求宿管大妈:带领你一个一个屋去找
epoll模型方式请求宿管大妈: 记录名单册
02. 例子-幼儿园老师
select模型方式幼儿园老师:一个一个人问
epoll模型方式幼儿园老师:画个圈,自行进入圈中
2.3 nginx软件安装步骤
回顾软件安装方式:
a yum安装方式(解决软件依赖关系)
b 二进制包方式安装软件
c 编译安装软件(无法解决软件依赖关系,需要自行解决)
01. 检查软件安装的系统环境
[root@web01 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@web01 ~]# uname -r
2.6.32-696.el6.x86_64
02.安装nginx的依赖包(pcre-devel openssl-devel)---假设不进行安装
yum install -y pcre-devel openssl-devel
pcre:兼容perl语言正则表达式,perl compatible regular expressions
rewirte模块 参数信息(perl方式定义正则表达式)
openssl:ssh---openssh/openssl---https
总结:所有安装依赖软件,后面都要加上-devel
软件编译安装步骤:
a 软件解压配置(将软件程序安装到哪个目录中 开启nginx软件的哪些功能)
b 软件编译过程
c 软件编译安装过程
02. 下载nginx-1.10.2
mkdir -p /server/tools
cd /server/toos
wget -q http://nginx.org/download/nginx-1.10.2.tar.gz #下载软件
03. 解压软件并进行配置
tar xf nginx-1.10.2.tar.gz
cd /server/tools/nginx-1.10.2
useradd -s /sbin/nologin -M www
./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
(编译参数说明后续补充说明)
--prefix: 表示指定软件安装到哪个目录中,指定目录不存在会自动创建
--user/--group: nginx工作进程由哪个用户运行管理
--with-http_stub_status_module: 启动nginx状态模块功能(用户访问nginx的网络信息)
--with-http_ssl_module: 启动https功能模块
04. 进行编译
make
05. 进行编译安装
make install
06. 为软件创建软链接文件
ln -s /application/nginx-1.10.2/ /application/nginx
07. 启动服务
/application/nginx/sbin/nginx
2.4 软件安装完目录信息
conf --- 软件配置文件保存目录
html --- 网站站点目录*
logs --- 日志文件保存目录
sbin --- nginx命令保存目录
2.4.1 conf目录中内容:
nginx.conf --- nginx程序的主配置文件
nginx.conf.default --- nginx配置备份文件
2.5 对nginx主配置文件做精简化操作
egrep -v "#|^$" nginx.conf.default >nginx.conf
2.6 nginx软件使用过程中深入说明
①. nginx软件语法检查方法:
nginx -t
②. nginx软件访问测试过程:
curl -v www.baidu.com
扩展说明:
a. 304状态码的意义说明
304状态码是浏览器缓存造成的,可以利用装包工具进行查看获取(抓包工具进行理解http访问过程)
取消缓存的方式为:在浏览器设置中进行清除缓存;或者采用浏览器强制刷新功能进行浏览器缓存的刷新
b. wireshark抓包软件使用说明
启动软件---选择需要进行转包的网卡---开始进行抓包
③. nginx软件编译参数查看:
nginx -V <--- 查看原有的编译参数信息
第3章 nginx软件的编译安装常见的错误的说明
3.1 nginx软件安装过程中遇到的问题
· 软件依赖包未正确安装问题---PCRE依赖包没有安装
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
解决方法:yum install pcre pcre-devel -y
· 软件依赖包未正确安装问题---OPENSSL依赖包没有安装
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
解决方法:yum install openssl openssl-devel -y
3.2 nginx软件启动过程中遇到的问题 nginx软件重复启动产生的错误信息
[root@web01 nginx-1.10.2]# /application/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
解决方法:nginx软件已经启动无需反复启动,如果需要重新启动需要停止nginx进程或者用reload方式进行重启
3.3 nginx软件编译安装后,看不到程序目录(/application)
说明:编译安装步骤不对(配置 编译 编译安装生成/appliation)
3.4 nginx软件排查问题三部曲说明
01. 在客户端上ping服务器端IP,检查链路是否通畅
02. 在客户端上telnet服务器端IP、端口,检查链路访问是否通畅
03. 在客户端上wget检测模拟页面访问是否正常
3.5 403状态码出现情况原因:
01. 服务阻止客户端访问
02. 服务端站点目录中,没有指定首页文件信息
第4章 nginx虚拟主机配置实践
4.1 虚拟主机的概念
所谓虚拟主机,在Web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口);即一个server就是一个虚拟机
4.2 Nginx配置虚拟主机的步骤如下(适合各类虚拟主机类型):
1)增加一个完整的server 标签段到结尾处。注意,要放在http 的结束大括号前,也就是将
server 标签段放入http 标签。
2)更改server_name及对应网页的root根目录,如果需要其他参数,可以增加或修改。
3)创建server_name域名对应网页的根目录,并且建立测试文件,如果没有index 首页,访问会出现403错误。
4)检查Nginx配置文件语法,平滑重启Nginx服务,快速检查启动结果。
5)在客户端对server_name 处配置的域名做host 解析或DNS 配置,并检查(ping 域名看返回的IP是否正确)
6) 在Win32 浏览器中输入地址访问,或者在Linux 客户端做hosts 解析,用wget 或curl 接地址访问。
Nginx 虚拟主机的官方帮助网址为:http //Nginx org/en/docs/http/request_processing html
第6章 nginx状态模块信息说明
6.1 模块信息说明
参数信息 |
中文说明 |
Active connections |
当前活动客户端连接数量包含Waiting连接数量 |
accepts |
接收客户端连接的总数量 |
handled |
处理连接的总数量 |
requests |
客户端请求的总数 |
Reading |
当前nginx正在读取请求头的连接数 |
Writing |
当前nginx将响应写回客户机的连接数量 |
Waiting |
当前空闲客户端连接等待请求的数量 |
6.2 nginx状态信息功能事件(stub_status_module)
01. nginx -V ---查看编译参数中,是否加载了状态模块信息(--with-http_stub_status_module )
配置nginx服务的状态模块信息
02. 修改配置文件 添加模块信息
cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server{
listen 80;
server_name status.etiantian.org;
location / {
stub_status on;
access_log off;
}
}
include extra/www.conf;
include extra/bbs.conf;
include extra/blog.conf;
}
第7章 日志
7.1 日志信息中个各数据说明
日志参数 |
参数说明 |
$remote_addr |
直接访问客户端地址 |
$http_x_forwarded_for |
间接访问客户端地址(一般前面会有代理服务器) |
$remote_user |
远程客户端用户名称 |
$time_local |
记录访问时间与时区 |
$request |
用户的请求,使用的http协议 |
$status |
返回状态,200,404,304等 |
$body_bytes_sents |
发送的body字节数 |
$http_referer |
引用页(表示从哪个链接跳转访问过来的) |
$http_user_agent |
客户端浏览器信息 |
第8章 nginx rewrit
8.1 rewrit中的正则表达式
字符 |
描述 |
\ |
将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。 例如:“\n”匹配一个换行符,序列“\\" 和“\$”则匹配“$”
|
^ |
匹配输入字符串的起始位置,如果设置了RegExp 对象的Multiline 属性, ^也匹配“\n”或“r”之后的位置 |
$ |
匹配输入字符串的起始位置,如果设置了RegExp 对象的Multiline 属性, $也匹配“\n”或“r”之前的位置 |
* |
匹配前面的字符零次或多次,例如,ol*能匹配"o”及“oll”,*等价于{0.} |
+ |
匹配前面的字符一次或多次,例如,"ol+" 能匹配“ol”及”oll"”,但不能匹配"o”,+ 等价于{1,}
|
? |
匹配前面的字符零次或一次,例如,"do(es)?" 可以匹配"do”或"does" 中的“do”,.? 等价于{0,1} 当该字符紧跟任何一个其他限制符(*,+?,{n},{n},{n,m})的后面时,匹配模式是非贪婪模式的,非贪婪模式会尽可能少地匹配所搜索的字符串,而默认的贪婪模式则会尽可能多地匹配所搜索的字符串,例如,对于字符串'oooo","o+ ?" 将匹配单个“o”,而“o+" 将匹配所 有“o” |
. |
匹配除“\n" 之外的任何单个字符,要匹配包括“\n" 在内的任何字符,请使用像"{.\n}"这样的模式 |
{pattern} |
匹配括号内的pattern,并可以在后面获取对应的匹配,常用$0.$9 属性获取小括号中的匹配内容。要匹配圆括号字符,请使用“\(”或"\)” |
8.2 rewrite 最后一项参数flag标记说明
flag标记符号 |
说明 |
last |
本条规则匹配亮成后继续向下匹配斯的locationURL规则 |
break |
本条规则匹配亮成即终止,不再匹配后面的任何规则 |
redirect |
返回302临时重定向浏览器地址栏会显示跳转层的URL地址 |
permanent |
返回301永久重定向浏览器地址栏会显示跳转层的URL地址 |