服务器技术(三)--Nginx

Nginx介绍

Nginx是什么、适用场景

Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。

  • HTTP的反向代理服务器

    • 正向代理在这里插入图片描述 正向代理是在我们的客户端和服务器之间加了一个代理服务器。客户端把信息传到代理服务器上,代理服务器代替客户端,把请求信息转发,如百度、银行、文件服务等,然后把结果返回给客户端。
      代理服务器的作用为提供安全功能,还可以隐藏客户端自身的信息。
    • 反向代理
      在这里插入图片描述
      反向代理是为服务端开发的。反向代理是指客户端访问的时候,不直接访问所要请求的服务器,而是在多个服务器之前统一加一个代理服务器。
      反向代理服务器,可以隐藏服务器信息。它除了提供安全功能之外,还有一个重要的功能就是后端多个服务器之间提供负载均衡,或者对比较慢的服务器提供缓存。
      在这里插入图片描述
    • 正向+反向代理
      **加粗样式**
  • 负载均衡
    单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
    在这里插入图片描述

  • 动静分离(动态静态资源分离)
    为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
    在这里插入图片描述

    • 不分离会变慢
      像css、js、图片等静态资源其实没有必要由后端服务器去提供的,因为经过服务器去处理之后,速度会被延缓。
    • 静态资源无需经过Tomcat,Tomcat只负责处理动态请求。
    • 后缀为gif的时候,Nginx会直接获取到当前请求的文件并返回。
    • Nginx本身也是静态资源服务器,比如开发的网站只有静态资源的时候,如个人主页、博客、公司简要介绍等,可以时候Nginx当服务器,并且Nginx性能也是非常不错的。

Nginx的优点

在这里插入图片描述

  • 高并发、高性能
    以主流服务器配置(如32G或64G服务器),使用Nginx可以轻松达到千万级别的并发连接。
  • 可扩展性好
    Nginx的可扩展性主要体现在模块化设计,模块化设计非常的稳定,使得Nginx的第三方模块生态圈非常丰富。
  • 高可靠性
    Nginx在服务器上不间断运行长达数年之久。
  • 热部署
    在不停止服务的情况下可以升级Nginx。
  • 开源、可商用
    Nginx有BSD许可证,可开源免费使用。

Nginx的安装

这里记录的是使用yum命令,如果手动安装,需要先安装prre.tar.gz 、openssl.tar.gz、 zlib.tar.gz等依赖,再安装nginx.tar.gz,这里不再赘述。

  • Linux的安装
    按装依赖yum-utils,执行命令yum install yum-utils
    在这里插入图片描述
    执行vim /etc/yum.repos.d/nginx.repo输入源信息
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/7/@basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

执行yum list | grep nginx查看稳定版的源
在这里插入图片描述
然后选择稳定版运行yum install nginx安装(出现询问输入y)
在这里插入图片描述
在这里插入图片描述
输入nginx -v或whereis nginx验证是否安装成功
在这里插入图片描述

  • Mac OS的安装
    通过工具brew安装
    brew install nginx

  • Windows不推荐安装

    • 功能和Linux不完全一样
    • 和实际生产相差很大

Nginx的常用命令

  • /usr/sbin/nginx启动
    启动后有三种验证已启动的方法
    • 重新执行启动命令,会提示端口已被使用
      在这里插入图片描述

    • 执行ps -aux | grep nginx查看nginx相关进程
      在这里插入图片描述

    • 通过浏览器看看能不能访问到(注:如果访问失败,可能是端口没放开,开放端口请参考服务器技术(二)–Linux进阶应用(2)–Linux用户与权限及CentOS7防火墙firewall)
      在这里插入图片描述

  • nginx -h 帮助
    在这里插入图片描述
  • nginx -c 读取指定配置文件
    先执行nginx -s stop停止nginx
    然后执行nginx -c /etc/nginx/nginx.conf按指定配置文件启动
    在这里插入图片描述
  • nginx -t 查看并测试配置文件是否正确
    在这里插入图片描述
  • nginx -v 、nginx -V 版本
    在这里插入图片描述
  • 找到正在运行的nginx的路径whereis nginx
    在这里插入图片描述
  • ps aux | grep nginx 查看nginx进程信息
    在这里插入图片描述
  • nginx -s 信号
    • stop 立即停止
    • quit 优雅停止
    • reload 重启
      先检查新的配置文件语法有效性,如果不通则不会重启,如果语法没问题,启动一个新的进程,直到旧的进程把拥有的任务处理完毕之后让旧的进程退出
    • reopen 更换日志文件

Nginx配置文件

  • 配置文件语法
    • ;结尾
    • {}组织多条指令
    • include 引入
    • # 注释
    • $ 变量
  • 默认配置文件
    • nginx.conf
      /etc/nginx/nginx.conf
## 全局块:从配置文件开始到events块之间的内容,主要设置一些影响整体运行的配置指令
# 运行用户,默认是nginx
user  nginx;
# nginx进程数,一般默认为何cpu核数一样
worker_processes  auto;

# 全局错误日志路径
error_log  /var/log/nginx/error.log notice;
# 进程pid路径
pid        /var/run/nginx.pid;

## events块:涉及的指令主要影响Nginx服务器与用户的网络连接
events {
	# 最大连接数
    worker_connections  1024;
}

## http块,包括http全局块和server块,Nginx服务器配置中最频繁的部分
#设置http服务器
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

	# 日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

	# 访问的日志
    access_log  /var/log/nginx/access.log  main;

	# 开启高效传输模式
    sendfile        on;
    #tcp_nopush     on;

	# 长链接超时时间,单位秒
    keepalive_timeout  65;

	# 传输的时候是否需要压缩
    #gzip  on;

	# 加载其他配置文件
    include /etc/nginx/conf.d/*.conf;
}
default.conf
/etc/nginx/conf.d/default.conf
## server块,包括全局server块和location块,这块和虚拟主机有密切关系
server {
	# 端口号
    listen       80;
    #服务器名称
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

	# 默认情况下/代表的路径
    location / {
    	# 默认转发的路径
        root   /usr/share/nginx/html;
        # 默认主页
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    # 发生错误的时候所要请求的页面
    error_page   500 502 503 504  /50x.html;
    # 当请求某个错误文件的时候转发的地址
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

所以只要在/usr/share/nginx/html路径下的文件都可以访问打开。

搭建静态资源服务器

通过文件上传工具,如SecureFX上传测试项目到/usr/share/nginx/web目录下
在这里插入图片描述
在这里插入图片描述
修改文件/etc/nginx/conf.d/default.conf的location
在这里插入图片描述
然后重启nginx浏览器访问
在这里插入图片描述
可以打开/var/log/nginx/access.log查看日志
在这里插入图片描述

Nginx配置实例-反向代理

  • 实现效果

    • 打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到linux系统tomcat主页面中
  • 准备工作

    • 在linux系统安装tomcat,使用默认端口8080,安装步骤参考服务器技术(二)–Linux进阶应用(2)–Linux用户与权限及CentOS7防火墙firewall
  • 访问过程的分析
    在这里插入图片描述

  • 具体配置

    • 第一步 在windows系统的host文件进行域名和ip对应关系的配置,这边直接用 SwitchHosts工具配置
      在这里插入图片描述
    • 第二步 在nginx进行请求转发的配置(反向代理配置)
      修改配置文件/etc/nginx/conf.d/default.conf
      在这里插入图片描述
      然后nginx -c /etc/nginx/nginx.conf启动nginx,浏览器访问www.123.com
      在这里插入图片描述

Nginx配置实例-反向代理实例2

  • 实现效果
    使用nginx反向代理,根据访问的路径跳转到不同端口的服务器中
    nginx监听端口为9001
    访问 http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
    访问 http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081

  • 准备工作

    • 准备两个tomcat服务器,一个8080端口,一个8081端口,方法是再复制一套tomcat再把server.xml配置文件的端口改掉就行
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 创建文件夹和测试页面
      在这里插入图片描述
      在这里插入图片描述
  • 具体配置

    • 找到nginx配置文件,进行反向代理配置
      在这里插入图片描述
      location后的~用于表示uri包含正则表达式,并且区分大小写。如果为~*不区分大小写。
  • 启动nginx后测试
    在这里插入图片描述
    在这里插入图片描述

Nginx配置实例-负载均衡

  • 实现效果
    • 浏览器地址栏输入http://192.168.1.128/edu/a.html,负载均衡效果,平均8080和8081端口中
  • 准备工作
    • 准备两台tomcat服务器,一台8080,一台8081
    • 在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件夹中创建页面a.html,用于测试
  • 在nginx的配置文件中进行负载均衡的配置
    在这里插入图片描述
    在这里插入图片描述
  • 启动nginx后测试
    在这里插入图片描述
    在这里插入图片描述

Nginx分配服务器策略

  • 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
  • weight
    weight代表权重默认为1,权重越高被分配的客户端越多。
  • ip_hash
    每个请求按访问ip的hash结果分配,这样每个访问固定访问一个后端服务器
  • fair
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

Nginx配置实例-动静分离

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

  • 准备工作

    • 在 Linux 系统中准备静态资源,用于进行访问
      在这里插入图片描述
  • 具体配置

    • 在 nginx 配置文件中进行配置
      在这里插入图片描述
  • 最终测试
    在这里插入图片描述
    在这里插入图片描述

Nginx配置高可用的集群

  • 什么是nginx高可用
    在这里插入图片描述
    • 需要两台nginx服务器
    • 需要keepalived
    • 需要虚拟ip
  • 配置高可用的准备工作
    • 需要两台服务器(可以克隆虚拟机)
    • 在两台服务器安装nginx
    • 在两台服务器安装keepalived
      使用 yum 命令进行安装
      yum install keepalived -y
  • 完成高可用配置(主从配置)
    • 修改/etc/keepalived/keepalived.conf配置文件
# 全局配置
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.1.129
   smtp_connect_timeout 30
   router_id LVS_DEVEL # 访问到主机
}
# 脚本配置
vrrp_script chk_http_port {
   script "/usr/local/src/nginx_check.sh"
   interval 2  #检测脚本执行的间隔
   weight 2 # 权重
}
# 虚拟IP配置
vrrp_instance VI_1 {
    state BACKUP  # 备份服务器将 MASTER 改为 BACKUP
    interface ens33 # 网卡
    virtual_router_id 51  # 主、备机的 virtual_router_id 必须相同
    priority 90  # 主、 备机取不同的优先级,主机值较大,备机值较小
    advert_int 1 # 每隔多长时间发送心跳,检测服务器是否活着
    authentication { # 权限校验方式 PASS为密码 
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.120  # VRRP H虚拟地址
    }
}
  • 在/usr/local/src添加检测脚本nginx_check.sh
#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ]; then
    /usr/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi
  • 把两台服务器上nginx和keepalived启动
    启动nginx: nginx -c /etc/nginx/nginx.conf
    启动keepalived: systemctl start keepalived.service
  • 最终测试
    • 在浏览器地址栏中输入 虚拟ip地址:192.168.1.120
      在这里插入图片描述
      可以输入ip a查看绑定的虚拟ip
      在这里插入图片描述
    • 把主服务器 nginx 和 keepalived 停止,再输入虚拟地址访问,依然正常显示。
      systemctl stop keepalived.service
      nginx -s stop
      在这里插入图片描述

Nginx原理

  • master 和 worker
    在这里插入图片描述
    在这里插入图片描述

  • worker 如何进行工作的
    在这里插入图片描述

  • 一个 master 和多个 worker 的好处

    • 可以使用 nginx -s reload 热部署
    • 每个 worker 是独立的进程,如果其中一个 worker 出现问题,其他 worker 独立的继续进行争抢,实现请求过程不会造成服务中断。
  • 设置多少个worker合适
    worker 数和服务器的 cpu 数相等是最为事宜的。

  • 连接数 worker_connection

    • 发送请求,占用了 worker 的几个连接数?
      2 或 4 个
    • nginx 有一个 master,有四个 worker ,每个 worker 支持最大的连接数为1024 , 支持的最大并发数是多少?
      普通的静态访问最大并发数是: worker_connection * worker_processes / 2,也就是1024 * 4 / 2 = 2048。
      而如果是 HTTP 作为反向代理来说,最大并发连接数应该是 worker_connection * worker_processes / 4,也就是1024 * 4 / 4 = 1024。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3-css高级特效-1

01-平面转换 简介 作用:为元素添加动态效果,一般与过渡配合使用 概念:改变盒子在平面内的形态(位移、旋转、缩放、倾斜) 平面转换也叫 2D 转换,属性是 transform 平移 transform: translate(X轴移动距…

最新导则下生态环评报告编制要求与规范

根据生态环评内容庞杂、综合性强的特点,依据生态环评最新导则,将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及…

基于matlab基于预训练的膨胀双流卷积神经网络的视频分类器执行活动识别(附源码)

一、前言 此示例首先展示了如何使用基于预训练的膨胀 3-D (I3D) 双流卷积神经网络的视频分类器执行活动识别,然后展示了如何使用迁移学习来训练此类视频分类器使用 RGB 和来自视频的光流数据 [1]。 基于视觉的活动识别涉及使用一组视频帧预…

STM32外设系列—DHT11

文章标题 一、DHT11简介二、数据手册分析2.1 接口说明2.2 串行通信说明2.2.1 单总线通信2.2.2 单总线传输数据位定义2.2.3 时序图 三、DHT11程序设计3.1 初始化GPIO3.2 发送起始信号3.3 接收一个字节数据3.4 接收温湿度信息并校准 四、总结 一、DHT11简介 DHT11是一款常用的数…

快速点特征直方图(FPFH)描述子提取

快速点特征直方图(Fast Point Feature Histograms,FPFH)介绍 快速点特征直方图(Fast Point Feature Histograms,FPFH)是一种基于点的描述子,用于描述点云数据中的局部几何信息。FPFH描述子是在…

浅尝kubernetes

浅尝kubernetes 前言:我们早学习一门技术之前并不需要从头到尾的详细的查看一遍,只需要看一看是什么?能干什么?怎么用?即可! 一、了解kubernetes Kubernetes 也称为 K8s,是用于自动部署、扩缩和…

【C/C++实现进程间通信 二】消息队列

文章目录 前情回顾思路源码Publisher.cppSubscriber.cpp 效果 前情回顾 上一期已经讲解过了进程的相关概念以及进程间通信的实现原理,下面仅展示消息传递机制实现1进程间通信的相关代码。 思路 /*本项目主要用于以消息传递机制的方式进行进程间通信的测试。1.主要…

Odoo16 微信公众号模块开发示例

Odoo16 微信公众号模块开发示例 本模块基于 aiohttp asyncio 进行异步微信公众号接口开发, 仅实现了部分 API 仅供学习参考,更完善的同步接口请参考:wechatpy 或 werobot,可用来替代 模块中的 wechat client。 业务需求 小程序中需要用户…

pdf文档多页内插入统一图片

常用来添加公司logo、签名、印章等等 概括来说就是插入同一个图片,然后复制在每一页(自动) 用的是福昕pdf阅读器 首先打开pdf: 点击图像标注功能: 在弹出窗口中选择浏览,点击需要插入的图片&#xff08…

在个人电脑上部署ChatGLM2-6B中文对话大模型

简介 ChatGLM2-6B 是清华大学开源的一款支持中英双语的对话语言模型。经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,具有62 亿参数的 ChatGLM2-6B 已经能生成相当符合人类偏好的回答。结合模型量化技术,用户可以在消费级的显卡上进行本地部署&…

计算机网络—网络层

文章目录 网络层服务虚电路网络数据报网络 IPv4IP数据报IP数据报分片 IP编址(IPv4)有类IP地址IP子网划分子网掩码 无类IP地址(CIDR)DHCPNATICMP协议 路由算法链路状态路由算法距离向量路由算法不同子网之间的路由算法学习RIP协议O…

【深度学习】3-3 神经网络的学习- 导数梯度

导数 导数就是表示某个瞬间的变化量,式子如下: 式子的左边,表示f(x)关于x的导数,即f(x)相对于x的变化程度。式子表示的导数的含义是,x的“微小变化”将导致函数f(x)的值在多大程度上发生变化。其中,表示…

了解一下EPC模式和它的优势

目录 什么是EPCEPC的优势有哪些?BT、BOT、EPC分别是什么模式?总结 什么是EPC EPC是Engineering(工程):代表设计、采购和施工总承包。Procurement(采购):代表采购和物资管理。Constru…

各牌浏览器设置地址栏显示完整URL

有时候,我们在浏览器的地址栏输入URL后,需要查看完整的URL路径,比如想看到是http协议还是https协议。 目前大多数浏览器都直接将协议头隐藏,需要复制出地址,或者点击地址栏才能看到,比较麻烦。 浏览器支持通…

Docker 部署 jar 项目

文章目录 1、上传jar包2、新建 Dockerfile 文件3、新建 deploy.sh 脚本(创建并运行)4、新建 upgrade.sh 脚本(更新) 1、上传jar包 2、新建 Dockerfile 文件 添加jar包及修改端口 # 基础镜像 FROM java:8 # 添加jar包 ADD servic…

【STM32】基于stm32的阿里云智能家居

摘 要 智能家居是一种通过物联网将家里的各种电器设备连接在一起,并由中心控制器统一管理的信息系统。系统的核心是各类家居信息的采集与处理。阿里云能够提供云端的数据存储和分析功能,可以作为智能家居中心控制器的重要平台。 本文主要研究了基于阿里云…

WPF 控件设置透明度的方法

方法一:通过 Opacity 属性设置背景色透明度。范围从0-1,0表示完全透明,看不见。 通过 Opacity 属性去改变控件透明度 会影响子控件的透明度,是因为Opacity属性是在UIElement 类(以及Brush基类)中定义,所有元素都具有该…

Unity VR 开发教程:Meta Quest 一体机开发 (二)混合现实 MR 透视 Passthrough 环境配置

文章目录 📕教程说明📕配置透视的串流调试功能📕第一步:设置 OVRManager📕第二步:添加 OVRPassthroughLayer 脚本📕第三步:在场景中添加虚拟物体📕第四步:删除…

系统架构设计师 5:软件工程

一、软件工程 1 软件过程模型 软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程称为软件的生命周期。 为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规…

JavaScript进阶----《getter 和 setter 是什么》

前言: 这两个属性在学习前端的时候看到过,但是由于项目中没有用到过,所以一直没有细致的了解。今天 review 同事代码的时候,遇到了这个写法,看了半天也不知道如何处理。再不学习真的以后连别人的代码都不知道什么意思了…