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

news2024/11/23 7:18:55

一. 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.coloradmin.cn/o/1877978.html

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

相关文章

MySQL之覆盖索引

什么是覆盖索引&#xff1f; 覆盖索引&#xff1a;查询时使用了索引&#xff0c;且需要返回的列&#xff0c;在改索引中已经全部能找到。 示例&#xff1a;有user表如下&#xff1a; CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 技术主键,name varch…

Windows 中的 Hosts 文件是什么?如何找到并修改它?

什么是 Hosts 文件 Hosts 文件是一个纯文本文件&#xff0c;存在于几乎所有的操作系统中&#xff0c;用于将主机名映射到 IP 地址。在域名系统&#xff08;DNS&#xff09;尚未普及之前&#xff0c;Hosts 文件是计算机网络中唯一用于主机名解析的方式。随着网络规模的扩大和 D…

GPT-4替代大学生参加考试,94%成功作弊未被发现!

目录 01 「伪装」过程 02 实验结果 03 成绩如何&#xff1f; 调查显示&#xff0c;94%的AI生成内容完全不会被大学教授察觉。 而且在83.4%的情况下&#xff0c;「AI同学」的成绩显著高于人类学生。 看来&#xff0c;AI真的要攻陷人类的考试了。 其实&#xff0c;早在GPT-4发…

【Mybatis】Mybatis初识-通过源码学习执行流程

文章目录 1.Mybatis核心组件1.1 SqlSession1.2 SqlSessionFactory1.3 Mapper1.4 MappedStatement1.5 Executor 2. Mybatis各组件之间关系3. 构建SqlSessionFactory3.1 从XML文件中构建3.2 不使用XML构建SqlSessionFactory 4. 如何从SqlSessionFactory获取SqlSession5.获取Mappe…

STM32CubeMx的学习记录系列(1) - 软件的下载与点灯

目录 因为最近要学STM32的嵌入式AI开发&#xff0c;但它于是基于STM32CubeMX开发的&#xff0c;就顺便把这个学了。 直接百度STM32CubeMX&#xff0c;到意法的官网去下载。下载过程就看这篇博客 https://blog.csdn.net/as480133937/article/details/98885316 点灯 选择芯片&…

PG备份与恢复

一、开启WAL归档 1、创建归档目录 我们除了存储数据目录pgdata之外&#xff0c;还要创建backups&#xff0c;scripts&#xff0c;archive_wals文件 mkdir -p /home/mydba/pgdata/arch mkdir -p /home/mydba/pgdata/scripts mkdir -p /home/mydba/backups chown -R mydba.myd…

PIP一些问题解决办法

研究生期间遇到关于PIP一些问题报错以及解决办法的汇总 pip安装报错&#xff1a;is not a supported wheel on this platform 本节转自 https://blog.csdn.net/happywlg123/article/details/107281936 ​ 出现这个问题&#xff0c;是由于这个whl和系统python版本不匹配导致的。…

数字人解决方案——数字人类不仅仅是长着一张脸的人工智能

数字人类曾经是简单的聊天机器人&#xff0c;经常误解问题&#xff0c;这让许多人感到沮丧。现在&#xff0c;他们已经发展成为先进的虚拟代理&#xff0c;可以像最好的客户服务代表一样有效地沟通&#xff0c;拥有专家级的知识&#xff0c;并且看起来与真人惊人地相似。 这些…

基于协同过滤的电影推荐与大数据分析的可视化系统

基于协同过滤的电影推荐与大数据分析的可视化系统 在大数据时代&#xff0c;数据分析和可视化是从大量数据中提取有价值信息的关键步骤。本文将介绍如何使用Python进行数据爬取&#xff0c;Hive进行数据分析&#xff0c;ECharts进行数据可视化&#xff0c;以及基于协同过滤算法…

<电力行业> - 《第7课:发电》

1 发电的原理 电力生产的发电环节是利用电能生产设备将各种一次能源或其他形式的能转换为电能。生产电能的主要方式有火力发电、水力发电、核能发电、地热发电、风力发电、太阳能发电、潮汐能发电、生物智能发电和燃料电池发电等。 除太阳能发电的光伏电池技术和燃料电池发电…

[单机版架设]新天堂2-死亡骑士338|带AI机器人

前言 今天给大家带来一款单机游戏的架设&#xff1a;新天堂2-死亡骑士338单机服务端—带AI机器人 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; 新天堂2 搭建教程 此游戏架设不需要虚拟机&#xf…

利用LLM本身训练SoTA embedding模型

今天分享一篇Microsoft公司的一篇文章&#xff0c;Title: Improving Text Embeddings with Large Language Models&#xff1a;使用大语言模型改善文本嵌入。 这篇文章探索了直接利用LLM来做embedding模型&#xff0c;其只需要利用合成数据和少于1000次的训练步骤就能获得高质…

Arthas快速入门

简介 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类…

仓库管理系统12--供应商设置

1、添加供应商窗体 2、布局控件UI <UserControl x:Class"West.StoreMgr.View.SupplierView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://…

什么是机器学习,机器学习与人工智能的区别是什么(一)?

人工智能和计算机游戏领域的先驱阿瑟塞缪尔&#xff08;Arthur Samuel&#xff09;创造了 "机器学习"一词。他将机器学习定义为 “一个让计算机无需明确编程即可学习的研究领域” 。通俗地说&#xff0c;机器学习&#xff08;ML&#xff09;可以解释为根据计算机的经…

前端学习笔记(2406261):jquery使用checkbox控制页面自动刷新

文章目录 需求登录页面主页面 API用户登录login获取数据getdata 代码登录页面主页面 关于后端 需求 这是一个物联网的演示项目&#xff0c;web端能够实时显示后台数据的变化&#xff0c;其流程非常简单&#xff1a; 用户登录登录成功后显示主界面面主界面进入后自动显示数据数…

Java中的Checked Exception和Unchecked Exception的区别

在Java中&#xff0c;异常分为两大类&#xff1a;已检查异常&#xff08;Checked Exception&#xff09;和未检查异常&#xff08;Unchecked Exception&#xff09;。 已检查异常是在编译时必须被捕获或声明的异常。换句话说&#xff0c;如果你的方法可能会抛出某个已检查异常&…

古人的智慧结晶——水铳:揭秘明清时期的消防神器

明代的《奇器图说》是一本记录了当时各种奇巧机械的著作&#xff0c;而水铳则是书中记载的一项令人惊叹的发明&#xff0c;它不仅展示了古人对物理原理的深刻理解&#xff0c;更是早期消防技术的一个缩影。 水铳&#xff0c;这个名字听起来似乎有些陌生&#xff0c;但在古代&am…

Kafka~消息发送过程与ISR机制了解

消息发送过程 使用Kafka发送消息时&#xff0c;一般有两种方式分别是&#xff1a; 同步发送异步发送 同步发送时&#xff0c;可以在发送消息后&#xff0c;通过get方法等待消息结果&#xff0c;这种情况能够准确的拿到消息最终的发送结果&#xff0c;要么是成功、要么是失败…

AES加密算法及AES-CMAC原理白话版系统解析

本文框架 前言1. AES加密理论1.1 不同AES算法区别1.2 加密过程介绍1.2.1 加密模式和填充方案选择1.2.2 密钥扩展1.2.3分组处理1.2.4多轮加密1.2.4.1字节替换1.2.4.2行移位1.2.4.3列混淆1.2.4.4轮密钥加1.3 加密模式1.3.1ECB模式1.3.2CBC模式1.3.3CTR模式1.3.4CFB模式1.3.5 OFB模…