中文文档:http://www.nginx.cn/doc/
Nginx简介:
与Apache(httpd)类似,是一个开源的,支持高性能、高并发的www服务和代理服务软件,由俄罗斯人IgorSyoer开发的,最初被应用在俄罗斯的大型网站www.rambler.ru上,后来作者将源代码以类BSD许可的形式开源出来供全球使用
在功能应用方面,Nginx不但是一个优秀的Web服务软件,还是具有反向代理,负载均衡功能和缓存功能。在反向代理负载均衡功能方面,它类似于大名鼎鼎的LVS、HAproxy等专业代理软件,但Ngix部署起来更为简单、方便;在缓存服务功能方面,它又类似于Squid等专业的缓存服务软件
Nginx软件使用排名参见:https://news.netcraft.com/
Nginx的重要特性及应用场合:
它所具备的其它WWW服务软件特性:
Nginx在企业的功能应用:
为什么Nginx比Apache性能高:
Nginx使用最新的epoll(Linux2.6内核)和kqueue(FeeBSD)异步网络I/O模型,而Apache使用的是传统的select模型,目前Linux下能够承受高并发访问的Squid、Memcached软件都采用的是epool模型
apache select和Nginx epoll的技术对比:
指标 |
select |
epoll |
随着连接数增加性能下降 |
随着连接数增加,性能基本上没下降 |
|
连接数 |
连接数有限,最大数不能超过1024,超过1024,则需要修改FD_SETSIZE宏,重新编译 |
连接数无限制 |
内存处理机制 |
线性轮询 |
回调callback |
开发复杂性 |
低 |
高 |
下载安装:
Nginx软件有三种版本:稳定版、开发版和历史稳定版
下载: wgethttp://nginx.org/download/nginx-1.12.1.tar.gz
检查环境:
cat /etc/redhat-release 查看系统版本
uname -r 查看内核版本
关闭firewall、selinux
安装依赖包:
检查是否已安装pcre、pcre-devel包:
rpm -qa pcre-devel pcre
如果没有刚安装:
yum install -y pcre pcre-devel
检查是否已安装openssl、openssl-devel包 :
rpm -qa openssl-devel openssl
如果没有刚安装:
yum install -y openssl openssl-devel
创建nginx用户:
useradd nginx -s /sbin/nologin -M
编译和安装:
nginx命令其它用法:
Nignx启动的疑难杂症:
部署一个站点:
Nginx的默认站点目录是Nginx安装目录上的html目录,如果要部署一个网站,把开发好的程序放全部到html目录下即可
Nginx技术深入剖析:
Nginx模块说明:
Nginx之所以功能强大,是因为它有众多功能模块,以下是常用的模块
Nginx http功能相关模块 |
模块说明 |
ngx_http_core_module |
包括一些核心的http参数配置,对应Nginxr的配置为http区块部分 |
ngx_http_access_module |
访问控制模块,用来控制网站用户对Nginx的访问 |
在生产环境中,配置、调整及优化Nginx软件,主要就是根据这些模块的功能修改应用的参数来实现
nginx负载均衡的5种策略
http://172.18.14.71/erp/
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、加权轮询
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.0.14 weight=5;
server 192.168.0.15 weight=10;
}
3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
在需要使用负载均衡的server中增加
proxy_pass http://backserver/;
upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义
location块:
如果要精确查找:
location /XXXXXXX {
root /home/qmkx/html;
index XXXXXX.html;
}
直接将XXX改一个别的名字 然后 将后面目录 及html 改为另外一个即可
根据参数优化Nginx服务性能
配置worker进行个数:
worker_processes: 默认值为1, 官方建议设置为CPU核数。其实在一些高流量高并发场合可以将其设置为 CPU核数*2,我一般使用4
上传文件大小的限制:
client_max_body_size参数设置最大允许的客户端请求主体大小,在请求头中有"Content-Length"决定,如果超过了此配置值,服务器端会给浏览器返回413错误,意思就请求条目过大
使用Nginx zip压缩实现性能优化:
用户请求的内容在服务端发送给浏览器时,Nginx服务器会根据一些具体策略实施压缩。以节约带宽,同时加快响应速度来提升用户体验
Nginx的压缩与Apache的压缩功能很相似,Nginx的gzip压缩功能依赖于ngx_http_gzip_module模块,默认已安装
允许重新定义或者添加发往后端服务器的请求头:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
一些不对劲的东西(报错):
···在根据生产环境改完nginx.conf后,先使用nginx -t检查 如果出现以下报错:
nginx: the configuration file /usr/local/nginx-1.12.2/nginx.conf syntax is ok
nginx: [emerg] mkdir() "/var/temp/nginx/client" failed (2: No such file or directory)
nginx: configuration file /usr/local/nginx-1.12.2/nginx.conf test failed
如果在nginx -t 时遇见这个 直接用root权限的角色创建文件夹即可。
root:mkdir -p /var/temp/nginx/client
如果生产环境不允许使用root那么增加sudo即可
biubiubiu: sudo mkdir -p /var/temp/nginx/client·····如果在配置反向代理proxy_pass及upstream的时候 遇见[emerg] "proxy_pass" directive is not allowed here in /etc/nginx/nginx.conf第一先查看是不是编译的时候没将模块加入 如果加入模块 那就是位置的问题 proxy_pass必须要放在http{}中 我一般将它放在location / {的下一行 upstram我一般将它放在http{的下一行 然后重启即可
<未完待续,持续更新>