保姆级教程:在Linux系统下安装并启动Nginx – wiki基地


保姆级教程:在Linux系统下安装并启动Nginx——从零到一,万字详解

引言:为什么选择Nginx?为什么需要这篇教程?

在当今的互联网世界,无论您是资深开发者、运维工程师,还是刚刚踏入技术领域的新手,几乎都无法绕开一个名字——Nginx。Nginx(发音为 “engine x”)是一款开源的、高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。它以其卓越的性能、稳定性、丰富的功能集、简单的配置和低系统资源消耗而闻名于世。从托管个人博客到支撑全球流量最高的网站(如Netflix、WordPress.com),Nginx的身影无处不在。

然而,对于许多初次接触Linux服务器的用户来说,在黑色的命令行界面上安装、配置并启动一个服务,可能会感到一丝畏惧。网络上的教程琳琅满目,但质量参差不齐,有的命令过时,有的步骤跳跃,有的只讲“做什么”而不讲“为什么这么做”,这让新手在遇到问题时束手无策。

本篇文章的宗旨,就是为您提供一篇真正“保姆级”的教程。我们将手把手地、一步一步地引导您,在主流的Linux发行版(以Ubuntu/Debian和CentOS/RHEL系列为例)上完成Nginx的安装、启动、配置防火墙、验证以及日常管理。我们不仅会提供清晰的命令,更会详细解释每一步的缘由和目的,并预判您可能遇到的常见问题,给出排查思路。

这篇教程适合谁?
* 几乎没有Linux命令行经验,但希望搭建自己网站或学习服务器知识的学生或爱好者。
* 有一定开发经验,但对服务器部署和运维不熟悉的开发者。
* 任何希望系统性地、扎实地学习Nginx安装与基础管理的人。

准备好了吗?让我们泡上一杯咖啡,一起开启这段从零到一的Nginx探索之旅。

第一章:准备工作——万丈高楼平地起

在开始安装Nginx之前,我们需要确保我们的“地基”是稳固的。这包括一台准备好的Linux服务器和一些基本的权限。

1. 一台Linux服务器:
您可以通过云服务商(如阿里云、腾讯云、AWS、Google Cloud等)购买一台云服务器(ECS/VPS),也可以在自己的电脑上通过虚拟机软件(如VirtualBox、VMware)安装一个Linux系统。本教程将主要覆盖两大主流Linux发行系列:
* Debian / Ubuntu系列: 以其友好的社区和易用性广受欢迎。
* RHEL / CentOS / Rocky Linux / AlmaLinux系列: 在企业级服务器市场占有主导地位。

请确保您的服务器已经安装完毕,并且可以正常连接。

2. SSH连接工具:
您需要一个工具来远程连接到您的Linux服务器。
* Windows用户: 可以使用Xshell、PuTTY、MobaXterm,或者Windows 10/11自带的OpenSSH客户端(在命令提示符或PowerShell中直接使用ssh命令)。
* macOS / Linux用户: 直接使用系统自带的终端(Terminal)即可。

3. sudoroot权限:
安装软件、修改系统配置等操作都需要管理员权限。在Linux中,最高权限的用户是root。但为了安全起见,通常不建议直接使用root用户登录和操作。更推荐的做法是使用一个普通用户,并在需要管理员权限的命令前加上sudo(Super User Do)。本教程将全程使用sudo。请确保您登录的用户在sudoers组中。

4. 网络连接:
确保您的服务器可以正常访问互联网,因为我们需要从网络上下载Nginx的安装包。

当您已经通过SSH成功登录到您的服务器命令行界面时,我们的准备工作就完成了。

第二章:选择最适合你的安装方式

安装Nginx主要有两种方式:使用包管理器安装从源码编译安装

  • 使用包管理器安装(推荐新手):

    • 优点: 极其简单、快速,一两行命令即可完成。系统会自动处理所有依赖关系。后续的更新、卸载也非常方便。
    • 缺点: 软件版本可能不是最新的。包管理器软件源中的Nginx版本通常是经过该Linux发行版测试的稳定版,可能会落后于Nginx官方发布的最新版本。
    • 适用场景: 绝大多数场景,特别是对于初学者和不需要特定模块或最新功能的用户。
  • 从源码编译安装(适合高级用户):

    • 优点: 可以获取到最新的Nginx版本。可以高度自定义,根据需要添加或移除特定模块(例如,添加第三方模块)。
    • 缺点: 过程复杂,需要手动安装编译工具和所有依赖库。后续升级和维护也需要手动操作,容易出错。
    • 适用场景: 需要使用Nginx最新特性,或需要集成官方默认未包含的第三方模块的专业场景。

本篇“保姆级”教程将重点详细讲解第一种方式:使用包管理器安装。 这是最适合新手入门且最不容易出错的方式。

第三章:实战操作——使用包管理器安装Nginx

我们将分别针对Debian/Ubuntu和CentOS/RHEL系列进行讲解。请根据您的服务器系统选择对应的部分。

3.1 在 Ubuntu / Debian 系统上安装Nginx

Debian和Ubuntu使用apt(Advanced Package Tool)作为其包管理器。

第一步:更新软件包列表

在安装任何新软件之前,一个最佳实践是先更新本地的软件包索引。这能确保您能获取到可用的最新版本信息。

bash
sudo apt update

  • sudo: 提权,以管理员身份执行后面的命令。
  • apt update: 这个命令并不会升级你已安装的软件,它只是从软件源服务器获取最新的软件包列表,包括它们的版本号、依赖关系等信息。

执行后,您会看到终端滚动显示一系列URL,最后提示“… packages can be upgraded.”。

第二步:安装Nginx

现在,我们可以正式安装Nginx了。

bash
sudo apt install nginx -y

  • apt install nginx: 告诉apt工具我们要安装名为nginx的软件包。
  • -y: 这是一个可选参数,意为“yes”。在安装过程中,系统会问你“Do you want to continue? [Y/n]”,加上-y参数后,会自动回答“yes”,省去了一次手动确认的步骤。

安装过程会自动下载Nginx及其所需的依赖包,并完成配置。整个过程通常在一分钟内完成。

第三步:验证安装

安装完成后,我们可以通过查看Nginx的版本号来确认它是否已成功安装。

bash
nginx -v

如果安装成功,终端会返回类似下面的信息,显示Nginx的版本号:
nginx version: nginx/1.18.0 (Ubuntu)
看到这个,恭喜您,Nginx的核心程序已经成功安装到您的系统中了!

3.2 在 CentOS / RHEL / Rocky Linux 系统上安装Nginx

CentOS/RHEL系列早期使用yum(Yellowdog Updater, Modified),较新版本(CentOS 8+)则使用dnf(Dandified YUM)。它们的命令基本兼容,本教程以yum为例,如果您使用dnf,只需将命令中的yum替换为dnf即可。

第一步:安装EPEL源

与Ubuntu不同,CentOS/RHEL的官方默认软件源中可能不包含Nginx,或者版本非常老旧。为了安装一个较新且维护良好的Nginx版本,我们通常需要先安装一个名为EPEL(Extra Packages for Enterprise Linux)的扩展软件源。它由Fedora社区维护,为企业级Linux提供了大量高质量的软件包。

bash
sudo yum install epel-release -y

第二步:更新软件包缓存(可选但推荐)

安装完新的软件源后,可以更新一下本地缓存,确保系统知道EPEL源中有哪些可用的包。

bash
sudo yum update -y

第三步:安装Nginx

现在,我们可以像在Ubuntu上一样,直接安装Nginx了。

bash
sudo yum install nginx -y

第四步:验证安装

同样地,使用nginx -v命令来验证安装。

bash
nginx -v

您应该会看到类似nginx version: nginx/1.20.1这样的输出。这表明Nginx已在您的CentOS/RHEL系统上安装成功。

第四章:核心技能——管理Nginx服务

仅仅安装好软件是不够的,我们还需要学会如何控制它,就像汽车的启动、熄火、重启一样。在现代Linux系统中,我们使用systemd这一服务管理器来控制Nginx,相关的命令都是通过systemctl来执行的。

1. 启动Nginx服务:

安装完成后,Nginx服务在某些系统上可能不会自动启动(尤其是在CentOS/RHEL上)。我们需要手动启动它。

bash
sudo systemctl start nginx

这个命令执行后没有任何输出,是正常现象。Linux哲学中“没有消息就是好消息”。

2. 设置开机自启动:

我们希望服务器重启后,Nginx能自动运行,而不需要我们每次都手动登录去启动。这就需要将Nginx服务设置为“开机自启动”。

bash
sudo systemctl enable nginx

执行后,您可能会看到一条消息,提示创建了一个符号链接(symlink),这表示设置成功。

3. 查看Nginx服务状态:

如何知道Nginx当前是正在运行,还是已经停止了?或者启动失败了?status命令是您最重要的诊断工具。

bash
sudo systemctl status nginx

如果Nginx正常运行,您会看到绿色的active (running)字样,以及一些进程信息。
如果Nginx已停止,您会看到inactive (dead)
如果启动失败,您会看到红色的failed,并附带一些错误日志,这是排查问题的关键线索。

4. 停止Nginx服务:

当需要临时关闭网站或进行维护时,可以停止Nginx。

bash
sudo systemctl stop nginx

5. 重启Nginx服务:

当您修改了Nginx的配置文件,或者感觉Nginx运行异常时,可以重启服务。重启会先停止再启动,期间服务会短暂中断。

bash
sudo systemctl restart nginx

6. 重新加载配置(优雅重启):

这是Nginx的一个王牌功能!当您只修改了配置文件(例如,添加了一个新的网站配置),而不想中断当前用户的访问时,应该使用reload。它会在不停止主进程的情况下,平滑地加载新配置,并启动新的工作进程来处理新请求,旧的请求则由旧的工作进程处理完毕后正常退出。

bash
sudo systemctl reload nginx

强烈建议:在修改配置文件后,优先使用reload而不是restart

管理命令小结:
* start: 启动
* stop: 停止
* restart: 重启(服务中断)
* reload: 重新加载配置(服务不中断)
* status: 查看状态
* enable: 设置开-机自启
* disable: 取消开机自启

第五章:打通壁垒——配置防火墙

这是新手最容易卡住的一步!很多用户安装并启动了Nginx,却发现用浏览器怎么也打不开网页,以为是Nginx没装好。十有八九,是服务器的防火墙拦截了访问。

服务器默认会开启防火墙,只允许少数几个端口(如SSH的22端口)的流量进入,以保障安全。我们需要手动为Nginx使用的HTTP(80端口)和HTTPS(443端口)“放行”。

5.1 在 Ubuntu / Debian 上配置 UFW 防火墙

Ubuntu默认使用ufw(Uncomplicated Firewall)作为防火墙管理工具。

1. 查看UFW状态:

bash
sudo ufw status

如果显示Status: inactive,表示防火墙未开启,您可以跳过此节,或者执行sudo ufw enable来开启它以增强安全性。如果显示Status: active,则需要进行配置。

2. 查看可用的应用配置:

ufw很智能,在安装Nginx时,Nginx会向ufw注册几个预设的配置方案。

bash
sudo ufw app list

您会看到类似下面的输出:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

* Nginx HTTP: 只开放80端口(标准HTTP)。
* Nginx HTTPS: 只开放443端口(加密HTTPS)。
* Nginx Full: 同时开放80和443端口。

3. 允许HTTP流量:

我们先开放HTTP端口。

bash
sudo ufw allow 'Nginx HTTP'

4. 验证规则:

再次查看ufw状态,确认规则已添加。

bash
sudo ufw status

您应该能看到80/tcp ALLOW Anywhere这样的规则。

5.2 在 CentOS / RHEL 上配置 firewalld 防火墙

CentOS/RHEL默认使用firewalld服务。

1. 查看firewalld状态:

bash
sudo systemctl status firewalld

确保它是active (running)状态。

2. 添加入站规则:

我们需要为public区域永久添加http服务。

bash
sudo firewall-cmd --permanent --zone=public --add-service=http

* --permanent: 表示这个规则是永久性的,重启服务器后依然生效。
* --zone=public: 指定作用的区域,public是默认区域。
* --add-service=http: 添加预定义的http服务(即80端口)。

您也可以同样的方式添加https服务:sudo firewall-cmd --permanent --zone=public --add-service=https

3. 重新加载防火墙使其生效:

添加了永久规则后,需要重新加载firewalld来应用更改。

bash
sudo firewall-cmd --reload

4. 验证规则:

bash
sudo firewall-cmd --list-all

services:列表中,您应该能看到http

第六章:见证奇迹的时刻——验证Nginx运行

万事俱备,只欠东风。现在,让我们来验证Nginx是否已经成功运行并能从外部访问。

1. 获取服务器的公网IP地址:

您可以在您的云服务商控制台找到您服务器的公网IP。或者在服务器命令行中尝试以下命令:

“`bash
curl ifconfig.me

或者

ip addr show
``ip addr show命令会显示所有网络接口信息,找到看起来像公网IP的那一个(通常在eth0ens`开头的网卡下)。

2. 使用浏览器访问:

打开您电脑上的任意网页浏览器(Chrome, Firefox, Edge等),在地址栏输入:

http://你的服务器公网IP地址
例如:http://123.45.67.89

按下回车。如果一切顺利,您将会看到一个非常经典的页面,上面写着:

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

看到这个页面,请给自己一点掌声!您已经成功地在Linux服务器上部署并运行了您的第一个Web服务器!

第七章:初探宝库——Nginx的重要文件和目录

要真正用好Nginx,我们需要了解它的配置文件和关键目录都藏在哪里。

  • 主配置文件:

    • Ubuntu/Debian: /etc/nginx/nginx.conf
    • CentOS/RHEL: /etc/nginx/nginx.conf
      这是Nginx的全局配置文件,定义了核心的运行参数,如工作进程数、日志路径等。
  • 网站配置文件目录:

    • Ubuntu/Debian: 采用sites-availablesites-enabled的分离模式。
      • /etc/nginx/sites-available/: 存放所有网站的配置文件(每个文件代表一个网站)。
      • /etc/nginx/sites-enabled/: 存放一个符号链接(shortcut),链接到sites-available中你想要启用的那个网站的配置文件。默认只有一个default链接。
      • 这种设计的好处是: 你可以为一个网站写好配置放在sites-available里,但暂时不启用它。想启用时,创建一个符号链接到sites-enabled即可,非常灵活。
    • CentOS/RHEL: 采用更简单的conf.d目录模式。
      • /etc/nginx/conf.d/: 所有以.conf结尾的配置文件都会被主配置文件nginx.conf自动加载。你只需在这里为每个网站创建一个.conf文件即可。
  • 默认网站根目录(存放网页文件的地方):

    • Ubuntu/Debian: /var/www/html
    • CentOS/RHEL: /usr/share/nginx/html
      您刚才看到的“Welcome to nginx!”页面的index.html文件就在这个目录里。
  • 日志文件目录:

    • /var/log/nginx/
      • access.log: 访问日志。记录了每一个访问请求的详细信息,如访客IP、时间、请求的URL、状态码等。
      • error.log: 错误日志。记录Nginx运行过程中遇到的所有错误信息,是排查问题的首选之地。

第八章:未雨绸缪——常见问题与排错(FAQ)

  1. 浏览器访问超时或无法连接?

    • 90%的可能: 防火墙没配置对。请仔细检查第五章的防火墙配置步骤。
    • 9%的可能: Nginx服务没有运行。执行sudo systemctl status nginx,查看服务状态是否为active (running)。如果不是,尝试用sudo systemctl start nginx启动,并再次查看状态,留意是否有错误提示。
    • 1%的可能: 云服务商的安全组策略拦截了80端口。请登录您的云服务商控制台,检查服务器实例关联的安全组规则,确保入站方向对80端口是允许的。
  2. 修改了配置文件,重启/重载Nginx失败了?

    • 这通常是配置文件存在语法错误。Nginx提供了一个非常有用的命令来检查配置文件的语法:
      bash
      sudo nginx -t
    • 如果语法正确,它会提示syntax is oktest is successful
    • 如果语法有误,它会明确指出哪个文件的第几行出了问题,根据提示去修改即可。养成修改配置后先nginx -treload的好习惯!
  3. 启动Nginx时提示“Address already in use”或端口80被占用?

    • 这说明服务器上已经有其他程序(最常见的是Apache服务器httpd)占用了80端口。
    • 使用以下命令查找占用80端口的程序:
      bash
      sudo lsof -i :80
      # 或者
      sudo netstat -tulpn | grep :80
    • 找到占用程序后,您可以选择停止或卸载它(如果你不需要它),或者修改Nginx的配置文件,让Nginx监听一个不同的端口。

总结:你的旅程才刚刚开始

恭喜你!通过这篇详尽的教程,您不仅成功地在Linux系统上安装并启动了Nginx,还学会了如何管理其服务、配置防火墙,并了解了其核心文件结构和基本的排错方法。您已经从一个Nginx的门外汉,迈出了一大步,拥有了一台可以对外提供服务的Web服务器。

这只是一个起点。Nginx的强大之处远不止于此。接下来,您可以继续探索:
* 配置Server Blocks(虚拟主机): 在一台服务器上托管多个不同的域名网站。
* 设置反向代理: 将Nginx作为前端,代理后端的Node.js、Java、Python等应用服务器。
* 实现负载均衡: 将流量分发到多台后端服务器,提高网站的可用性和性能。
* 配置SSL/TLS证书: 使用Let’s Encrypt等免费证书,为您的网站启用HTTPS加密。

希望这篇保姆级的教程能为您打开一扇通往服务器世界的大门。记住,每一次在命令行中敲下的字符,都是您技术成长之路上的坚实足迹。祝您探索愉快!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部