玖叶教程网

前端编程开发入门

nginx学习笔记(nginx怎么学)

nginx

概念与应用

  1. 反向代理正向代理在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。客户端主动配置或设置代理服务器。反向代理客户端不需要配置代理服务器,反向代理服务器会根据客户端不同的请求,转发到不同的实际服务器中去,然后由反向代理服务器返回给客户端。客户端对服务器处理无感知。暴露的是反向代理服务器,隐藏了实际服务器的ip和端口。
  2. 动静分离加快网页解析速度,将动态页面和静态页面在不同服务器上保存,加快解析速度。4、高可用 解决tomcat服务器宕机、nginx服务器本身宕机导致访问失败的问题。

安装

1、安装依赖包gcc、pcre-devel、zlib-devel、openssl-devel

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

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

3、配置nginx.conf

# 打开配置文件
vi /usr/local/nginx/conf/nginx.conf

修改端口和服务器ip

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

再次启动即可! 5、查看nginx进程是否启动

ps -ef | grep nginx

6、web查看

常用命令

所有命令都必须进入到usr/local/nginx/sbin目录下执行

1、查看版本号

./nginx -v

2、关闭nginx

./nginx -s stop

pkill -9 nginx

3、启动nginx

./nginx

4、重新加载nginx

./nginx -s reload

反向代理设置1

效果:访问反向代理服务器地址后页面转发到其他网址

配置nginx.conf 添加proxy_pass 值为需要nginx转发的地址

proxy_pass http://127.0.0.1:8089;

2、重新加载nginx

./nginx -s reload

反向代理设置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和请求字符串做匹配

负载均衡

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;
}


动静分离

动态请求和静态请求(html、css、image等)分开

为什么?提高访问效率

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求和静态请求分开,可以理解成使用Nginx处理静态页面,tomcat处理动态页面。动静分离冲目前实现角度来讲大致分为两种:

一种是存粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。

通过location指定不同的后缀名实现不同的请求转发,通过 expires 参數设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量,具体 expires 定 义:是给一个资源设定一个过期时间,也就是说无需去服务端证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,此种方法非常适合不经常变动的资源。〈如果经常更新的文件,不建议使用expires 来缓存〉,我这里设置3(1,表示在这3天之内访问这个url,发送一个请求.比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,則直接从取务器重新下载,返回状态码200。

高可用

当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 {
		[email protected]       #定义报警邮件
	}
	notification_email_from [email protected]            #定义发件人
	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

nginx原理

1、Master&&Worker


2、worker争抢工作

3、一个master多个work好处

a、使用nginx -s reload热部署,重新加载后空闲work会更新配置,不影响有任务的work

b、每个work是独立进程的,如果有其中一个work出现问题,其他work相对独立,可以继续争抢request,实现请求过程,不会服务中断。

4、设置多少个work?

与服务器cpu核数相等最好。

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

End?

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言