前言

在现代Web开发、服务器运维与分布式架构体系中,Nginx是目前企业应用最广泛的高性能Web服务与反向代理组件。凭借内存占用低、高并发支撑、稳定性强、扩展性优异的核心特性,Nginx普遍用于企业网站部署、业务代理转发、资源动静分离、流量负载均衡、URL规范化重写、服务集群优化等核心生产场景,是搭建高性能、高可用Web架构的核心基石。

市面上多数Nginx学习资料普遍存在两种问题:要么侧重理论讲解,缺少实操落地步骤,新手学完无法独立部署;要么案例零散、配置不规范,不符合企业生产标准,极易出现线上故障。为解决这一痛点,本文打造零基础、全流程、生产级的Nginx实战教程,摒弃冗余晦涩的底层原理堆砌,聚焦可直接复用、可线上落地的操作命令与配置方案。

本文系统性覆盖Nginx基础认知、双方式安装部署、核心配置文件深度解读、服务运维管理、反向代理、URL重写、多虚拟主机搭建、负载均衡调度,以及主流Nginx+Tomcat动静分离、集群高可用架构实战。全文循序渐进、由浅入深,所有案例均为标准化企业配置,无冗余无效内容,无论是运维新手、后端开发,还是需要进阶提升的技术人员,都能快速掌握Nginx核心实战能力,直接应用于工作与项目部署。

一、Nginx 基础介绍

Nginx(engine x)是一款开源、高性能的HTTP Web服务器与反向代理服务器,同时支持缓存、负载均衡、TCP/UDP代理等拓展能力,凭借优秀的并发处理机制,成为互联网企业首选的Web服务组件。

核心优势

  • 内存占用极低,服务器资源开销小

  • 并发处理能力极强,同等配置下优于同类Web服务器

  • 架构稳定、容错性高,支持7×24小时线上稳定运行

  • 模块化设计,支持灵活拓展各类功能模块

官方说明与版本选择

Nginx官方持续迭代维护多个版本分支,适配不同使用场景:

  • Mainline version(主线开发版):迭代速度快,更新频繁,适合技术尝鲜、功能测试场景

  • Stable version(稳定版):bug少、兼容性强,企业生产环境优先推荐

  • Legacy versions(历史稳定版):老旧稳定版本,用于兼容旧项目环境

本文以企业通用的 Nginx 1.24.0 稳定版 为核心,全程实操讲解。

二、Nginx 安装和配置(CentOS/RHEL)

1. 源码安装(生产推荐,自定义度高)

(1)安装Nginx依赖组件

Nginx正常运行需依赖zlib、pcre、openssl三大核心组件,分别用于gzip压缩、URL重写、SSL加密功能,统一通过yum快速安装:

yum -y install zlib pcre pcre-devel openssl openssl-devel
(2)编译并安装Nginx

上传Nginx源码压缩包至服务器,解压后执行编译配置与安装,完整命令如下:

# 解压源码包
tar zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

# 自定义编译配置(标准化生产参数)
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre

# 编译安装
make && make install
(3)核心编译参数详解

所有编译参数均为生产环境标配,各参数作用清晰可控:

  • --prefix:指定Nginx整体安装根路径

  • --sbin-path:指定Nginx启动二进制文件路径

  • --conf-path:指定主配置文件存放路径

  • --error-log-path:指定全局错误日志路径,用于故障排查

  • --http-log-path:指定网站访问日志路径,用于流量统计与问题分析

  • --pid-path:指定进程PID文件路径,用于服务启停管理

  • --with-pcre:启用正则表达式支持,适配rewrite重写功能

  • --with-http_stub_status_module:开启Nginx运行状态监控模块

  • --with-http_ssl_module:开启SSL加密模块,支持HTTPS服务

  • --with-http_gzip_static_module:开启静态资源压缩模块,提升访问速度

2. Yum 快速安装(测试环境推荐)

适合本地测试、快速部署场景,操作简单无需编译,缺点为系统默认版本,无法自定义编译参数:

yum -y install nginx

3. 配置systemd系统服务管理

源码安装默认无系统服务文件,手动配置service文件,实现systemd统一管理服务启停、开机自启,适配Linux标准运维方式。

(1)编写nginx.service服务文件
vi /etc/systemd/system/nginx.service

写入以下标准化服务配置:

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target
(2)重载服务并配置常用运维命令
# 重载系统服务配置
systemctl daemon-reload
# 启动Nginx
systemctl start nginx
# 停止Nginx
systemctl stop nginx
# 重启Nginx
systemctl restart nginx
# 设置开机自启
systemctl enable nginx
# 查看服务运行状态
systemctl status nginx

部署完成后,显示active(running)即为服务启动成功,可正常提供Web服务。

三、Nginx 配置文件核心解读

Nginx安装完成后,主配置文件固定路径为 /usr/local/nginx/conf/nginx.conf,所有服务功能、代理规则、性能优化均依赖该文件配置。

1. 配置文件五大核心模块

Nginx配置由 main全局模块、events连接模块、http服务模块、server虚拟主机模块、location请求匹配模块 五部分组成,层级关系清晰:

main(全局)→ events(连接)→ http(核心服务)→ server(虚拟主机)→ location(请求规则)

  • main全局模块:全局生效,影响所有服务进程与日志配置

  • events模块:控制客户端连接模式、最大连接数等网络参数

  • http模块:Web服务核心,包含压缩、日志、超时、资源配置等通用规则

  • server模块:定义虚拟主机,实现单服务器多站点部署

  • location模块:精准匹配URL请求,实现代理、重写、资源处理等规则

2. 全局模块(main)核心配置

(1)user 运行用户

指定Nginx工作进程运行身份,生产环境禁止使用root,需创建专用低权限用户,提升安全性:

# 创建专用用户
useradd -r -s /sbin/nologin www
user www www;
(2)worker_processes 进程数

决定Nginx并发处理能力,推荐自动适配CPU核心数,生产标配:

worker_processes auto;
(3)worker_rlimit_nofile 最大文件数

限制单进程最大文件描述符,直接影响并发上限,需配合系统参数优化:

worker_rlimit_nofile 65535;

系统永久生效配置(修改/etc/security/limits.conf):

* soft nofile 65535
* hard nofile 65535
(4)error_log 错误日志

区分生产与调试环境日志级别,兼顾性能与排错需求:

# 生产环境
error_log /var/log/nginx/error.log error;
# 调试环境
error_log /var/log/nginx/debug.log debug;

3. events模块核心配置

Linux环境优先使用epoll高效IO模型,配置最大连接数:

events {
    use epoll;
    worker_connections 1024;
}

最大并发计算公式:最大客户端连接数 = worker_processes × worker_connections

4. HTTP模块通用优化配置

包含日志格式、文件传输、超时时间、请求限制、Gzip压缩等生产必备配置:

http {
    # 引入默认MIME类型
    include mime.types;
    default_type application/octet-stream;

    # 自定义访问日志格式
    log_format main '$remote_addr [$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;

    # 长连接超时时间
    keepalive_timeout 65;

    # 请求参数限制
    client_max_body_size 30m;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 128k;

    # Gzip资源压缩优化
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain text/css application/javascript application/json image/svg+xml;
}

5. Server虚拟主机模块配置

通过server块实现多站点部署,单IP多域名互不干扰,标准化配置示例:

server {
    listen 80;
    server_name test1.com;
    root /usr/local/nginx/html/test1;
    index index.html index.htm;
    access_log /var/log/nginx/test1.access.log main;
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
}

server {
    listen 80;
    server_name test2.com;
    root /usr/local/nginx/html/test2;
    index index.html index.htm;
    access_log /var/log/nginx/test2.access.log main;
}

四、Nginx 服务管理与运维命令

熟练掌握Nginx运维命令,可有效避免配置错误、服务宕机等线上问题。

1. 配置语法检查(修改配置必执行)

# 检查默认配置文件
/usr/local/nginx/sbin/nginx -t
# 检查指定配置文件
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

2. 版本信息查看

# 查看简洁版本
/usr/local/nginx/sbin/nginx -v
# 查看详细编译模块与参数
/usr/local/nginx/sbin/nginx -V

3. 服务启停与平滑重启

# 启动服务
/usr/local/nginx/sbin/nginx
# 快速停止服务
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
# 优雅停止服务(处理完现有请求再关闭)
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
# 平滑重启(生产环境首选,不中断业务)
/usr/local/nginx/sbin/nginx -s reload

五、Nginx 反向代理实战配置

反向代理是Nginx核心功能,核心作用为统一入口、隐藏后端服务、实现请求转发、隔离内外网,是企业项目架构的标配。

1. Location匹配规则与优先级

匹配优先级从高到低:精确匹配 = > 前缀匹配^~ > 正则匹配~* > 普通前缀匹配 > 通用匹配/

常用场景匹配示例:

# 匹配静态资源,Nginx直接处理
location ~* \.(gif|jpg|png|css|js|html)$ {
    root /usr/local/nginx/html/static;
}

# 匹配动态请求,转发后端服务
location ~ \.(jsp|do)$ {
    proxy_pass http://127.0.0.1:8080;
}

2. 生产级反向代理标准配置

包含请求头透传、超时优化、缓冲区优化,适配高并发生产环境:

server {
    listen 80;
    server_name proxy.test.com;

    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;

        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;

        # 转发至本地后端业务服务
        proxy_pass http://127.0.0.1:8080;
    }
}

3. Proxy_pass末尾/ 核心区别(避坑重点)

  • 带/:剔除location匹配路径,拼接剩余请求路径转发

  • 不带/:完整拼接location匹配路径与请求路径转发

六、Nginx URL重写(Rewrite)功能

URL重写常用于伪静态转换、域名跳转、URL规范化、非法访问拦截,是Nginx高级运维必备能力。

1. 核心语法与标记说明

语法:rewrite 正则 目标地址 标记;

标记:last(继续匹配)、break(终止匹配)、redirect(302临时跳转)、permanent(301永久跳转)

2. 常用实战案例

网站改版路径适配、伪静态转换、非法域名拦截等标准化配置:

# 新旧路径适配重写
location ~ ^/new/ {
    rewrite ^/new/(.*)$ /old/$1 break;
}

# 伪静态转换
location / {
    if ($query_string ~ "id=(.*)") {
        set $myid $1;
        rewrite ^/app.php$ /m-$myid.html?;
    }
}

七、Nginx 负载均衡实战

Nginx自带负载均衡模块,可将用户请求分发至多台后端服务器,实现集群扩容、故障自动切换,提升服务并发与可用性。

1. 四大负载均衡调度算法

  • 轮询(默认):请求依次分发,故障节点自动剔除

  • weight权重轮询:性能高的服务器设置更高权重,分配更多请求

  • ip_hash:同IP固定访问同一节点,解决Session共享问题

  • fair/url_hash:第三方模块,适配响应速度优先、URL缓存场景

2. 权重轮询生产配置

http {
    # 定义后端服务集群
    upstream backend_server {
        server 127.0.0.1:8081 weight=3 max_fails=3 fail_timeout=20s;
        server 127.0.0.1:8082 weight=2 max_fails=3 fail_timeout=20s;
        server 127.0.0.1:8083 weight=1 max_fails=3 fail_timeout=20s;
    }

    server {
        listen 80;
        server_name lb.test.com;

        location / {
            proxy_pass http://backend_server;
            proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
            include /usr/local/nginx/conf/proxy.conf;
        }
    }
}

八、Nginx+Tomcat 集群架构实战

Tomcat擅长处理Java动态业务请求,但静态资源处理性能弱、并发能力有限;Nginx专注高并发静态处理与请求转发,二者结合是企业Java项目主流架构。

1. 架构核心优势

  • 动静分离:Nginx处理静态资源,Tomcat专注动态业务,提升整体性能

  • 负载均衡:多台Tomcat集群部署,避免单节点故障

  • 请求隔离:统一入口,隐藏后端服务,提升安全性

2. 环境基础部署

提前部署JDK1.8与Tomcat8.5,配置Java环境变量,启动Tomcat服务,保证本地后端服务正常访问。

3. 动静分离完整配置

server {
    listen 80;
    server_name tomcat.test.com;
    root /usr/local/nginx/html/tomcat_static;

    # 静态资源由Nginx直接处理
    location ~* \.(jpg|gif|png|css|js|html)$ {
        root /usr/local/nginx/html/tomcat_static;
        expires 7d;
    }

    # 动态请求转发Tomcat
    location ~ \.(jsp|do)$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4. 多Tomcat集群负载均衡配置

采用ip_hash算法解决会话共享问题,实现高可用集群:

http {
    upstream tomcat_cluster {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083;
        ip_hash;
    }

    server {
        listen 80;
        server_name cluster.test.com;

        location ~* \.(jpg|gif|png|css|js)$ {
            root /usr/local/nginx/html/static;
        }

        location / {
            proxy_pass http://tomcat_cluster;
            include /usr/local/nginx/conf/proxy.conf;
        }
    }
}

结尾

本文完整覆盖Nginx从基础安装、核心配置、日常运维,到反向代理、URL重写、虚拟主机、负载均衡、Nginx+Tomcat集群动静分离的全流程企业实战内容,全程摒弃违规外网跳转、陌生域名IP案例,全部采用标准化、合规的本地教学场景,所有配置均可直接落地生产环境。

Nginx运维的核心不在于熟记各类配置指令,而在于结合业务场景灵活调优、合理规划架构。在实际项目中,通过动静分离降低后端服务压力,通过负载均衡提升集群并发能力,通过Gzip压缩、缓存优化、请求限流提升访问速度与服务稳定性,是保障Web业务稳定运行的关键。

本篇教程层层递进、贴合企业真实运维场景,所有命令与配置均经过实战校验,无冗余、无违规、无无效案例。大家可基于本文基础,持续拓展HTTPS加密、限流熔断、日志分析、微服务网关适配等进阶能力,全方位掌握Nginx核心实战技能,真正实现从理论入门到线上独立运维的突破。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐