Nginx

本文详细介绍了Nginx的安装步骤,启动命令,以及配置文件的结构和解析。内容涵盖Nginx的并发处理能力,反向代理和正向代理的概念与配置,负载均衡的策略,如何实现动静分离以优化性能,以及通过KeepAlived实现Nginx的高可用性设置。
摘要由CSDN通过智能技术生成

Nginx 安装 与 启动

apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
# Ubuntu14.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl 
sudo apt-get install libssl-dev
  • 进入 Nginx 的存放目录
# 执行 configure
./configure
# 编译 and 安装
make && make install
  • 进入目录 /usr/local/nginx/sbin/ 启动服务
1、查看 nginx 版本号
./nginx -v
2、启动 nginx
./nginx
3、停止 nginx
./nginx -s stop
4、重新加载 nginx 修改配置文件后,不想重启就用这个
./nginx -s reload
  • 通过在浏览器访问 Nginx所在服务器IP:80 可以知道是否安装和启动成功,Nginx 默认的访问端口就是 80
    在这里插入图片描述

Nginx 配置文件

  • 配置文件位置:/usr/local/nginx/conf/ —> nginx.conf

Nginx 配置文件结构解读

在这里插入图片描述

  • 第一部分:全局块
    • 从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令
    • 主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等
    • worker_processes:这是 Nginx 服务器并发处理服务的关键配置,worker processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
  • 第二部分:events 块
    • events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接
    • 常用的设置包括是否开启对多 work process 下的网络连接进行序列化、是否允许同时接收多个网络连接、选取哪种事件驱动模型来处理连接请求、每个 word process 可以同时支持的最大连接数等
  • 第三部分:http 块
    • 这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
    • http 全局块:就是http 块开头到 server 块之间的部分
      • http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等
    • server 块:每个 http 块中可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
      • 每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块
    • 全局 server 块,就是 server 块开头到 locaton 块之间的部分
      • 最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置
    • locaton 块:一个 server 块中可以配置多个 location 块
      • 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理
      • 地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行

Nginx 理论承受并发连接数

  • Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负
    载的考验,有报告表明能支持高达 50,000 个并发连接数

Nginx 实现反向代理

正向代理

反向代理

在这里插入图片描述

反向代理的配置

  • 新增一个 server 块
# 一个 http 块 中 server 块可以有多个
server {
	# 客户端访问的端口
    listen       8000;
    # 客户端访问时输入的 IP 或 域名对应的 IP
    server_name  部署Nginx的服务器IP;
	# ~ 开头,表示用正则表达式匹配。这里表示,只要客户端访问的路径中带有 /ede/ 就转发
    location ~ /ede/ {
        proxy_pass http://实际请求的目的ip(网关或应用部署的服务器ip):端口号[/其它匹配路径...];
    }
    # 一个 server 块中 可以有多 location 块
    location ~ /edu/ {
        proxy_pass http://实际请求的目的ip(网关或应用部署的服务器ip):端口号[/其它匹配路径...];
    }
}

在这里插入图片描述

  • location 后如果是单独的 /则表示任意路径匹配

Nginx 实现 负载均衡

在这里插入图片描述

负载均衡的策略

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 反向代理 + 负载均衡
upstream myserver{
	ip_hash;
	server 实际请求的目的ip(网关或应用部署的服务器ip):端口号;
	server 实际请求的目的ip(网关或应用部署的服务器ip):端口号;
	....
}
# 一个 http 块 中 server 块可以有多个
server {
	# 客户端访问的端口
   listen       8000;
   # 客户端访问时输入的 IP 或 域名对应的 IP
   server_name  部署Nginx的服务器IP;
	# ~ 开头,表示用正则表达式匹配。这里表示,只要客户端访问的路径中带有 /ede/ 就转发
   location ~ /ede/ {
       proxy_pass http://myserver[/其它匹配路径...];
       proxy_connect_timeout 10;
   }
   # 一个 server 块中 可以有多 location 块
   location ~ /edu/ {
       proxy_pass http://myserver[/其它匹配路径...];
       proxy_connect_timeout 10;
   }
}

Nginx 实现动静分离

在这里插入图片描述

常见的动静分离方式

  • 动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面
    • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案
    • 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开
      • 通过 location 指定不同的后缀名实现不同的请求转发
      • 通过 expires 参数设置,可以设置浏览器已经访问过的资源在浏览器缓存过期时间,减少与服务器之前的请求和流量
        • 也就是说给返回浏览器的资源设定一个过期时间,浏览器在没有被强制清理缓存或刷新的情况下,同样的请求无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,此种方法非常适合不经常变动的资源

在这里插入图片描述

Nginx 实现高可用

  • Nginx 实现高可用,主要通过 VIP(virtual IP) + KeepAlived
    在这里插入图片描述

  • 在 Nginx 所在服务器,安装 keepAlived

apt install keepalived

# 进入 apt install keepalived 查看有没有生成 keepalived.conf
cd /etc/keepalived	

# 没有就手动创建一个
vim keepalived.conf
  • 内容如下,有备注的地方需要注意以下,其他都照搬就行
global_defs {
	notification_email {
		acassen@firewall.loc
		failover@firewall.loc
		sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	smtp_server 本服务器的 IP
	smtp_connect_timeout 30
	# 主机的名字,gedit /etc/hosts 查看,可以直接通过修改文件内容: 127.0.0.1 hahah 指定主机名字为 hahah
	# 通过 LVS_DEVEL 能访问到主机
	router_id LVS_DEVEL 
}
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh" # 脚本内容下面提供
	interval 2 # 检测脚本执行的间隔,2s
	weight 2 # 设置当前服务器的权重,当脚本内容成立,权重降低
}
vrrp_instance VI_1 {
	state BACKUP # 备份服务器上为 BACKUP,主服务器是 MASTER
	interface ens33 # 网卡,通过 ifconfig 查看
	virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同,只要相同,值不重要
	priority 90  # 主、备机取不同的优先级,主机值较大,备份机值较小
	advert_int 1 # 心跳检查 检查当前服务器是否还健在 间隔 1s
	authentication {
		# 校验权限的方式:密码
		# 密码为1111
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.17.50 // VRRP H 虚拟IP,可以为当前服务器绑定多个
	}
}

在这里插入图片描述

  • 检测脚本,注意/usr/local/nginx/sbin/nginx这是 nginx 可执行文件的路径
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
 /usr/local/nginx/sbin/nginx
 sleep 2
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
 killall keepalived
 fi
fi

Nginx 工作原理

在这里插入图片描述在这里插入图片描述

  • 每个 worker 进程,都是独立的进程,不需要加锁,所以省掉了锁带来的开销
  • 互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的
    worker 进程
  • 可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作

需要设置多少个 worker

  • Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下
  • 每个 worker 的线程可以把一个 cpu 的性能发挥到极致,所以 worker 数和服务器的 cpu数相等是最为适宜的

最大并发数

  • 连接数 worker_connection 表示每个 worker 进程所能建立连接的最大值
  • 一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes
  • 如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问(假设静态资源放在Nginx所在服务器)最大并发数是: worker_connections * worker_processes /2
  • 如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值