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

CentOS7下的Nginx部署

一、Nginx 概述:高性能 Web 服务的基石

1.1 Nginx 的定位与核心优势

Nginx(发音为 “engine x”)是一款开源的高性能 HTTP 和反向代理服务器,由俄罗斯工程师 Igor Sysoev 开发,于 2004 年首次发布。其设计目标是解决 C10K 问题(支持 1 万并发连接),凭借轻量级、高并发、低内存占用等特性,成为现代 Web 架构的核心组件。

核心功能

  • 静态资源服务:高效处理 HTML、CSS、JS、图片等静态文件。
  • 反向代理与负载均衡:分发客户端请求到后端服务器集群,支持轮询、最小连接数等策略。
  • API 网关与流量控制:作为微服务架构的入口,实现限流、熔断、路由转发。
  • SSL/TLS 加密:通过 HTTPS 保障数据传输安全,支持 HTTP/2 和 QUIC 协议。

典型应用场景

  • 静态网站托管(如博客、企业官网)。
  • 动态应用反向代理(如 Node.js/PHP/Java 后端)。
  • 高并发场景下的负载均衡(如电商大促、直播平台)。
  • 边缘计算与 CDN 节点(减少源站压力,提升用户访问速度)。

二、环境准备:系统配置与依赖安装

2.1 操作系统选择

Nginx 支持主流 Linux 发行版,推荐以下环境:

  • CentOS 7/8:稳定性强,适合企业级部署。
  • Ubuntu 20.04/22.04:社区活跃,包管理便捷。
  • Alpine Linux:轻量级系统,适合容器化部署(如 Docker)。

硬件要求

  • 最低配置:1 核 CPU、1GB 内存、20GB 磁盘(适用于测试环境)。
  • 生产环境:4 核 CPU、8GB + 内存、SSD 磁盘(根据流量动态扩展)。

2.2 系统优化

2.2.1 关闭防火墙(测试环境)

bash

systemctl stop firewalld && systemctl disable firewalld  # CentOS
ufw disable  # Ubuntu
2.2.2 配置 YUM/APT 仓库

CentOS/RHEL

bash

yum install -y yum-utils  # 安装仓库工具
vim /etc/yum.repos.d/nginx.repo  # 创建Nginx仓库文件

填入以下内容:

ini

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Ubuntu/Debian

bash

apt update && apt install -y apt-transport-https gnupg2
wget -qO- https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | tee /etc/apt/sources.list.d/nginx.list
apt update

三、Nginx 安装与基本配置

3.1 安装最新稳定版

3.1.1 通过包管理器安装

CentOS

bash

yum install -y nginx  # 安装Nginx

Ubuntu

bash

apt install -y nginx  # 安装Nginx
3.1.2 手动编译安装(可选)

适用于需要定制模块的场景:

bash

wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream  # 启用SSL和流模块
make && make install

3.2 服务启停与状态检查

3.2.1 控制命令

bash

systemctl start nginx       # 启动
systemctl stop nginx        # 停止
systemctl restart nginx     # 重启
systemctl reload nginx      # 重新加载配置
systemctl enable nginx      # 开机自启
systemctl status nginx      # 查看状态
3.2.2 验证安装

访问服务器 IP 或域名,若看到默认页面 “Welcome to nginx!”,表示安装成功。

bash

curl http://localhost  # 命令行验证

四、核心配置文件详解

Nginx 配置文件采用分层结构,主配置文件为/etc/nginx/nginx.conf(默认路径),主要分为以下部分:

4.1 全局块

配置影响 Nginx 全局的指令,如用户、进程数、错误日志路径:

nginx

user  nginx;          # 运行用户(默认nginx用户,需提前创建)
worker_processes  4;  # 工作进程数,建议与CPU核心数一致
error_log  /var/log/nginx/error.log warn;  # 错误日志级别
pid        /var/run/nginx.pid;  # 进程ID文件

4.2 Events 块

配置工作进程的网络连接模型:

nginx

events {worker_connections  10240;  # 每个进程最大连接数(默认1024)use epoll;                 # 使用epoll事件驱动(Linux推荐)multi_accept on;           # 允许同时接受多个连接
}

4.3 HTTP 块

核心配置模块,包含 HTTP 协议相关指令和虚拟主机配置:

nginx

http {include       /etc/nginx/mime.types;  # 媒体类型定义default_type  application/octet-stream;  # 默认文件类型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;     # 长连接超时时间# 虚拟主机配置(示例)server {listen       80;        # 监听端口server_name  example.com;  # 域名location / {root   /usr/share/nginx/html;  # 网站根目录index  index.html index.htm;  # 默认索引文件}error_page   500 502 503 504  /50x.html;  # 错误页面location = /50x.html {root   /usr/share/nginx/html;}}
}

五、虚拟主机与反向代理配置

5.1 单服务器多站点(虚拟主机)

5.1.1 基于域名的虚拟主机

nginx

server {listen 80;server_name site1.com;root /var/www/site1;index index.html;
}server {listen 80;server_name site2.com;root /var/www/site2;index index.php;  # 支持PHP动态站点(需配合FastCGI)
}
5.1.2 基于端口的虚拟主机

nginx

server {listen 8080;server_name localhost;root /var/www/app;
}

5.2 反向代理与负载均衡

5.2.1 基本反向代理配置

nginx

server {listen 80;server_name api.example.com;location / {proxy_pass http://127.0.0.1:3000;  # 代理到后端Node.js服务proxy_set_header Host $host;        # 传递原始Host头proxy_set_header X-Real-IP $remote_addr;  # 传递真实IP}
}
5.2.2 负载均衡策略

轮询(默认)

nginx

upstream backend {server 192.168.1.10:8080;server 192.168.1.11:8080;
}server {location / {proxy_pass http://backend;}
}

最小连接数

nginx

upstream backend {least_conn;  # 切换至最小连接数策略server 192.168.1.10:8080;server 192.168.1.11:8080;
}

IP 哈希(会话保持)

nginx

upstream backend {ip_hash;  # 相同IP请求转发到同一服务器server 192.168.1.10:8080;server 192.168.1.11:8080;
}

六、性能优化与安全加固

6.1 连接与超时优化

nginx

http {keepalive_requests 1000;  # 单连接最大请求数proxy_connect_timeout 30s;  # 代理连接超时proxy_read_timeout 60s;     # 代理读取超时send_timeout 60s;          # 响应超时
}

6.2 Gzip 压缩

启用 Gzip 减少带宽占用:

nginx

http {gzip on;gzip_min_length 1k;                # 最小压缩文件大小gzip_comp_level 6;                 # 压缩级别(1-9,默认6)gzip_types text/plain text/css application/json;  # 压缩类型gzip_vary on;                      # 启用Vary头,让CDN正确缓存压缩内容
}

6.3 静态资源缓存

配置浏览器缓存策略:

nginx

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {expires 7d;       # 缓存7天add_header Cache-Control "public";  # 允许公共缓存access_log off;   # 关闭静态资源日志
}

6.4 安全加固措施

6.4.1 隐藏版本号

nginx

server_tokens off;  # 移除响应头中的Nginx版本信息
6.4.2 限制访问频率

使用limit_req模块防止 CC 攻击:

nginx

http {limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;  # 定义限速区域server {location / {limit_req zone=one burst=20 nodelay;  # 突发请求限制}}
}
6.4.3 启用 HTTPS

nginx

server {listen 443 ssl;server_name example.com;ssl_certificate /etc/ssl/certs/example.crt;  # SSL证书路径ssl_certificate_key /etc/ssl/private/example.key;  # 私钥路径ssl_protocols TLSv1.2 TLSv1.3;  # 禁用老旧协议ssl_prefer_server_ciphers on;    # 优先使用服务器加密算法
}

七、常见问题与解决方案

7.1 启动失败

常见原因

  • 端口被占用(如 80 端口被其他程序监听):

    bash

    lsof -i :80  # 查看端口占用
    kill -9 <PID>  # 终止进程
    
  • 配置文件语法错误:

    bash

    nginx -t  # 检测配置文件
    nginx -s reload  # 重新加载配置
    

7.2 反向代理异常

排查步骤

  1. 检查后端服务器是否正常运行(如curl http://backend:port)。
  2. 查看 Nginx 错误日志(/var/log/nginx/error.log),确认代理路径是否正确。
  3. 检查跨域问题,添加 CORS 头:

    nginx

    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    

7.3 高并发下性能瓶颈

优化方向

  • 增加worker_processesworker_connections
  • 启用sendfiletcp_nopush提升传输效率。
  • 使用spawn_fcgiuwsgi优化动态请求处理。

八、Nginx 监控与日志分析

8.1 内置状态页

配置监控端点:

nginx

location /status {stub_status on;access_log off;allow 127.0.0.1;  # 仅允许本地访问deny all;
}

访问http://server/status查看状态:

plaintext

Active connections: 123
server accepts handled requests123456 123456 12345678
Reading: 1 Writing: 2 Waiting: 100  # 读写等待连接数

8.2 日志分析工具

  • AWK/Sed:过滤特定请求

    bash

    awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c  # 统计URI访问次数
    
  • GoAccess:实时可视化分析

    bash

    goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED  # 生成HTML报告
    
  • ELK Stack:集中式日志管理
    通过 Filebeat 收集日志,发送至 Elasticsearch,利用 Kibana 可视化。

九、容器化部署(Docker 实战)

9.1 创建 Dockerfile

dockerfile

FROM nginx:alpine  # 使用官方轻量级镜像
COPY nginx.conf /etc/nginx/nginx.conf  # 复制自定义配置
COPY html/ /usr/share/nginx/html/      # 复制静态资源
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]

9.2 启动容器

bash

docker build -t my-nginx .
docker run -d -p 80:80 -p 443:443 --name nginx-container my-nginx

十、总结:Nginx 在现代架构中的角色

Nginx 凭借其高性能、灵活性和丰富的模块生态,成为 Web 服务器领域的标杆。从静态资源服务到复杂的微服务负载均衡,其核心优势贯穿整个技术栈。通过合理配置与优化,Nginx 可轻松支撑百万级并发流量,是企业级应用部署的首选方案。

最佳实践建议

  • 生产环境采用 “Nginx + 上游服务器” 架构,分离静态与动态请求。
  • 结合云服务商(如 AWS ALB、阿里云 SLB)实现弹性扩展。
  • 定期更新 Nginx 版本,及时修复安全漏洞(参考CVE 列表)。
http://www.xdnf.cn/news/971695.html

相关文章:

  • 行业 |5G六年,互联网改变了什么?
  • WHAT - 组件库开发场景 - 完全无样式的 UI 组件库 Headless UI
  • 看板更新不及时该如何规范
  • jQuery带动画特效的圆形导航菜单特效
  • Playwright 与 Selenium:自动化测试的两大主流工具对比
  • iOS超级签申请流程及环境部署
  • 从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
  • 二叉树进阶:经典算法题详解
  • AD8539ARZ ADI 精密放大器 电子元器件解析
  • 判断素数两种方法【自用】
  • 【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
  • 工作中开发的sql总结
  • LeetCode 200.岛屿数量
  • 天猫官方认证TP服务商——品融电商代运营全链路解析
  • 无需安装!在线 SQL 数据库工具实战 :经典 SQL 语句案例
  • NY167NY171美光固态闪存NY176NY180
  • 《炒股进阶:MACD交易技术从入门到精通》速读笔记
  • Nature子刊|ChatNT:生物多模态LLM破壁者!统一DNA/RNA/蛋白质分析的对话式AI
  • JAVA中的多线程
  • 常见算法题目6 - 给定一个字符串,输出其最长的回文子串
  • F5 BIG IP show running config
  • 模型参数、模型存储精度、参数与显存
  • Postman参数化详解
  • leetcode_35.搜索插入位置
  • 如何查看电脑系统的初始安装时间?
  • 龙虎榜——20250610
  • 【沉浸式求职学习day53】【Spring】
  • MFC 第一章概述
  • 2025 Java 面试大全
  • 39.第二阶段x64游戏实战-封包-分析计数器