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.mzph.cn/diannao/38388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OffscreenCanvas:Web Workers 中的画布操作

在 Web 开发中&#xff0c;我们经常需要处理复杂的图形和动画&#xff0c;这些操作可能会影响页面的性能和用户体验。为了解决这个问题&#xff0c;现代浏览器引入了 OffscreenCanvas 接口&#xff0c;它允许我们在后台线程&#xff08;Web Workers&#xff09;中进行画布操作&…

python教程---网络爬虫

7.1 urllib Urllib是Python内置的一个用于读取来自Web的数据的库。它是一个请求库&#xff0c;可以用来发送HTTP请求&#xff0c;获取网页内容&#xff0c;支持多种HTTP方法&#xff0c;如GET和POST等。 使用Urllib读取网页内容的步骤如下&#xff1a; 导入Urllib库中的reque…

Redis--18--Redis Desktop Manage下载与安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis Desktop Manage1.官网下载https://redis.io/insight/ 2.安装方法3.使用方法3.1.进入RedisDesktopManager的主界面3.2 新建连接3.3 支持操作 Redis Desktop Ma…

J021_QQ号格式校验

一、需求描述 校验QQ号码是否正确。要求全部是数字&#xff0c;数字长度&#xff08;6-20位之间&#xff09;&#xff0c;不能以0开头。 二、代码实现 package com.itheima.sort;public class Test {public static void main(String[] args) {System.out.println("----…

汽车尾灯(转向灯)电路设计

即当汽车进行转弯时,司机打开转向灯,尾灯会根据转向依次被点亮,经过一定的间隔后,再全部被消灭。不停地重复,直到司机关闭转向灯。 该效果可由以下电路实现: 完整电路图: 02—电路设计要点 延时电路的要点主要有两个: 一、当转向开关被按下时,LED需要逐个亮起; 二、LED被逐…

uniapp 使用cavans 生成海报

uniapp 使用cavans 生成海报 npm install qs-canvas1.创建 useCanvas.js /*** Shopro qs-canvas 绘制海报* version 1.0.0* author lidongtony* param {Object} options - 海报参数* param {Object} vm - 自定义组件实例*/ import QSCanvas from qs-canvas; import { getPos…

NVIDIA Visual Profiler启动失败报错

在银河麒麟V10安装完NVIDIA后&#xff0c;想着试着运行一下NVIDIA Visual Profiler&#xff0c;发现报错&#xff0c;如下图。 照着提示翻阅日志文件。看见其中写着 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

简介 其提供了并发处理事件的能力 结构 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R学习资源及R包安装

转自生信师兄 生信必备技巧之R语言基础教程 1. 学习资源 推荐书籍&#xff1a;R语言实战&#xff0c;R数据科学等等&#xff1b; 这两本书在公众号【生信师兄】都有pdf版&#xff0c;有需要的可以关注公众号【生信师兄】并回复&#xff1a;“R语言”&#xff0c;即可获得免费…

【自然语言处理】预训练语言模型实现与应用

预训练语言模型实现与应用 1 任务目标 1.1 案例简介 ​ 2018年&#xff0c;Google提出了预训练语言模型BERT&#xff0c;该模型在各种NLP任务上都取得了很好的效果。与此同时&#xff0c;它的使用十分方便&#xff0c;可以快速地对于各种NLP任务进行适配。因此&#xff0c;B…

《每天5分钟用Flask搭建一个管理系统》第8章:权限管理

第8章&#xff1a;权限管理 8.1 权限管理的概念 权限管理是控制用户对应用内不同资源访问的机制。它确保用户只能访问他们被授权的资源。 8.2 Flask-Principal扩展的使用 Flask-Principal是一个提供权限管理功能的Flask扩展&#xff0c;它允许您定义角色和权限&#xff0c;…

基于HarmonyOS NEXT开发智能提醒助手

目录 目录 目录 前言 关于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手设计 1、系统架构 2、功能模块 智能提醒助手的应用场景 智能提醒助手的竞争力 具体技术实现 未来展望 结束语 前言 随着智能设备的普及和物联网技术的飞速发展&#xff0c;人们对于智能…

基于大津阈值法和二值化与联通区域标记进行图像目标计数

1 建模 A.读取图像&#xff1a; 1.使用imread函数读取图像文件。 2.如果图像是彩色的&#xff0c;通常需要先转换为灰度图像&#xff0c;因为大津阈值法通常应用于灰度图像。 B.灰度化&#xff1a; 1&#xff0e;如果图像是彩色的&#xff0c;使用rgb2gray函数将其转换为灰度…

《昇思25天学习打卡营第16天 | 昇思MindSpore基于MobileNetv2的垃圾分类》

16天 本节学习了垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#xff0c;相比于传…

Excel显示/隐藏批注按钮为什么是灰色?

在excel中&#xff0c;经常使用批注来加强数据信息的提示&#xff0c;有时候会把很多的批注显示出来&#xff0c;但是再想将它们隐藏起来&#xff0c;全选工作表后&#xff0c;“显示/隐藏批注”按钮是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

【考研408计算机组成原理】微程序设计重要考点指令流水线考研真题+考点分析

苏泽 “弃工从研”的路上很孤独&#xff0c;于是我记下了些许笔记相伴&#xff0c;希望能够帮助到大家 目录 微指令的形成方式 微指令的地址形成方式 对应考题 题目&#xff1a;微指令的地址形成方式 - 断定方式 解题思路&#xff1a; 答题&#xff1a; 分析考点&…

每日疑问,多线程场景,下面的代码是否可以保证只执行一次

看着这个代码的目的是只注册一次sighandler&#xff0c;但是这个判定是否可以保证一次&#xff1f;但是根据代码看&#xff0c;其实不会有关键区的读写&#xff0c;所以即使有同步问题&#xff0c;也不会产生什么特别的影响。所以代码没有问题&#xff0c;但是这是一个坑。 in…

Spring Boot中的分页与排序实现

Spring Boot中的分页与排序实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在开发Web应用时&#xff0c;分页和排序是常见的功能需求&#xff0c;特别是在处…

计算机体系结构和指令系统

1.计算机体系结构 - 五大部件 - 冯 诺依曼 计算机的特点 1.计算机有五大部件组成 2.指令和数据以同等地位存储于存储器&#xff0c;可按照地址访问 3.指令和数据用二进制表示 4.指令由操作码和地址码组成 5。存储程序 6.以计算器为中心&#xff08;输入、输出设备与存储器…

2024年【湖北省安全员-C证】新版试题及湖北省安全员-C证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 湖北省安全员-C证新版试题参考答案及湖北省安全员-C证考试试题解析是安全生产模拟考试一点通题库老师及湖北省安全员-C证操作证已考过的学员汇总&#xff0c;相对有效帮助湖北省安全员-C证试题及解析学员顺利通过考试…