1.1、基本概念
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
1.2负载均衡策略
1)一种是通过硬件来进行解决,常见的硬件有F5、Array等商用的负载均衡器,但是它们是比较昂贵的
2)一种是通过软件来进行解决的,常见的软件有
阿里云服务器负载均衡SLB
Nginx+keepalived
LVS(Linu
2、基本配置
ng基本配置主要是在/usr/local/nginx/nginx-1.6.2/conf/nginx.conf
记住里面的server里面的配置
listen:表示监听的端口
server_name:可以配置具体域名
location:可以配置具体的拦截的地址,可以进行请求重定向
access_log:则是nginx访问日志配置
x Virtual Server)、haproxy等技术
3:日志切分:
ng日志管理
nginx访问日志放在logs/host.access.long,并使用main格式(还可以自己定义格式)
对于main格式如下定义:
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
log_format格式变量:
$remote_addr #记录访问网站的客户端地址
$remote_user #远程客户端用户名
$time_local #记录访问时间与时区
$request #用户的http请求起始行信息
$status #http状态码,记录请求返回的状态码,例如:200、301、404等
$body_bytes_sent #服务器发送给客户端的响应body字节数
$http_referer #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。
$http_user_agent #记录客户端访问信息,例如:浏览器、手机客户端等
$http_x_forwarded_for #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置
在我们日常生活中,对nginx日志的分析非常的重要,通常需要运维去对Nginx的日志进行切割和分析处理。比如一个定时任务,去处理nginx日志等。
举个例子
第一步:分析如何去实现日志切分,编写shell脚本,这里按照每分钟去进行切割日志最后放入/usr/local/nginx/datalogs目录下,最后重启nginx。脚本命名为log.sh,并将其放入/usr/local/nginx/sbin目录下
第二步:定时任务对脚本进行调度
然后加入,并且保存退出
最后我们cd到/usr/local/nginx/datalogs就能查看到每分钟切割的日志了
4:反向代理(proxy_pass)与负载均衡(upstream)
说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理
在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
反向代理
明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用nginx进行反向代理实现的,并且通过封装nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息:
nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理。
http://tengine.taobao.org/
那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图:
通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色
反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!
location语法:表示uri方式定位
location语法:表示uri方式定位
1、location=pattern {} 精确匹配
2、location pattern {} 一般匹配
3、location ~ pattern {} 正则匹配
举个例子
环境:
nginx1:192.168.46.144
tomcat1:192.168.46.145
tomcat2:192.168.46.146
配置nginx:
我这里的路径是/usr/local/nginx/conf/nginx.conf
最后重启nginx
访问http://192.168.46.144/test/
会被导航到http://192.168.46.145:8080/test/ 和http://192.168.46.146:8080/test/
注意:反向代理之后,获取客户端ID地址为nginx服务器地址,这里需要nginx进行forward,设置真是的IP地址
5、nginx优化
nginx可以对数据进行压缩,对一些图片、html、css、js等文件进行缓存
从而实现动静分离等优化功能,在网站优化的时候非常有用
动静分离:其实就是通过不同的请求链接,将动态的请求链接于静态的请求分离开了,使静态的文件直接访问nginx目录下的问题。动态的访问tomcat,如匹配.action|.do就访问tomcat,.jsp|.html就访问nginx目录的静态文件。这样就实现了动静分离
其他的相关配置如下可以根据实际情况添加或者修改