ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Nginx 安装与运维实战指南:Windows / Linux / Docker 全场景部署与开机自启动(nginx-tutorial)

Nginx 安装与运维实战指南:Windows / Linux / Docker 全场景部署与开机自启动(nginx-tutorial)
  • 文档
  • 教程

【免费下载链接】nginx-tutorial

这是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx。

项目地址:https://gitcode.com/gh_mirrors/ng/nginx-tutorial
点击查看免费下载

本文以 nginx-tutorial 仓库的 Nginx 运维 文档为主体,系统讲解 Nginx 在 Windows、Linux(rpm 包与源码编译两种方式)以及 Docker 容器三种形态下的安装、启动、自启动与日常运维方法,并结合仓库内自带的 examples 演示工程与脚本,给出可直接照做的操作步骤与可验证的配置证据。读完本文,你将能够独立完成 Nginx 从下载安装到开机自启、再到配置校验与重启的全流程运维工作。

一、Nginx 运维概览:先认清三种部署形态

Nginx 的"安装"从来不只是把二进制放到机器上那么简单,它通常与后续的配置管理、进程守护、日志轮转、负载均衡策略绑定在一起。结合本仓库的教程体系,运维安装是整个链路的第一步:

  • 快速上手:Nginx 快速教程 讲解常用命令与七大实战场景(反向代理、HTTPS、负载均衡、多 webapp、静态站点、文件服务器、跨域);
  • 安装运维:Nginx 运维(即本文主体)覆盖 Windows / Linux / Docker 三种安装方式与开机自启动;
  • 配置详解:Nginx 配置 深入 nginx.conf 的完整参数体系与工程化组织规范;
  • 排错手册:Nginx 问题 汇集常见问题。

从部署形态上看,本仓库文档覆盖了三条主线:

部署形态适用场景安装方式
Windows 二进制包本地开发、演示、学习官网下载 nginx/Windows 压缩包,解压即用
Linux rpm 包生产服务器快速部署通过 yum 源安装,自带 systemd 服务文件
Linux 源码编译需要定制模块、安装路径、编译参数configure + make + make install
Docker 容器隔离环境、快速迁移、CI/CDdocker pull + docker run 挂载配置

仓库中 examples/nginx-1.14.0 内置了 Nginx 1.14.0 的 Windows 官方版本及其配套启动/停止脚本,并随 examples 提供了 6 个一键式实战演示(反向代理、负载均衡、多 webapp、前后端分离、文件服务器、静态站点),可作为安装完成后验证效果的现成环境。

二、Windows 安装 Nginx

2.1 下载与解压

进入 Nginx 官方下载地址,选择nginx/Windows-xxx版本(Windows 平台专用构建,与 Linux 源码包不同),下载后解压到本地即可,无需执行安装程序。

2.2 启动、校验与停止

解压目录即 Nginx 的"安装目录",目录内通常包含conf/(配置文件)、html/(默认站点)、logs/(日志)等子目录。启动方式如下(以 C 盘根目录为例):

cd C: cd C:\nginx-0.8.54 start nginx

更稳妥的启动流程是"先校验配置、再启动"。仓库中 nginx-start.bat 正是这一标准做法的落地脚本,其核心命令为:

rem 1. 如果目录不存在 logs 目录,则创建 if not exist %~dp0logs ( md %~dp0logs ) rem 2. 如果目录不存在 temp 目录,则创建 if not exist %~dp0temp ( md %~dp0temp ) rem 3. 指定 conf/nginx.conf ,启动 nginx nginx.exe -t -c conf/nginx.conf start nginx

停止服务则使用仓库中的 nginx-stop.bat,内部只有一条命令:

nginx.exe -s stop

注:Nginx / Win32 运行在一个控制台程序,而非 Windows 服务方式。服务器方式目前还处于开发尝试阶段。这意味着 Windows 下 Nginx 随系统自启需要通过启动目录、计划任务等额外手段实现,本文不展开。

2.3 验证安装

启动后,在浏览器访问http://localhost,出现 Nginx 默认欢迎页(对应html/index.html)即表示安装成功。随后即可按照 Nginx 快速教程 的实战章节,或直接复用仓库 examples 中的demo0x-start.bat演示脚本进入配置实战。

三、Linux 安装 Nginx

Linux 下有两种主流安装路径:rpm 包方式(推荐)与源码编译方式,二者各有取舍,下面分别说明。

3.1 rpm 包方式(推荐)

rpm 方式的核心思路是:先安装 Nginx 官方维护的 yum 源,再用 yum 直接安装 nginx,全程自动化处理依赖。

(1)下载 Nginx 官方 yum 源 rpm 包

进入 Nginx 官方软件包下载页面,选择对应发行版(如 CentOS 7)的 release 包:

$ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

(2)安装 yum 源

注意:这个 rpm 包本身并不是 nginx 程序,而是安装了 nginx 的 yum 源。

$ rpm -ivh nginx-*.rpm

(3)通过 yum 正式安装 nginx

$ yum install nginx

(4)放行 80 端口(防火墙)

安装后默认监听 80 端口,需要放行防火墙规则(CentOS 7 使用 firewalld):

$ firewall-cmd --zone=public --add-port=80/tcp --permanent $ firewall-cmd --reload

rpm/yum 安装后,配置与日志通常遵循发行版约定(如/etc/nginx/nginx.conf、/var/log/nginx/),并且会自动创建 nginx.service 文件,这一点对后续设置开机自启动非常关键(见第四章)。

3.2 源码编译方式

源码编译适合需要自定义安装路径、按需选择模块(如 stub_status、ssl)、或发行版软件源版本滞后的场景。本仓库运维文档以 Nginx 1.12.2 为例演示完整流程。

3.2.1 安装编译工具及依赖库

Nginx 源码编译依赖 gcc 及若干库文件,必须先安装:

$ yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

Nginx 的正则表达式能力依赖PCRE 库,需要单独下载编译:

(1)下载解压到本地(以下以 8.35 版本为例):

wget -O /opt/pcre/pcre-8.35.tar.gz http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz cd /opt/pcre tar zxvf pcre-8.35.tar.gz

(2)编译安装 PCRE

cd /opt/pcre/pcre-8.35 ./configure make && make install

(3)验证 PCRE 是否安装成功

执行pcre-config --version命令,能输出版本号即说明安装成功。

3.2.2 编译安装 Nginx

(1)下载解压源码(以 1.12.2 版本为例):

wget -O /opt/nginx/nginx-1.12.2.tar.gz http://nginx.org/download/nginx-1.12.2.tar.gz cd /opt/nginx tar zxvf nginx-1.12.2.tar.gz

(2)configure 配置并编译安装

cd /opt/nginx/nginx-1.12.2 ./configure --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/pcre/pcre-8.35 make && make install

三个核心 configure 参数的含义:

参数作用
--with-http_stub_status_module启用stub_status状态页模块,可实时查看 Nginx 连接数等运行状态
--with-http_ssl_module启用 SSL 支持,是配置 HTTPS 反向代理(443 端口)的前提
--with-pcre=/opt/pcre/pcre-8.35显式指定 PCRE 源码路径,让 Nginx 编译时链接刚编译好的 PCRE 库

不指定--prefix时,默认安装到/usr/local/nginx(主配置位于/usr/local/nginx/conf/nginx.conf,可执行文件位于/usr/local/nginx/sbin/nginx)。

(3)放行 80 端口

$ firewall-cmd --zone=public --add-port=80/tcp --permanent $ firewall-cmd --reload

(4)启动 Nginx 并验证

安装成功后,直接执行nginx命令即可启动(完整路径为/usr/local/nginx/sbin/nginx)。启动后访问站点http://<服务器IP>即可看到 Nginx 欢迎页,证明编译安装成功。

两种方式对比小结:rpm 方式一条 yum 命令搞定依赖与 systemd 服务文件,适合大多数生产场景;源码方式则把模块选择、安装路径、编译参数的掌控权完全交还给你,代价是需要手动管理依赖并自行编写服务文件(见下文)。

四、Linux 开机自启动配置

CentOS 7 及以上版本使用Systemd进行系统初始化。Systemd 是 Linux 最新的初始化系统(init),设计目标是克服 sysvinit 固有缺点、提高系统启动速度。Systemd 服务文件以.service结尾,是否自动创建该文件,决定了自启动配置的复杂度。

4.1 rpm 包方式:一条命令搞定

如果是通过 rpm 包安装的,安装过程会自动创建nginx.service文件,直接启用即可:

$ systemctl enable nginx.service

执行后,Nginx 即被注册为开机自启动服务,同时可通过systemctl start nginx、systemctl status nginx等标准方式管理。

4.2 源码编译方式:手动创建 systemd 服务

如果采用源码编译方式安装(安装到/usr/local/nginx),需要手动创建nginx.service文件。可参考如下通用模板(保存为/usr/lib/systemd/system/nginx.service):

[Unit] Description=nginx - high performance web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target

随后执行:

# 重新加载 systemd 配置 $ systemctl daemon-reload # 设置开机自启并立即启动 $ systemctl enable nginx $ systemctl start nginx # 查看运行状态 $ systemctl status nginx

模板要点说明:

  • Type=forking:Nginx 主进程启动时会 fork 出 worker 进程,属典型的守护型进程;
  • ExecStartPre:启动前先执行nginx -t校验配置语法,防止配置错误导致服务起不来;
  • ExecReload/ExecStop:通过向主进程发送 HUP / QUIT 信号实现平滑重载与优雅停止,这与nginx -s reload/nginx -s quit的作用一致。

4.3 systemd 方式下的日常运维

注册为 systemd 服务后,日常运维可统一走 systemctl:

systemctl start nginx # 启动 systemctl stop nginx # 停止 systemctl reload nginx # 平滑重载配置(不中断服务) systemctl restart nginx # 重启 systemctl enable nginx # 设置开机自启 systemctl status nginx # 查看状态

五、Docker 方式安装与运维

对于隔离环境、快速迁移和 CI/CD 场景,Docker 是更轻量的选择。官方镜像为nginx(Docker Hub 上的官方镜像),整个流程只需三条核心命令:

# 下载镜像 docker pull nginx # 启动容器:挂载日志目录与配置文件 docker run --name my-nginx -p 80:80 \ -v /data/docker/nginx/logs:/var/log/nginx \ -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \ -d nginx

启动命令参数解读:

参数含义
--name my-nginx为容器命名,便于后续引用
-p 80:80将宿主机 80 端口映射到容器内 80 端口
-v /data/docker/nginx/logs:/var/log/nginx将宿主机日志目录挂载到容器日志目录,日志落在宿主机
-v ...nginx.conf:/etc/nginx/nginx.conf:ro以只读方式挂载自定义主配置,宿主机改配置即容器内生效
-d后台运行容器

容器内 Nginx 的日常操作通过docker exec或docker stop/restart完成:

# 重新加载配置(注:此方式实测无效,只能重启服务) docker exec -it my-nginx nginx -s reload # 停止服务(两种方式) docker exec -it my-nginx nginx -s stop docker stop my-nginx # 重新启动服务 docker restart my-nginx

注意:容器内执行nginx -s reload在部分场景下不能按预期生效,原运维文档的实测结论是"目前测试无效,只能重启服务"。因此在 Docker 形态下修改配置后,优先使用docker restart my-nginx确保生效。

六、Nginx 日常运维命令与配置校验

无论用哪种方式安装,Nginx 的命令行操作都是统一的。常用命令整理如下(完整命令表见 Nginx 快速教程):

命令作用
nginx -s stop快速关闭 Nginx,可能不保存相关信息,并迅速终止 Web 服务
nginx -s quit平稳关闭 Nginx,保存相关信息,有安排地结束 Web 服务
nginx -s reload因改变了 Nginx 相关配置,重新加载配置(平滑重载,不中断服务)
nginx -s reopen重新打开日志文件(日志轮转后常用)
nginx -c filename为 Nginx 指定一个配置文件,代替缺省的 nginx.conf
nginx -t仅测试配置文件:检查配置语法正确性,并尝试打开配置中引用的文件
nginx -v显示 Nginx 版本
nginx -V显示 Nginx 版本、编译器版本和编译配置参数

推荐运维习惯:任何一次配置修改后,都先执行nginx -t校验语法,再执行nginx -s reload(或 systemd 下的systemctl reload nginx)平滑生效。配置重载还有多种等价形式,详见 Nginx 配置 的"重加载 Nginx 配置"一节,包括:

systemctl reload nginx service nginx reload /etc/init.d/nginx reload /usr/sbin/nginx -s reload kill -HUP $(cat /var/run/nginx.pid)

此外,运维中最常看的两个日志文件是错误日志(error_log,排查启动失败与运行时错误)和访问日志(access_log,分析请求量与来源),其路径可在 nginx.conf 中通过error_log、access_log、log_format指令自定义(参数详解见 Nginx 配置)。

七、一键安装脚本与仓库演示脚本

7.1 Linux 一键安装脚本

运维文档提供了一套 CentOS 7 环境的 Nginx 一键安装脚本(源自软件运维配置脚本集合),其安装说明如下:

  • 采用编译方式安装 Nginx,并将其注册为 systemd 服务;
  • 安装路径为/usr/local/nginx;
  • 默认下载安装1.16.0版本。

默认安装——执行以下任意一条命令即可(在线拉取脚本并执行):

curl -o- <nginx-install.sh 在线地址> | bash wget -qO- <nginx-install.sh 在线地址> | bash

自定义安装——将脚本下载到本地后,按以下格式执行([version]指定版本号):

sh nginx-install.sh [version]

7.2 仓库自带演示脚本:安装后的一站式验证环境

除运维文档介绍的一键脚本外,本仓库 examples 还内置了一套开箱即用的 Windows 演示环境,安装 Nginx 后可以直接运行验证:

  • nginx-start.bat / nginx-stop.bat:启动 / 停止内置的 Nginx 1.14.0;
  • examples/nginx-1.14.0/conf/nginx.conf:演示主配置,通过include conf.d/*.conf;批量引入各场景配置片段;
  • examples/scripts 下的demo01-start.bat~demo06-start.bat:一键启动对应实战场景(反向代理、负载均衡、多 webapp、前后端分离、文件服务器、静态站点)。

值得说明的是,演示后端 javaapp 是一个可参数化的嵌入式 Tomcat 服务,其启动类 Main.java 支持通过-Dtomcat.connector.port和-Dtomcat.context.path在启动时指定端口与上下文路径(源码中System.getProperty("tomcat.connector.port")的默认值为 8080)。借助这一设计,演示脚本可以用同一份代码模拟出多个服务器实例,例如负载均衡场景 demo02-start.bat 一次拉起 9021/9022/9023 三个端口,多 webapp 场景 demo03-start.bat 一次拉起/、/product、/user三个上下文,从而直观验证 Nginx 的upstream加权轮询与location上下文分流效果(对应配置见 demo02.conf 与 demo03.conf)。

八、延伸阅读

完成安装与自启动配置后,建议按以下顺序继续深入:

  • Nginx 快速教程:常用命令 + 七大实战场景完整配置,可直接对照上手;
  • Nginx 配置:nginx.conf 全参数详解、配置工程化组织规范、日志轮转与调试技巧;
  • Nginx 问题:常见报错与排查方案;
  • examples 示例说明:6 个一键式实战演示的运行步骤与配置要点,用于验证安装结果。
  • 文档
  • 教程

【免费下载链接】nginx-tutorial

这是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx。

项目地址:https://gitcode.com/gh_mirrors/ng/nginx-tutorial
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进