1、概念与应用
- 反向代理
- 正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。客户端主动配置或设置代理服务器。
- 反向代理
客户端不需要配置代理服务器,反向代理服务器会根据客户端不同的请求,转发到不同的实际服务器中去,然后由反向代理服务器返回给客户端。客户端对服务器处理无感知。暴露的是反向代理服务器,隐藏了实际服务器的ip和端口。
- 动静分离
加快网页解析速度,将动态页面和静态页面在不同服务器上保存,加快解析速度。
4、高可用
解决tomcat服务器宕机、nginx服务器本身宕机导致访问失败的问题。
2、安装
2.1、安装依赖包gcc、pcre-devel、zlib-devel、openssl-devel
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
2.2、下载nginx
nginx下载地址:https://nginx.org/download/
## 解压
tar -zxvf nginx-1.9.9.tar.gz
##进入nginx目录
cd nginx-1.9.9
## 配置
./configure --prefix=/usr/local/nginx
# make
make && make install
2.3、配置nginx.conf
# 打开配置文件
vi /usr/local/nginx/conf/nginx.conf
修改端口和服务器ip
2.4、启动nginx
/usr/local/nginx/sbin/nginx -s reload
如果出现报错:nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed
则运行:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
再次启动即可!
2.5、查看nginx进程是否启动
ps -ef | grep nginx
2.6、web查看
3、常用命令
所有命令都必须进入到usr/local/nginx/sbin目录下执行
1、查看版本号
./nginx -v
2、关闭nginx
./nginx -s stop
或
pkill -9 nginx
3、启动nginx
./nginx
4、重新加载nginx
./nginx -s reload
4、反向代理设置1
效果:访问反向代理服务器地址后页面转发到其他网址
配置nginx.conf 添加proxy_pass 值为需要nginx转发的地址
proxy_pass http://127.0.0.1:8089;
2、重新加载nginx
./nginx -s reload
5、反向代理设置2
效果:目标服务器有多个tomcat,
当用户访问路径中包含edu则访问端口为8080的tomcat
当用户访问路径中包含vod则访问端口为8081的tomcat
1、核心配置
server{
listen 9132;
server_name 112.126.60.66;
location ~/edu/{
proxy_pass http://127.0.01:8080;
}
location ~/vod/{
proxy_pass http://127.0.0.1:8081;
}
}
2、配置说明
- ~:表示url包含正则表达式,并区分大小写
- ~*:表示url包含正则表达式,并且不区分大小写
- =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
- ^~:用于不含正则表达式的uri前,要求nginx服务器找到标志uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配
6、负载均衡
1、http块加入配置
upstream 自定义名称{
server ip:port;
server ip:port;
}
2、server—location配置proxy_pass
location /{
proxy_pass http://自定义名称
}
3、分配策略
a、轮询(默认)
每个请求按照实际顺序之一分配到不同服务器,如果服务器宕机,会自动剔除
b、weight
权重。默认为1,权重越高被分配客户端越高。
upstream 自定义名称{
server ip:port weight=10;
server ip:port weight=5;
}
c、ip_hash
每个请求按照访问ip的hash结果分配,这也每个访客固定访问一个后端服务器,可以解决session问题。
upstream 自定义名称{
ip_hash;
server ip:port;
server ip:port;
}
d、fair(第三方)
按后端服务器的响应时间分配服务器,响应时间越短,越优先分配。
upstream 自定义名称{
server ip:port;
server ip:port;
fair;
}
7、动静分离
动态请求和静态请求(html、css、image等)分开
为什么?提高访问效率
Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求和静态请求分开,可以理解成使用Nginx处理静态页面,tomcat处理动态页面。动静分离冲目前实现角度来讲大致分为两种:
一种是存粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。
通过location指定不同的后缀名实现不同的请求转发,通过 expires 参數设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量,具体 expires 定 义:是给一个资源设定一个过期时间,也就是说无需去服务端证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,此种方法非常适合不经常变动的资源。〈如果经常更新的文件,不建议使用expires 来缓存〉,我这里设置3(1,表示在这3天之内访问这个url,发送一个请求.比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,則直接从取务器重新下载,返回状态码200。
8、高可用
当tomcat宕机后nginx会自动排除宕机服务器,采用正常的tomcat访问。nginx宕机呢?
方案:提供主备nginx两台服务器,用keepalived做路由提供访问。当主nginx服务器宕机后会自动切换到备用nginx服务器上。
1、配置高可用准备工作
a、准备两台nginx服务器
b、安装nginx
c、安装keepalived
2、在两台nginx服务器上安装keepalived
yum install keepalived -y
keepalived安装位置为:/etc/keepalived
3、完成高可用配置
修改/etc/keepalived/keepalived.conf文件
global_defs {
notification_email {
root@networkquestions.org #定义报警邮件
}
notification_email_from warn@networkquestions.org #定义发件人
smtp_server localhost #指定smtp服务器,这里直接改为localhost
smtp_connect_timeout 30 #smtp连接超时时间
router_id 112.126.60.166 #标识id,通常为 hostname,当前部署机器的IP
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 3 #(检测脚本执行的间隔)
weight 2 #执行sh后,修改当前服务器权重
}
vrrp_instance VI_1 {
state MASTER #设置为主服务器,备用服务器应设置为BACKUP
interface eth0 #定义虚拟ip绑定接口 ifconfig命令查询
virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组
mcast_src_ip 112.126.60.66 #发送多播包的地址,如果不设置默认使用绑定的网卡
priority 100 #优先级,必须高于从服务器
advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样
authentication { #认证,默认即可。主从需一致。
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
112.126.60.88 #绑定的虚拟ip,可以绑定多个,换行填写
}
}
编写nginx状态检测脚本 /etc/keepalived/nginx_check.sh,如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalived将虚拟 ip 绑定到 BACKUP 机器上。内容如下:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/home/wangzi/soft/nginx/sbin/nginx
sleep 5
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
4、启动nginx和keepalived
keeplived启动命令:
systemctl start keepalived.service
启动检查:
ps -ef | grep keepalived
停止keepalived服务:
systemctl stop keepalived.service
9、nginx原理
1、Master&&Worker
2、worker争抢工作
3、一个master多个work好处
a、使用nginx -s reload热部署,重新加载后空闲work会更新配置,不影响有任务的work
b、每个work是独立进程的,如果有其中一个work出现问题,其他work相对独立,可以继续争抢request,实现请求过程,不会服务中断。
4、设置多少个work?
与服务器cpu核数相等最好。<br /><br />5、连接数worker_connection
a、发送一个请求,占用worker几个连接数
(静态请求)2个或者(动态请求)4个
b、nginx有一个master,四个worker,每个woker支持的最大连接数是1024,支持的最大并发数是多少?
普通的静态访问最大并发数:worker_connection*woker_processes/2=2048
http反向代理,最大并发数: worker_connection*woker_processes/4=2014