1、nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
1.1、反向代理
正向代理
正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器),为了原始服务器取得内容,客户端向代理服务器发送一个请求并指向目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些代理的设置才能使用
反向代理
反向代理正好相反。对于客户端来说,反向代理就好像目标服务器,并且客户端不需要进行任何设置,客户端向反向代理发送请求接着反向代理判断请求走向何处,并将请求转发给真正服务器。客户端并不会感知到反向代理后面的服务,因此客户端也不需要做任何设置,只需要把反向代理服务器当作真正服务器就好了
两者的区别在于代理的对象不一样:正向代理的对象是客户端,反向代理的对象是服务器
1.2、负载均衡
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务
1.3、动静分离
将动态请求和静态请求分离。静态请求由nginx代理,动态请求由服务器处理
2、nginx安装
环境搭建
1.安装c语言的环境
yum -y install gcc-c++
2.安装pcre环境
yum install -y pcre pcre-devel
3.zlib安装
yum install -y zlib zlib-devel
4.OpenSSL安装
yum install -y openssl openssl-devel
搭建nginx
1.下载nginx压缩包
2.在/usr/local/解压
tar -zxvf nginx-1.16.1 tar.gz -C /usr/local
3.进入解压目录,检测环境
cd /usr/local/nginx-1.16.1
./configure
4.解压并安装
make && make install PREFIX=/usr/local/nginx
5.在sbin目录下启动nginx
cd /usr/local/nginx/nginx/sbin
./configure
6.测试,nginx默认是80端口,浏览器访问ip
3、反向代理
1、简单代理
域名解析过程
1.本地windows访问www.taobao.com,访问到linux中的nginx,再由nginx将这个请求代理到tomcat页面中
2.修改windows下的hosts文件,指定ip和域名
C:\Windows\System32\drivers\etc
在hosts文件中加上:
114.55.219.117 www.taobao.com
3.nginx配置文件内容
1.全局配置
worker_processes 1;-->指定nginx的并发能力,值越大能力越强
2.event块
worker_connections 1024;-->指定worker能处理的最大连接数,静态2个,动态4个
3.http块
1.引入媒体类型
2.指定默认的响应头信息
3.server块:
1.listen 80;-->指定nginx监听的端口号
2.server_name 域名|ip-->指定nginx监听的域名/ip地址
3.location / {
root 资源目录; #静态资源代理
proxy_pass 资源路径; #动态资源代理
}
4.具体配置
将nginx配置文件中的server块中的静态资源代理注释,换成如下:
location / {
proxy_pass http:localhost:8080;
}
5.重启nginx
cd /usr/local/nginx/sbin
检测:./nginx -t
重启:./nginx -s reload
6.浏览器访问www.taobao.com
客户端请求-->hosts解析域名-->nginx-->转发到tomcat-->tomcat响应给nginx-->nginx响应给客户端
2、通过路径识别
预期效果:
通过本地Windows系统访问www.taobao.com/aa/a.html-->tomcat2号
通过本地Windows系统访问www.taobao.com/bb/b.html-->tomcat3号
解压tomcat到tomcat2和tomcat3中
1.tomcat2
1.修改tomcat2占用的端口号(server.xml)
8005 --> 8006
8080 --> 8081
8009 --> 8010
2.跳转到webapps目录下,并清空内存
手动创建ROOT目录
跳转到ROOT目录中创建一个a.html,添加内容tomcat2
3.启动tomcat2,并监控日志
cd /root/tomcat2/bin/
./startup.sh
cd ../logs/
tail -f catalina.out
2.tomcat3(同上)
1.修改tomcat3占用的端口号
8005 --> 8007
8080 --> 8082
8009 --> 8011
2.跳转到webapps目录下,并清空内存
手动创建ROOT目录
跳转到ROOT目录中创建一个b.html,添加内容tomcat3
3.启动tomcat3,并监控日志
3.配置nginx的配置文件(/usr/local/nginx/conf/nginx.conf)
location / {
proxy_pass http:localhost:8080/;
}
location /aa/ {
proxy_pass http:localhost:8081/;
}
location /bb{
proxy_pass http:localhost:8082/;
}
访问www.taobao.com/aa.a.html
www.taobao.com/bb/b.html
4、负载均衡
1、轮询
预期:访问www.taobao.com/aa.a.html,第一次访问找tomcat2,第二次找tomcat3以此类推
1.配置tomcat服务器
将tomcat3webapps下面的b.html改名为a.html
2.修改nginx配置
访问www.taobao.com/aa/a.html时,可以代理到tomcat2和tomcat3;
声明一个服务集,指定多个服务的IP和端口
upstream servers{
server localhost:8081;
server localhost:8082;
}
配置具体的server
server{
listen 80;
server_name localhost;
location /aa/ {
proxy_pass http://servers/;
}
}
注:
1.upstream需要放在HTTP块中,server块之外
2.upstream中服务的IP和端口不能添加协议,也就是/
3.upstream中的各个服务的名称保持一致,server
4.在server块里location的路径后添加/
2、权重轮询
预期:访问www.taobao.com/aa/a.html,访问5次,四次给tomcat2,1次给tomcat3
只需在轮询的基础上,给每台服务器的IP和端口后面添加weight=xx即可
如:
upstream servers {
server localhost:8081 weight=4;
server localhost:8082 weight=1;
}
3、ip绑定.ip_hash
预期:访问www.taobao.com/aa/a.html,无论访问多少次,都指向一台服务器
只需在upstream块中添加 ip_hash;
-->解决session共享问题
5、动静分离
1.准备静态资源(上面演示的都是动态)
页面:/data/www/index.html
图片:/data/www/2.jpg
2.配置nginx
#代理到静态页面
location /www/ {
root /root/data/;
index index.html index.htm;
}
#代理图片
location /img/ {
root /root/data/;
autoindex on;
}
3.访问
http:www.taobao.com/www/
http:www.taobao.com/img/
6、nginx的集群
1.安装keepalived
yum -y install keepalived
2.修改keepalived配置文件
cd /etc/keepalived/
vim keepalived.conf
3.创建/usr/local/nginx/nginx_check.sh脚本
#!/bin/bash
#判断nginx服务是否启动,如果不存在,调用nginx启用命令,并停止2秒,若#启动失败,杀掉keepalived
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
设置nginx_check.sh权限,设置命令为:
chmod 777 /usr/local/nginx/nginx_check.sh
4.配置keepalived节点信息,默认配置文件为/etc/keepalived/keepalived.conf。keepalived.conf配置文件如下:
! Configuration File for keepalived
global_defs {
router_id nginx_master154 #唯一值
}
vrrp_script chk_nginx {
script "/usr/local/nginx/nginx_check.sh"
interval 2 #检测脚本时间
weight 20 #服务器宕机之后权重下降
}
vrrp_instance VI_1 {
state MASTER #主服务叫MASTER.备份叫BACKUP
interface eth0 #网卡名称
virtual_router_id 154 #路由的值,主和备一致即可
mcast_src_ip 10.63.0.154
priority 100 #主备的优先级,主大于备就行
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
10.63.0.158
}
}
}
5.克隆一份虚拟机
1.修改IP地址
2.修改keepalived配置文件
router_id nginx_master -->nginx_backup
state MASTER --> BACKUP
priority 100 --> 90
6.在两台虚拟机分别启动nginx和keepalived服务