一、什么是Nginx
nginx是一款高性能的http服务器/反向代理服务器。
(一)应用场景
(1)http服务器,nginx是一个http服务可以独立提供http服务,可以做静态服务器,
(2)虚拟主机,可以实现在一台服务器虚拟多个网站,
(3)反向代理、负载均衡
(二)反向代理
反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
(三)负载均衡
负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。
(四)负载均衡采用的策略
(1)RR(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除;
配置如下:
upstream test {
server localhost:8080;
server localhost:8081;
}
server {
listen 81;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://test;
proxy_test_header Host $host:$server_port;
}
}
(2)权重
指定轮询几率,weight与访问率成正比,用于后端服务器性能不均的情况,配置如下:
upstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
(3)ip_hash
上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
(4)fail(第三方)
按后端服务器响应时间长短来分配请求,响应时间短的优先分配
upstream backend {
fail;
server localhost:8080;
server localhost:8081;
}
(5)url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
upstream test {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
二、Nginx安装教程
(1)安装C语言环境,yum install gcc-c++;
(2)需要一些第三方的包
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel;
yum install -y openssl openssl-devel;
(3)上传nginx的压缩包并解压,make编译;
(4)创建makefile文件,使用configure创建
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
(5)之后进行make;
(6)make install 安装即可;
[root@localhost sbin]# ./nginx
nginx: [emerg] mkdir() "/var/temp/nginx/client" failed (2: No such file or directory)
解决报错:
创建多级目录: mkdir /var/temp/nginx/client -p
启动:./nginx
关闭:kill 正常关闭
./nginx -s stop
./nginx -s reload 启动
三、nginx配置虚拟主机
nginx.conf配置文件
配置其他虚拟主机:
通过nginx配置Https的服务。
vi环境下,shirft+v(V)进行复制,上下箭头选择复制的行,p选择已选复制的行,
小写的y复制,小写的t粘贴;
什么是域名以及host文件的作用:
host文件的作用:
如果配置本地host文件,再不走DNS域名解析服务了。
一个域名对应一个pi地址,一个ip可以绑定多个
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
四、nginx反向代理
正向代理:访问另一台服务器代理到禁止访问的那一台服务器。
反向打理:很多台服务器,网站入口只有一个,访问百度,百度入口只有一个,一个域名绑定一个IP地址。
配置nginx的请求转发:
nginx实现服务的请求转发功能。
五、nginx实现负载均衡
(一)nginx采用轮询的方式实现负载均衡
(二)通过调服务器的权重来实现负载均衡
六、nginx高可用 keepalived+nginx实现主备
不管什么情况下,nginx不可挂掉。
增加备份机
Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。
Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作;当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
健康检查和失败切换是keepalived的两大核心功能。 所谓的健康检查, 就是采用tcp三次握手, icmp请求, http请求, udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器, 利用VRRP(虚拟路由冗余协议, 可参考RFC文档http://tools.ietf.org/html/rfc5798) 维持主备负载均衡器的心跳, 当主负载均衡器出现问题时, 由备负载均衡器承载对应的业务, 从而在最大限度上减少流量损失, 并提供服务的稳定性。