当前位置: 首页 > news >正文

【web服务_负载均衡Nginx】一、Nginx 基础与核心概念解析

一、Nginx 概述:从起源到行业地位​

Nginx(发音为 “engine x”)是一款高性能的开源 Web 服务器、反向代理服务器,同时具备负载均衡、内容缓存、TCP/UDP 代理及邮件代理等功能。它由俄罗斯工程师伊戈尔・赛索耶夫(Igor Sysoev)为Rambler.ru站点开发,于 2004 年 10 月 4 日以 2-clause BSD 许可协议发布首个公开版本。凭借其轻量级架构与卓越的高并发处理能力,Nginx 迅速在全球 Web 市场占据重要地位。​

在国内,百度、京东、新浪等头部互联网企业均将 Nginx 作为核心 Web 服务器。据 Netcraft 统计,截至 2024 年,Nginx 在全球活跃网站的 Web 服务器市场份额已超 35%,成为高并发场景下的首选技术方案。​

二、CentOS 7 环境搭建:Nginx 的安装与启动​

2.1 安装依赖包​

在 CentOS 7 系统中,Nginx 的安装需依赖gcc、pcre、zlib等编译工具。通过以下命令安装:

sudo yum install -y gcc pcre-devel zlib-devel

执行上述命令后,系统将自动下载并安装所需依赖包。​

2.2 下载与编译 Nginx​

从 Nginx 官方网站(Index of /download/)获取最新稳定版源码,本文以nginx-1.23.3为例:

wget https://nginx.org/download/nginx-1.23.3.tar.gz
tar -zxvf nginx-1.23.3.tar.gz
cd nginx-1.23.3

进入源码目录后,通过./configure命令配置编译参数:

./configure \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_stub_status_module

参数说明:​

  • --prefix:指定 Nginx 安装目录​
  • --conf-path:配置文件路径​
  • --pid-path:PID 文件路径​
  • --error-log-path:错误日志路径​
  • --http-log-path:访问日志路径​
  • --with-http_ssl_module:启用 SSL 模块​
  • --with-http_gzip_static_module:支持静态 Gzip 压缩​
  • --with-http_stub_status_module:启用状态统计模块

编译并安装:

make && sudo make install

 2.3 启动与验证​

安装完成后,可通过以下命令启动 Nginx:

sudo /usr/local/nginx/sbin/nginx

验证 Nginx 是否正常运行:

sudo netstat -tunlp | grep nginx

若出现类似下图所示的监听端口(默认 80端口),则表示 Nginx 已成功启动:

或者通过查看服务状态来监测是否启动:

sudo systemctl status nginx

如果出现下图中的 状态显示为active(running),则表示正常运行了。

三、Nginx 架构剖析:Master-Worker 模型​

3.1 进程结构分析​

Nginx 采用多进程架构,包含一个 master 进程与多个 worker 进程。通过ps -ef | grep nginx命令查看进程状态:

master 进程职责:​

  • 读取并校验配置文件(nginx.conf)​
  • 管理 worker 进程生命周期(启动、停止、重启)​
  • 接收信号(如SIGHUP用于重新加载配置)​

worker 进程职责:​

  • 处理客户端请求,通过事件驱动模型实现高并发​
  • 共享 master 进程打开的文件描述符​

3.2 事件驱动机制​

Nginx 基于事件驱动的多路复用器(如 epoll、kqueue)处理网络 IO。以 epoll 为例,其通过epoll_wait函数高效监听大量文件描述符,当有事件发生时才唤醒进程处理请求,相比传统 BIO(阻塞式 IO)显著降低资源消耗。

四、配置文件详解:nginx.conf 的核心模块​

Nginx 配置文件采用模块化结构,主要分为main、events、http三大块,其中http块下可嵌套多个server子模块。​

4.1 全局配置(main 块)

user nginx nginx;        # 指定运行用户和用户组
worker_processes auto;   # 自动根据CPU核心数设置worker进程数
error_log /var/log/nginx/error.log warn;  # 错误日志路径与级别
pid /var/run/nginx.pid;  # PID文件路径

4.2 事件配置(events 块)

events {worker_connections 1024;  # 每个worker进程最大连接数multi_accept on;          # 允许同时接收多个新连接use epoll;                # 使用epoll事件模型
}

4.3 HTTP 核心配置(http 块)

http {include mime.types;       # 引入MIME类型定义default_type application/octet-stream;  # 默认MIME类型log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';  # 日志格式access_log /var/log/nginx/access.log main;  # 访问日志路径与格式sendfile on;              # 启用零拷贝传输tcp_nopush on;            # 合并网络包tcp_nodelay on;           # 禁用Nagle算法keepalive_timeout 65;     # 长连接超时时间gzip on;                  # 启用Gzip压缩gzip_comp_level 6;        # 压缩级别gzip_types text/plain application/json;  # 压缩文件类型
}

4.4 虚拟主机配置(server 块)

server {listen 80;                # 监听端口server_name example.com;  # 域名location / {root /var/www/html;   # 网站根目录index index.html;     # 默认首页}error_page 500 502 503 504 /50x.html;  # 错误页面映射location = /50x.html {root html;}
}

五、实战演练:搭建静态网站​

5.1 准备网站文件​

在/var/www/html目录下创建index.html文件:

sudo mkdir -p /var/www/html
sudo echo "<h1>Welcome to Nginx!</h1>" > /var/www/html/index.html
sudo chown -R nginx:nginx /var/www/html

5.2 配置虚拟主机​

修改/etc/nginx/nginx.conf,添加或修改server块:

server {listen 80;server_name your_domain.com;location / {root /var/www/html;index index.html;}
}

5.3 重载配置并访问

sudo nginx -s reload

在浏览器输入服务器 IP 或域名,即可看到如下页面:

六、常见管理命令与故障排查​

6.1 常用命令

命令

说明

sudo nginx

启动 Nginx

sudo nginx -s stop

快速停止 Nginx

sudo nginx -s quit

优雅停止 Nginx

sudo nginx -s reload

重新加载配置文件

sudo nginx -t

检查配置文件语法

6.2 故障排查​

若 Nginx 无法启动,可通过以下步骤排查:​

        1、检查/var/log/nginx/error.log错误日志​

        2、使用nginx -t验证配置文件语法​

        3、确认端口占用情况(如80端口被其他进程占用)

本篇文章通过在Centos7环境下的实操案例,简单介绍了nginx的起源、基础架构、核心配置和典型的web应用。后续文章将持续更新nginx进阶的功能点和技术栈。

相关文章:

  • 使用 reverse-sourcemap 工具反编译 Vue 项目
  • 如何通俗理解transformer架构
  • Vue中v-if和v-show区别
  • 探索Web3平台的数据安全和保护机制
  • 蓝光三维扫描技术:高效精密测量相机镜头底座注塑件
  • 在 Power BI Desktop 中设置视觉对象查询限制
  • 基于labview的钢琴程序设计
  • 算法之贪心算法
  • Python + 链上数据可视化:让区块链数据“看得懂、用得上”
  • ESP32- 开发笔记- 硬件设计-ESP32-C3基本电路
  • Windows平台使用Docker部署Neo4j
  • 《MySQL:MySQL数据库的基本操作》
  • 利用互斥锁或者利用逻辑过期解决缓存击穿问题
  • C# 类型、存储和变量(实例化类型)
  • Flutter的原理及美团的实践(下)
  • Java 中 Synchronized如何保证可见性
  • 访问者模式深度解析与实战案例
  • AI日报 - 2025年4月18日
  • 【KWDB 创作者计划】深度实操体验 KWDB 2.2.0:从安装到实战的全流程解析以及实操体验
  • 线程同步——互斥锁
  • 广西百色通报:极端强对流天气致墙体倒塌,3人遇难7人受伤
  • 价格周报|供需回归僵局,本周生猪均价与上周基本持平
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长
  • 深入贯彻中央八项规定精神学习教育中央第七指导组指导督导中国船舶集团见面会召开
  • 夜读丨母亲的手擀面
  • 诺和诺德一季度减重版司美格鲁肽收入增83%,美国市场竞争激烈下调全年业绩预期