nginx学习日记

nginx介绍

nginx是一个http和web反向代理的服务器,处理并发性能十分强大,最高可达50000个并发连接数,

特点:占用内存小,并发能力高,

正向代理

nginx不仅可以做反向代理,也可以用作正向代理来进行上网,

正向代理:局域网  访问外网时通过代理服务器来访问,这就是正向代理。

反向代理

用户对代理是无感知的,客户端发送请求到反向代理服务器,代理服务器选择目标服务器获取数据,返回给客户端。(在客户端看来,反向代理服务器和目标服务器是一个服务器,客户端只知道代理服务器的地址。)

负载均衡

随着网站人数的增多,客户端并发访问服务器时,服务器压力会很大。

负载均衡就是增加服务器数量,将请求均衡的发送到各个服务器上,

nginx在这种架构模式的充当的负载均衡服务器,起到平衡请求的作用,从而合理分配客户端请求,从而减少服务器压力。

动静结合

为了加快网站的解析速度,我们可以静态资源与动态资源,分别部署在不同的服务器上,加快解析速度,减低单一服务器的压力。

Nginx环境搭建

1.下载nginx

wget -c https://nginx.org/download/nginx-x.xx.x.tar.

2.安装nginx所需要的环境

yum install gcc-c++  :nginx编译环境

yum install -y pcre pcre-devel  :第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码 。

yum install -y zlib zlib-devel  :nginx压缩工具。

yum install -y openssl openssl-devel : 传输安全

3.解压 nginx;

tar   -zxvf nginx-x.xx.x.tar.gz

之后进入解压文件 执行   ./configure

4.安装编译nginx

在解压后的Nginx-x.xx.x中分别执行

make

make install

命令。

5.测试ngxin

在usr/local.nginx/sbin下执行 ./nginx 

查看是否启动:

ps aux|grep nginx

登录nginx服务器及linux的ip

如果不能访问,则查看linux防火墙白名单时候,开启80端口(nginx默认端口)

firewall-cmd --list-ports  查看linux防火墙以开启的端口;

firewall-cmd --zone=public --add-port=端口号/tcp --permanent

添加端口后需要重启防火墙:systemctl reload firewalld

Nginx常用命令

在nginx/sbin目录下:

1.启动nginx。

./nginx

2.关闭nginx

./nginx  -s stop 

3.重启nginx

./nginx -s reload

4.查看nginx进程

ps aux|grep nginx

nginx配置文件

配置文件分为3大块;

nginx全局块:

从配置文件开始到events之间都为全局块,此部分一般是设置nginx服务器整体的配置。

例如work-processes 1; 是有关nginx处理并发能力的参数,数值越大,处理并发能力越强(但是受到硬件等环境的影响,根据cup数量配置,一般为cup的倍数。) 

events块:

events块涉及的指令影响,nginx与用户之间的网络连接 

例如 woker_connections 表示nginx的最大连接数。

HTTP块:

http全局块:

http全局指令一般包括:文件引入,MINE-TYPE定义,日志自定义 ,连接超时时间,单连接请求上线等。

server块:

这块的指令与虚拟主机有密切联系。虚拟主机从用户角度看和硬件主机没有什么区别。

每个http可以包括多个server块,每个server块就相当于一个虚拟主机,

每个server块又可以包括多个location块

反向代理简单实现

1.环境要求:

linux安装jdk和tomcat

2.开启tomcat(注意防火墙白名单)

在tomcat的bin目录下执行  ./startup.sh

参考上边配置:我们监听的是80端口,如果我们访问此端口我们会跳转到

location 内的 proxy_pass 对应的ip,此时nginx作为反向代理,监听server_name对应的ip下的listen对应的端口,访问该端口时,会跳转到prexy_pass对应ip的地址上;

反向代理实例:

server {
    listen       9001;
    server_name  192.168.10.129;

    location ~ /edu/ {
        proxy_pass  http://127.0.0.1:8080
    }

    location ~ /vod/ {
        proxy_pass  http://127.0.0.1:8081
    }
}

配置解释:

listen:监听端口

server_name : linux主机ip

~/edu/  路径上出现edu 就跳转到  proxy_pass对应的  ip端口 所对应的相同地址。

location指令补充:该指令用于匹配url,语法如下

location [ = | ~ | ~* | ^~] uri {

}


(1)= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,
        如果匹配成功,就停止继续向下搜索并立即处理该请求。
(2)~:用于表示 uri 包含正则表达式,并且区分大小写。
(3)~*:用于表示 uri 包含正则表达式,并且不区分大小写。
(4)^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求
        字符串匹配度最高的 location 后,立即使用此 location 处理请求,
        而不再使用 location块中的正则 uri 和请求字符串做匹配。


负载均衡简单实现

1.负载均衡实现策略

1.轮询:nginx将请求顺序的分发给后端服务器,

2.源地址哈希法:根据客户端的ip地址,通过哈希函数得到唯一 一个数值,通过这个数值,固定的发给特定服务器,当后端服务器列表不变时,客户端只能特定访问某个服务器。

3.随机:通过系统的随机算法,随机将请求分发给服务器。

4.加权轮询:不同服务器的负载能力不同,给负载能力强的服务器设置更高的权重,处理更多请求。

5.加权随机:和加权轮询类似,只不过时随机分配;

6.最小连接数:动态的将请求分配给当前连接数最小的服务器。

1.权重(轮询)

       upstream  test-server(自定义名称) {
       #每一个server对应一个负载服务
       server    localhost:8080  weight=3; 
       server    localhost:8081  weight=1;
   }

权重越高被访问的概率越高

2.轮询

       upstream  test-server(自定义名称) {
       #每一个server对应一个负载服务
       server    localhost:8080 ; 
       server    localhost:8081;
   }

3.ip_hash

     upstream  test-server(自定义名称) {

       ip_hash;
       #每一个server对应一个负载服务
       server    localhost:8080 ; 
       server    localhost:8081;
   }

ip_hash设置后,同一个用户访问时就只能单一访问唯一一个负载服务。

动静结合简单实现

配置文件

server {
    listen       9001;
    server_name  192.168.17.129;

   (tomcat) location ~ /edu/ {

        root html;
        proxy_pass  http://127.0.0.1:8080
    }

   (nginx)location ~/image/ {

     root   /static/

}
}

nginx传输静态资源的速度,大约是tomcat的6倍,选择nginx处理静态资源,tomcat处理动态资源,这样可以提高资源的加载速度。

nginx的高可用集群

背景

  在实际生产环境中,我们的服务器可能出现故障,如果我们只是用一台nginx服务器,那么出现故障时,用户就无法请求服务器。因此我们可以同时使用多台服务器,从而不免不幸~~。

高可用的集群实现环境

1.至少两台nginx服务器,

2.keepalived

3.虚拟ip

4.linux环境需求:

(1)都装上nginx和keepalived;

keeplived安装命令 yum install keepalived -y

(2)设置nginx与keepalived配置文件

nginx配置与以前没有差异,

keeplived:

global_defs {
     notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
     }
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 192.168.10.129
     smtp_connect_timeout 30
     # 通过它,可以访问到主机,在hosts文件中,要做映射关系,类似于 127.0.0.1 LVS_DEVEL
     router_id LVS_DEVEL  
}

vrrp_script chk_http_port {
     script "/usr/local/src/nginx_check.sh"     # 执行脚本所在的位置
     interval 2     #检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
     weight 2
}
    
vrrp_instance VI_1 {
     state MASTER     # 备份服务器上将 MASTER 改为 BACKUP
     interface ens33     # 绑定的网卡
     virtual_router_id 51     # 主、备机的 virtual_router_id 必须相同
     priority 90     # 主、备机取不同的优先级,主机值较大,备份机值较小
     advert_int 1     #每隔一秒发送一次心跳,确保从服务器是否还活着
     authentication {        # 心跳检测需要的密码
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
     192.168.17.50     # VRRP H 虚拟地址
     }
}

心跳检测脚本

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
 /usr/local/nginx/sbin/nginx     #Nginx启动命令的位置
 sleep 2
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
 killall keepalived
 fi
fi
 

5.两台虚拟机开启nginx和keepalived

启动 nginx:    ./nginx
启动 keepalived:    systemctl start keepalived.service

6.测试

访问虚拟端口   192.168.17.50

测试成功后,关闭主服务器,

再次访问 192.168.17.50,

还可以访问nginx。

nginx原理

nginx工作原理:

 1.一般情况下,在nginx启动后,会有一个master和多个worker,master管理多个worker,

worker(进程)从master竞争请求,各个woker是相互独立的,woker数量是可以设置的,我们一般设置为cpu的倍数。

2.在nginx启动后,重新加载配置文件时,worker会继续竞争请求,等到新的worker加载网配置文件后,老的我客人就会下岗了。

3.woker处理用户进程,master会根据配置文件产生多个一个监听端口socket,然后在产生多个worker进程,多个worker进行竞争请求(通过共享锁accpet-mutex保证”唯一性“),

之后进行请求数据的一系列操作,最后断开连接。

4.nginx的时间驱动机制

nginx采用异步非阻塞式策略,通过epool库(高性能事件驱动库)等实现,

nginx将一次请求分为多个阶段,每个阶段仅仅只完成请求中的一部分,如果期间发生阻塞nginx不会等待,会去处理请求中的其他部分。这样就大大的调高了nginx的并发能力。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值