nginx概述、编译安装、平滑升级nginx

nginx概述

什么是nginx

nginx是一种轻量级/高性能的反向代理web服务器,可实现高效的反向代理、负载均衡,支持处理2-3万的并发连接数,是目前国内主流的web服务器。

nginx的优势

  1. 配置简单,内存消耗少,源代码可移植,支持跨平台
  2. 使用epoll模型(epoll是 Linux 中用于处理大量文件描述符(通常是套接字)的 I/O 复用机制。是一种高效的事件通知机制,常用于实现高性能的网络服务器。)
  3. 支持高并发连接,能处理2-3万并发连接数
  4. 具有丰富的模块和插件生态系统,允许用户根据需求扩展其功能,包括缓存、安全性、日志记录等

nginx与Apache的区别

  • 架构和性能:
    • Nginx: 采用异步、事件驱动的架构,适用于处理大量并发连接。它通常在高负载和高并发环境下表现出色,具有低内存消耗。
    • Apache: 采用多进程和多线程的架构,适用于处理并发连接较少的场景。Apache在高并发情况下可能会消耗更多的内存。
  • 处理连接的方式:
    • Nginx: 采用单线程模型,但能够处理大量并发连接,非阻塞方式。
    • Apache: 使用多进程或多线程来处理连接,每个连接使用一个独立的进程或线程。这可能导致资源消耗较高,特别是在大量并发连接的情况下。
  • 静态和动态内容处理:
    • Nginx: 擅长处理静态内容,但也可以处理动态内容。对于动态内容,通常需要与后端应用服务器(如FastCGI、uWSGI、或反向代理到应用服务器)配合使用。
    • Apache: 传统上更擅长处理动态内容,具有丰富的模块和支持,可以直接解析和执行多种脚本语言(如PHP、Perl、Python)。
  • 配置语法和易用性:
    • Nginx: 配置文件简洁、清晰,语法相对简单,易于理解和维护。配置更灵活,可以轻松实现反向代理、负载均衡等。
    • Apache: 配置文件相对复杂,语法略显繁琐。但通过.htaccess文件,用户可以在特定目录下覆盖主配置,提高了灵活性。

nginx为什么能支持高并发

  1. 异步、事件驱动架构: Nginx采用了异步、事件驱动的处理模型,与传统的多进程/多线程模型不同。在这种模型中,Nginx使用单一的主线程来处理多个并发连接,通过非阻塞的方式处理I/O操作。这使得Nginx能够更高效地处理大量并发连接,而无需为每个连接创建一个新的线程或进程。
  2. 单线程处理多个连接: Nginx的单线程模型允许它同时处理数千个并发连接,而不会因为线程或进程的创建而消耗过多的系统资源。这降低了系统的开销,使得Nginx在高并发场景下更为高效。
  3. 事件驱动、非阻塞的 I/O 操作: Nginx使用事件驱动的方式处理连接,它在等待I/O操作的同时可以处理其他任务,而不会阻塞整个进程。这种非阻塞的I/O操作使得Nginx能够在相同的硬件上处理更多的并发连接。
  4. 优化的内存管理: Nginx对内存的使用进行了优化,内存分配和释放相对较为高效。它使用少量的内存来维护每个连接的状态,避免了过多的内存开销。
  5. 事件驱动的定时器: Nginx使用事件驱动的定时器,能够高效地处理超时事件,而不需要轮询所有连接。这使得Nginx在高并发场景下能够及时地处理连接的超时和关闭。
  6. 高效的网络模块: Nginx的网络模块经过精心设计和优化,包括对TCP连接的高效处理、快速的数据传输等。这些特性使得Nginx在网络层面上能够更好地应对高并发情况。

nginx的两种进程

  1. 主进程(master process):
    • 启动和管理工作进程: 主进程负责启动和管理所有的工作进程。在启动时,主进程会读取配置文件,然后创建工作进程,并将控制权交给它们。
    • 监听端口: 主进程负责监听配置中指定的端口,处理新的连接请求。当有新的连接进来时,主进程会将其分配给其中的一个工作进程处理。
    • 监控工作进程状态: 主进程定期检查工作进程的状态,并在需要时重新启动或关闭工作进程。这有助于确保Nginx的稳定性和可靠性。
  2. 工作进程(worker process):
    • 处理客户端请求: 每个工作进程都负责处理客户端的请求。它们接收来自主进程的连接,并在请求到达时执行相应的操作,如读取静态文件、代理请求到后端服务器等。
    • 并发处理: 工作进程采用异步、事件驱动的方式处理请求,使得它们能够高效地处理大量并发连接。每个工作进程都是相对独立的,它们之间不共享内存,通过进程间通信(IPC)与主进程通信。
    • 负载均衡: 如果配置了多个工作进程,它们可以共同处理来自客户端的请求,实现简单的负载均衡。主进程会将新的连接均匀地分配给各个工作进程。

nginx的应用场景

  1. Web服务器:

    • Nginx作为高性能的Web服务器,用于提供静态内容服务。它能够高效地处理大量并发连接,适用于快速响应大规模用户请求的情境。
  2. 反向代理服务器:

    • Nginx可以用作反向代理,将客户端的请求转发到后端的应用服务器。这种方式可以提高应用的安全性、性能和可伸缩性,同时隐藏后端服务器的真实IP地址。
  3. 负载均衡器:

    • Nginx充当负载均衡器时,可以将客户端请求分发到多个后端服务器,实现负载均衡。这有助于分担服务器负载,提高整体性能和可用性。
  4. 静态文件服务器:

    • Nginx在处理静态文件(如图片、CSS、JavaScript等)上表现出色,适用于作为静态文件服务器。它能够高效地提供静态内容,降低了后端服务器的负担。
  5. 缓存服务器:

    • Nginx可以配置为缓存服务器,将经常请求的内容缓存起来,减轻后端服务器的负载。这对于提高响应速度和降低服务器压力很有帮助。

编译安装nginx

  1. 从官网下载安装包并上传到/opt目录
    https://nginx.org/en/download.html

  2. 关闭防火墙和安全机制

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    
  3. 安装依赖包

    yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
    
  4. 创建nginx用户

    useradd -M -s /sbin/nologin nginx
    
  5. 编译安装nginx

    cd /opt
    tar xf nginx-1.24.0.tar.gz #解压安装包
    cd nginx-1.24.0/
    ./configure \   									#设置编译参数
    --prefix=/usr/local/nginx \							#指定nginx的安装路径
    --user=nginx \										#指定用户名
    --group=nginx \										#指定组名
    --with-http_stub_status_module						#启用 http_stub_status_module 模块以支持状态统计
    make && make install  								#编译并安装
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		#让系统识别nginx的操作命令
    
  6. 检查、启动、重启、停止 nginx服务

    nginx -t							    #检查配置文件是否配置正确
    /usr/local/nginx/sbin/nginx				 #使用绝对路径启动nginx
    ss -natp|grep nginx						#nginx默认端口号80
    ps aux|grep nginx 						#nginx的两个进程
    cat /usr/local/nginx/logs/nginx.pid		#先查看nginx的PID号
    kill `cat /usr/local/nginx/logs/nginx.pid`   #用kill发信号来停止nginx
    

日志分割,重新打开日志文件

cd /usr/local/nginx/log			#nginx的日志文件目录
[root@localhost logs]# ls
access.log  error.log  nginx.pid    #nginx的访问日志、错误日志和pid
mv *.log /tmp			#移走日志,ls查看只剩下nginx.pid这个文件
[root@localhost logs]# ls
nginx.pid
[root@localhost logs]# kill -1 `cat nginx.pid`   #kill -1 重载或者 kill -USR1 PID
[root@localhost logs]# ls
access.log  error.log  nginx.pid   				#日志文件恢复

nginx平滑升级

[root@localhost logs]# nginx -v   	#查看nginx版本
nginx version: nginx/1.24.0 
  1. 官网下载新版本安装包并上传解压
  2. 进入解压安装包并设置编译参数,可使用nginx-V 显示 Nginx 编译时的配置参数和模块信息
  3. 使用 make和make upgrade 进行平滑升级(或使用 kill -USR2 <PID号>进行平滑升级)

具体操作如下

[root@localhost opt]# cd nginx-1.25.3/		
[root@localhost nginx-1.25.3]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@localhost nginx-1.25.3]# nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost nginx-1.25.3]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost nginx-1.25.3]# make
[root@localhost nginx-1.25.3]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
#设置备份文件
[root@localhost nginx-1.25.3]# cp objs/nginx /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.25.3]# kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid) 
[root@localhost nginx-1.25.3]# nginx -v
nginx version: nginx/1.25.3

使用systemd管理nginx

  1. 编写systemd单元文件

    vim /lib/systemd/system/nginx.service
    [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 -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    
    
    -------------------------------------------------------------------------------------
    [Unit]:服务的说明
    Description:描述服务
    After:依赖,当依赖的服务启动之后再启动自定义的服务
    
    [Service]服务运行参数的设置
    Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
    ExecStart为服务的具体运行命令
    ExecReload为重启命令
    ExecStop为停止命令
    PrivateTmp=True表示给服务分配独立的临时空间
    注意:启动、重启、停止命令全部要求使用绝对路径
    
    [Install]服务安装的相关设置,可设置为多用户
    
  2. 关闭之前启动的nginx服务

    killall nginx
    
  3. 启动nginx并设置开机自启

    systemctl start nginx.service
    systemctl enable nginx.service
    
  4. 检查服务是否启动成功

    systemctl status nginx.service 
    ps aux|grep nginx
    
  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您希望配置一个LNMP(Linux + Nginx + MySQL + PHP)环境,以下是一些基本步骤: 1. 安装Linux操作系统:选择适合您的需求的Linux发行版,并将其安装在服务器上。 2. 安装Nginx:使用软件包管理器(如apt、yum等)安装Nginx。例如,在Ubuntu上可以使用以下命令安装Nginx: ``` sudo apt update sudo apt install nginx ``` 3. 配置Nginx:根据您的需求编辑Nginx的配置文件。主要的配置文件是`/etc/nginx/nginx.conf`,您可以根据需要进行修改。确保您正确配置了Nginx的虚拟主机和反向代理等设置。 4. 安装MySQL:使用软件包管理器安装MySQL数据库。例如,在Ubuntu上可以使用以下命令安装MySQL: ``` sudo apt update sudo apt install mysql-server ``` 安装过程中会提示您设置MySQL的root用户密码,请记住该密码。 5. 安装PHP:使用软件包管理器安装PHP及其相关扩展。例如,在Ubuntu上可以使用以下命令安装PHP及常用扩展: ``` sudo apt update sudo apt install php-fpm php-mysql ``` 6. 配置PHP和Nginx:编辑Nginx的虚拟主机配置文件(通常位于`/etc/nginx/sites-available/`目录下),将请求转发给PHP-FPM处理,确保PHP正确工作。 7. 重启服务:完成配置后,重启Nginx和PHP-FPM服务以使更改生效。 ``` sudo service nginx restart sudo service php-fpm restart ``` 这只是一个基本的LNMP环境配置概述,具体的配置细节和需求会因您的具体情况而异。您可以根据需要进一步定制和优化配置。希望这能帮到您!如果您有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值