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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值