nginx优势以及应用场景,编译安装和nginx

一. Nginx是什么?

1. Nginx概述
  • 高性能、轻量级Web服务软件
  • 系统资源消耗低
  • 对HTTP并发连接的处理能力高
  • 单台物理服务器可支持30,000~50,000个并发请求
  • Nginx(发音同 “engine x”)是一个高性能的反向代理和Web服务器软件,由俄罗斯人Igor Sysoev开发。第一个版本发布于2004年,源代码基于双条款BSD许可证发布。Nginx在互联网企业中因其资源消耗低、运行稳定且高性能的并发处理能力而广泛应用。
  • Nginx是互联网上最受欢迎的开源Web服务器之一,不仅提供了一整套开发和交付的应用技术,还是应用交付领域的开源领导者。
  • 2019年3月,F5宣布收购Nginx,将其作为F5的一部分。F5表示,将加强对开源和Nginx应用平台的投资,致力于Nginx开源技术、开发人员和社区的发展。
2. Nginx模块与作用
  • main模块:全局配置模块,配置运行nginx服务器的用户(组)、worker_process数(进程)、nginx进程PID存放路径、错误日志存放路径、配置文件的引入等。
  • stream服务模块:实现反向代理功能,包括TCP协议代理。
  • 邮件服务模块:支持Nginx的邮件服务,对POP3、IMAP和SMTP协议的支持。
  • 第三方模块:二次开发扩展Nginx服务器应用,完成开发者自定义功能(如Json支持、Lua支持)。
  • events模块:影响nginx服务器与用户的网络连接。
    events {
        worker_connections 65536;
        use epoll;
        accept_mutex on;
        multi_accept on;
    }
    
  • http模块:跟web服务相关,扩展标准的HTTP功能,处理一些特殊服务,包含自定义服务日志、sendfile传输文件、连接超时时间、单连接请求数上限、Flash多媒体传输、解析GeoIP请求、网络传输压缩、安全协议SSL支持等。
  • location模块:uri网址定位。
  • server模块:服务模块,配置80端口监听、虚拟主机、DNS域名解析等。
  • auth_basic模块:对网页设置用户名密码。
  • gzip模块:压缩。
  • proxy模块:设置后端IP地址、端口号及http和加密的https。
  • ssl模块:https加密。
3. Nginx三大作用:反向代理、负载均衡、动静分离
  • 反向代理:在服务端配置,客户端访问服务器A,服务器A为代理服务器,将客户请求转发到服务器B。
    • 作用:缓存服务器响应,减少服务器压力;负载均衡,将用户请求分配给多个服务器;访问控制。
  • 正向代理:在客户端配置,代理服务器代理客户端与目标服务器进行交互。
    • 作用:提高访问速度;隐藏客户端真实IP地址。
  • 负载均衡:分摊到多个操作单元(如Web服务器、FTP服务器等)上进行执行,从而共同完成工作任务。
    • Nginx七层负载均衡调度算法
      1. 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器。
      upstream backendserver {
          server 192.168.10.14:80 max_fails=2 fail_timeout=10s;
          server 192.168.10.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. 加权轮询:指定轮询几率,weight值和访问比例成正比。
      upstream backendserver {
          server 192.168.10.14:80 weight=5 max_fails=2 fail_timeout=10s;
          server 192.168.10.15:80 weight=10 max_fails=2 fail_timeout=10s;
      }
      
      1. IP哈希:每个请求按访问IP的hash结果分配,解决session会话保持问题。
      upstream backendserver {
          ip_hash;
          server 192.168.10.14:80 max_fails=2 fail_timeout=10s;
          server 192.168.10.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. 最少连接数:按Nginx反向代理与后端服务器之间的连接数分配,连接数最少的优先分配。
      upstream backendserver {
          least_conn;
          server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
          server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. 响应时间(需编译安装第三方模块):按后端服务器的响应时间分配请求,响应时间短的优先分配。
      upstream backendserver {
          fair;
          server 192.168.10.14:80 max_fails=2 fail_timeout=10s;
          server 192.168.10.15:80 max_fails=2 fail_timeout=10s;
      }
      
      1. URL哈希(需编译安装第三方模块):按访问URL的hash结果分配请求,使同一个URL访问到同一个后端服务器。
      upstream backendserver {
          server 192.168.10.14:80 max_fails=2 fail_timeout=10s;
          server 192.168.10.15:80 max_fails=2 fail_timeout=10s;
          hash $request_uri;
      }
      
  • 动静分离:通过代理方式,在server{}段中加入带正则匹配的location来指定匹配项。静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。

二. Nginx和Apache的差异

Apache
  • 同步多进程模型:一个连接对应一个进程,具有高稳定性。
  • 优势
    1. rewrite功能强大(实现URL跳转)。
    2. 模块多,基本可找到所需的模块。
    3. 稳定性高,bug少。
    4. PHP支持简单。
    5. 处理动态请求更有优势。
Nginx
  • 异步非阻塞模型:多个连接(万级别)对应一个进程,具有高性能。
  • 优势
    1. 轻量级,采用C编写,占用更少的内存与资源。
    2. 抗并发/高并发,负载能力高。
    3. 处理静态文件性能比Apache高三倍以上。
    4. 设计高度模块化,编写模块简单。
    5. 配置简洁,正则配置更简单,可用-t测试配置。
    6. 作为负载均衡服务器,支持七层负载均衡,有效防止DDoS攻击。
    7. 可作为反向代理服务器和邮件代理服务器使用。
    8. 支持热部署,在线升级。

通过这些对比,可以根据具体需求选择使用Nginx或Apache。

三、Nginx的应用场景

  1. Web服务器

    • Nginx可以作为一个独立的HTTP服务器,提供HTTP服务。它能够高效地处理静态资源(如HTML、CSS、JavaScript和图片文件)的请求,成为一个高性能的静态服务器。
  2. 虚拟主机

    • Nginx可以在一台物理服务器上配置多个虚拟主机,分别对应不同的网站。这可以通过不同的IP地址、端口号或域名来实现。这种功能对托管多个网站非常有用,节省了硬件成本。
  3. 反向代理服务器与负载均衡

    • 当网站的访问量增大时,单台服务器可能无法满足所有用户的请求。Nginx可以作为反向代理服务器,将请求分发到后端的多台服务器,实现负载均衡。通过这种方式,可以确保每台服务器的负载均衡,不会有某台服务器过载或闲置。Nginx还支持多种负载均衡策略,如轮询、IP hash等。
  4. 安全管理

    • Nginx可以配置安全管理功能,例如搭建API接口网关。通过这种方式,Nginx能够对每个接口服务进行拦截和安全检查,防止恶意攻击和未授权访问,提高系统的安全性。
  5. 缓存服务器

    • Nginx可以作为缓存服务器,将经常访问的资源缓存到内存中,加快资源的访问速度,减少服务器的压力,提高整体性能。

四、Nginx为什么能支持高并发

Nginx支持高并发的核心原因在于其采用了异步非阻塞的架构,利用了Linux的epoll机制,并且可以进行配置细节优化。

  • 异步非阻塞架构
    • 如果每个请求都由一个独立的进程或线程处理,那么系统资源消耗会非常高,特别是在等待网络传输时,这种方式非常低效。而Nginx采用异步非阻塞的运行方式,可以有效地避免这一问题。
    • Nginx有一个主调度进程和多个工作进程,每当有请求到达时,主进程会将请求分配给工作进程进行处理。由于大部分请求处理时间都耗费在网络传输上,实际在服务器上占用的时间并不多,Nginx通过少量进程就能高效处理大量并发请求。

五、为什么Nginx不使用多线程

Nginx采用单线程来异步非阻塞处理请求,并且管理员可以配置Nginx主进程的工作进程数量。主要原因包括:

  • 资源节约

    • Nginx不会为每个请求单独分配CPU和内存资源,这节省了大量的系统资源。
  • 减少CPU上下文切换

    • 使用单线程避免了频繁的上下文切换,提高了系统效率。

这种设计使得Nginx能够支持更高的并发量,处理更多的请求。

六、Nginx的两种进程分别有什么作用

Nginx主要有两种进程:master进程和worker进程。

  1. master进程

    • 负责管理worker进程,读取和加载Nginx的配置文件,控制Nginx的启动、重启和关闭等操作。
  2. worker进程

    • 处理实际的连接请求。每个worker进程都可以处理多个连接,并通过异步非阻塞的方式进行高效处理。

 七、编译安装nginx

cd /opt/
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j16&& make install
bash setup-local-yum-repo.sh 
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel
make -j16&& make install
make -j16 && make install
ls
rm setup-local-yum-repo.sh 
cd nginx-1.22.0/
 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j16 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
tee /lib/systemd/system/nginx.service   <<eof
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -1 $MAINPID
ExecStop=/bin/kill -3 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
eof
chmod 777 /lib/systemd/system/nginx.service 
sudo useradd -r -d /var/www -s /sbin/nologin nginx
systemctl daemon-reload
systemctl start nginx

yum安装
Centos7 需要安装epel源
 
cd /etc/yum.repos.d
vim epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
gpgcheck=0
 
yum install -y epel-release
 
yum install nginx -y

 

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

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

相关文章

【05】从0到1构建AI生成思维导图应用 -- 前端交互实现

【05】从0到1构建AI生成思维导图应用 – 前端交互实现 大家好&#xff01;最近自己做了一个完全免费的AI生成思维导图的网站&#xff0c;支持下载&#xff0c;编辑和对接微信公众号&#xff0c;可以在这里体验&#xff1a;https://lt2mind.zeabur.app/ 上一章&#xff1a;http…

【C++】初识C++(一)

一.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度 的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object o…

Mathematica训练课(46)-- 一些常用的画图函数

在前面的课程中&#xff0c;我们已经梳理了Plot的画图用法&#xff0c;今天就详细梳理一下其他的画图函数用法&#xff1b; 1. 画一条直线 2. Circle(圆) 3. Disk&#xff08;圆盘&#xff09; 4. 画出一个矩形 5. 箭头

itext生成pdf文件demo示例

需求 在PDF文件中植入一些信息&#xff08;pdf模版&#xff09; 制作模版 可以看到下面红色箭头标注位置&#xff0c;这都是我们需要动态写入数据的表单域&#xff0c;可以使用wps等工具来制作 点击编辑表单&#xff0c;可以给对应空间添加表单域&#xff0c;表单域名称是ke…

ic基础|功耗篇04:门级低功耗技术

大家好&#xff0c;我是数字小熊饼干&#xff0c;一个练习时长两年半的IC打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结&#xff0c;并通过汇总成文章的形式进行输出&#xff0c;相信无论你是在职的还是…

UE5材质之HLSL:深度

UE4/5的Custom节点&#xff1a;在VScode使用HLSL&#xff08;新手入门用&#xff09;_vscode写hlsl-CSDN博客 效果&#xff1a; 材质节点&#xff1a; 自定义节点代码&#xff1a; float3 rayStepViewDir*-1; float4 inputTexTexture2DSample(TexObject,TexObjectSampler,uv)…

AGPT•intelligence:带你领略全新量化交易的风采

随着金融科技的快速发展&#xff0c;量化交易已经成为了投资领域的热门话题。越来越多的投资者开始关注和使用量化交易软件来进行投资决策。在市场上有许多量化交易软件可供选择。 Delaek&#xff0c;是一位资深的金融科技专家&#xff0c;在 2020年成立一家专注于数字资产量化…

【第三方JSON库】org.json.simple用法初探—Java编程【Eclipse平台】【不使用项目管理工具】【不添加依赖解析】

本文将重点介绍&#xff0c;在不使用项目管理工具&#xff0c;不添加依赖解析情况下&#xff0c;【第三方库】JSON.simple库在Java编程的应用。 JSON.simple是一种由纯java开发的开源JSON库&#xff0c;包含在JSON.simple.jar中。它提供了一种简单的方式来处理JSON数据和以JSO…

计算机类主题会议推荐之——AIIIP 2024

【ACM出版 |IEEE&ACM院士、CCF杰出会员担任组委| 往届会后4个月检索 】 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国-天…

QT QSlider控件-主介绍 触发函数常用函数

QSlider控件是Qt库中用于提供一个可拖动滑块以选择数值或范围的界面元素。它广泛应用于需要用户进行数值调节的场景&#xff0c;如音量控制、亮度调整等。 一、QAbstractSlider的6个信号量触发函数&#xff1a; 1、void actionTriggered (int action): 当滑块上的某个可定义动…

EXCEL 复制后转置粘贴

nodepad 转置参考&#xff1a; https://editor.csdn.net/md/?articleId140014651 1. WPS复制后转置粘贴 复制-》右键-》顶部第一行-》粘贴行列转置&#xff0c;如下图&#xff1a; 2. Excel office365 本地版 2. Excel office365 在线版

module java.base does not “opens java.lang“ to unnamed module

目录 原因&#xff1a;解决方法&#xff1a;方法一&#xff1a;方法二&#xff1a;方法三&#xff1a; SpringBoot项目运行报如下错误 Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.def…

关于组织赴俄罗斯(莫斯科)第 28 届国际汽车零部件、汽车维修设备和商品展览会商务考察的通知

关于组织赴俄罗斯&#xff08;莫斯科&#xff09; 第 28 届国际汽车零部件、汽车维修设备和商品展览会商务考察的通知 展会名称&#xff1a;俄罗斯&#xff08;莫斯科&#xff09;第 28 届国际汽车零部件、汽车零部件、汽车维修设备和商品展览会 时间&#xff1a;2024 年 8 月…

仓库管理系统19--盘存管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、什么是盘存 盘存也叫盘库&#xff0c;盘库是指对一个仓库、库房或者商店的库存进行全面清点和核对的过程。在盘库过程中&am…

解决403 Forbidden错误的全面指南,快速解决403 Forbidden错误

在浏览互联网时&#xff0c;遭遇到“403 Forbidden”错误可以说是既常见又令人困惑。这个错误提示通常意味着服务器理解请求但拒绝授权访问。尽管它可能看起来让人无从下手&#xff0c;但通过一些方法通常可以找到原因并解决这个问题。 什么是403 Forbidden错误&#xff1f; “…

小到微妙:少女微笑

一、妙与不妙&#xff0c;少女与微笑 我们曾经解过汉字“妙”&#xff0c;妙字可以拆分为少女二字&#xff0c;即&#xff1a; 妙 女 少 少女 但这&#xff0c;其实并没有对 “妙”字 完成完整性解析&#xff0c;如果要完成完整性的说明&#xff0c;应当加上微笑&#xff0…

1、Python编程入门:从硬件基础到解释器类型

Python是一种免费、开源、跨平台、动态、面向对象的编程语言。它以其简洁易读的语法和强大的功能而闻名&#xff0c;广泛应用于各种领域&#xff0c;如Web开发、数据分析、人工智能等。本文将介绍Python的基本概念、执行方式以及常用的Linux命令&#xff0c;帮助初学者快速入门…

Ascend基于自定义算子工程的算子开发

环境准备 见https://gitee.com/zaj1414904389/ascend-tutorial.git 工程创建 CANN软件包中提供了工程创建工具msopgen&#xff0c;开发者可以输入算子原型定义文件生成Ascend C算子开发工程 [{"op": "AddCustom","input_desc": [{"name…

Java的NIO体系

目录 NIO1、操作系统级别下的IO模型有哪些&#xff1f;2、Java语言下的IO模型有哪些&#xff1f;3、Java的NIO应用场景&#xff1f;相比于IO的优势在哪&#xff1f;4、Java的IO、NIO、AIO 操作文件读写5、NIO的核心类 :Buffer&#xff08;缓冲区&#xff09;、Channel&#xff…

版本控制系统:Git 纯应用(持续更新)

基本操作 ctrl上行键&#xff1a;上次代码 本地仓库&#xff1a;Git init 新建文件&#xff1a;touch xxxx.xxx 查看状态&#xff1a;Git status 文件从工作区——暂存区&#xff1a;Git add ./文件名(.是通配符代表所有) 暂存区——仓库&#xff1a;Git commit -m &…