Nginx

nginx基本概念

1  nginx 是什么?能做什么?

nginx是一个高性能的HTTP和反向代理的Web服务器,同时也提供了IMAP/POP3/SMTP服务

轻量级,占有内存少,并发性强,有报告表明Nginx能支持50000个并发连接数

功能:1 反向代理  2 负载均衡  3 动静分离  4 高可用

 

2  反向代理

正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问

反向代理:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的地址。

 

3  负载均衡

单个服务器解决不了,我们增加服务器数量,然后将请求分发到各个服务器上。将原先请求到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器也就是我们所说的负载均衡。

 

4 动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析。加快解析速度,降低原来单个服务器的压力。

 

nginx安装和命令和配置文件

nginx操作的常用命令:

    使用nginx操作命令前提条件:    必须进入nginx的目录: XX.../nginx/sbin  里面有个nginx文件

    查看nginx版本号:        ./nginx  -v

    启动nginx:       ./nginx

    关闭nginx:       ./nginx  -s  stop

    重加载nginx:       ./nginx -s reload

nginx 配置文件: 

位置:    XX.../nginx/conf/nginx.conf

三部分组成:

全局块:从配置文件开始到events块之间。设置整体运行的指令
worker_processes  1; // 这是nginx并发处理服务的关键配置,worker_processes值越大,并发处理量也越大,但是会收到硬件软件的制约

影响nginx和用户网络的连接
events块:events {
    worker_connections  1024; //最大连接数
}

http块,配置最频繁:
http {...}

http块包括了http和server两部分

http全局块配置的指令包括文件引入、MIME-TYPE定义,日志自定义,连接超时时间,单链接请求数上限等

server块和虚拟主机有密切关系

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

而每个server块也分为全局server块,以及可以同时包含多个location块

全局server块:

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置

location块:

一个server块可以配置多个location块

主要作用于nginx服务器接收到的请求字符串,对虚拟主机名称之外的的字符串进行匹配,对特别的请求进行处理。地址定向,数据缓存和应答控制等功能,还有许多第三方模块的配置也可以在这里进行

http {
    include       mime.types; 
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    proxy_set_header X-Real-IP $remote_addr;

    server {
        listen       80;  #监听80端口
        server_name  localhost;  #主机名称localhost
        
        client_max_body_size 100m;   

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

	location /api/xtgl/ { # 接收到192.168.0.71:80/api/xtgl/请求
            proxy_pass http://192.168.0.71:7080/; # 转发
        }

	location /api/login/ {
            proxy_pass http://192.168.0.71:7081/;
        }
	location /api/v1/ {
            proxy_pass http://192.168.0.71:7080/;
        }

	location /api/v2/ {
            proxy_pass http://192.168.0.71:7081/;
        }
	location /api/v3/ {
            proxy_pass http://192.168.0.71:7090/;
        }

    }

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

nginx配置实例

 反向代理实例

案例一:

location / {
            root   html;
            proxy_pass http://192.168.0.71:7081/; 
            index  index.html index.htm;
        }

案例二:

server {
       listen       8009;
       server_name  somename  alias  another.alias;

       location ~/edu/ { #正则表达式的形式,里面有deu转发到。。。
           proxy_pass http://192.168.0.71:7081/;
       }
       location ~/vod/ { #正则表达式的形式,里面有vod转发到。。。
           proxy_pass http://192.168.0.71:7083/;
       }
}

 

负载均衡实例

http{
    ...
    upstream myserver{
        # 待负载均衡的两台服务器
        # ip_hash;
        server 192.168.0.71:8080 weight=2;
        server 192.168.0.71:8081;
        # fair;
    }
    server{
        location /v1/{
            proxy_pass http://myserver;
            # proxy_connect_timeout 10;
        }
    }
    ...
}

分配策略:

1  轮询(默认)

2  weight 代表权重,默认为1,权重越高被分配的用户端越多

3 ip_hash :每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

4 fair : 按后端服务器的响应时间来分配请求,响应时间短的优先分配

 

动静分离实例

简单来说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。

实现的角度分为两种:

1 静态文件单独成独立的域名,放在独立服务器上,目前主流推崇方案

2 动态静态文件混合在一起发布,通过nginx分离

通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器的请求和流量。

# /data/www/ 路径
location /www/ {
	root   /data/;
	autoindex on; # 能列出文件目录
}

 

nginx配置高可用的集群

主备服务器,预防一台nginx宕机。需要用到keepalived

准备工作:

1 需要两台安装了 nginx  和 keepalived 的服务器

keepalived安装后会在etc里生成一个目录,就是keepalived,里面有一个 keepalived.conf 文件

 

完成keepalived中的主备配置:

以上ens160,docker0等都为网卡

 

keepalived:

  一个功能比较完整的keepalived 的配置文件,其配置文件keepalived.conf 可以包含三个文本块:全局定义块、VRRP 实例定义块及虚拟服务器定义块。全局定义块和虚拟服务器定义块是必须的,如果在只有一个负载均衡器的场合,就不须VRRP 实例定义块

https://www.cnblogs.com/coprince/p/6738710.html

#全局定义
global defs{
	notification_email{
		acassen@firewall.loc
		failover@firewall.loc
		sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	smtp_server 192.168.17.129
	smtp_connect_timeout 30
	router_id LVS_DEVEL #唯一标志,可以是ip,通过域名访问服务器需要在/etc/hosts中配置
}

# vrr_script 实例定义块
vrr_script chk_http_port{
	script "/user/local/src/nginx_check.sh"
	interval 2 #检测脚本执行间隔,判断nginx是否失效
	weight 2 # 设置当前服务器的权重
}

vrr_instance VI_1{
	state BACKUP #备份服务器上 将MASTER 改为 BACKUP
	interface ens33 #网卡
	virtual_router_id 51 #主备机的virtual_router_id必须相同
	priority 100 # 主备机取不同的优先级,主机值较大,备份机值较小
	advert_int 1 # 每隔1秒发送一次心跳,检测主机是否活着
	authentication{
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress{
		192.168.18.28 # VRRP H虚拟地址,可以绑定多个
	}
}

niginx_check.sh检测脚本如下

启动keepalived

启动
systemctl start keepalived.service
停止
systemctl stop keepalived.service

 

nginx执行原理

1 一个master 和多个worker的好处

  a 可以使用 nginx -s reload,这是一种热加载(热部署)方式,不需要停止启动,就可以让nginx的配置生效,利于nginx进行热部署操作

  b 每个work独立进程,不需要加锁。如果其中一个wordk挂了,其他work还可以进行工作,不会造成服务中断

  c  设置多少work合适?每隔work进程可以把一个cpu数发挥到极致,因此work数和服务器的cpu数目相等最适宜 

 

连接数:work_connection

问:发送一个请求占用worker的几个连接数?

答:要么2个,要么4个。访问静态资源,来一个连接,去一个连接,所以占用2个;访问动态资源,还要来去访问tomcat,因此4个。

 

问:nginx中有一个master,4个worker,每个worker支持最大的连接数是1024,目前worker支持的最大并发数是多少?

答:4 * 1024 /2或者4

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值