Nginx 安装
正式学配置之前,得先在自己的机器上把 Nginx 跑起来。Nginx 的安装非常简单——Linux/Mac 上一个包管理器命令,Windows 上一个 zip 包,最方便的是用 Docker。这一章我们逐一过一遍,并讲清装完后的目录结构和启停命令,为后续章节打基础。
1. Linux 上安装(最常见)
Ubuntu / Debian 系
# Ubuntu / Debian 系
sudo apt update
sudo apt install -y nginx
# 安装完成后,systemd 会自动启用 nginx 服务
sudo systemctl status nginx
# 看到 "active (running)" 即表示已启动
# 设置开机自启
sudo systemctl enable nginxCentOS / RHEL / Rocky Linux
# CentOS 7 / RHEL / Rocky Linux
# 先装 EPEL 仓库(CentOS 8+ / Stream 自带)
sudo yum install -y epel-release
sudo yum install -y nginx
# 启动 + 开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# CentOS 默认 firewalld 会拦截 80 端口,需放行
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload注意:CentOS 默认仓库的 Nginx 版本可能偏旧,要装新版本可以用官方仓库:
# 想装新版本的 Nginx,先加官方仓库(CentOS 8+)
sudo rpm -Uvh https://nginx.org/packages/centos/8/noarch/RPMS/nginx-release-centos-8-0.el8.ngx.noarch.rpm
# 然后再 yum install,就能装到比仓库默认更新的版本
sudo yum install -y nginx2. Mac 上安装
Mac 推荐 Homebrew,一条命令搞定:
# Mac 推荐 Homebrew
brew install nginx
# 启动(brew services 会自动设为开机启动)
brew services start nginx
# 测试配置 + 手动启动(前台运行,方便看日志)
nginx -t
nginx -g 'daemon off;'
# Mac 上 brew 安装的 Nginx 目录与 Linux 略有不同:
# 配置文件: /opt/homebrew/etc/nginx/nginx.conf (Apple Silicon)
# /usr/local/etc/nginx/nginx.conf (Intel Mac)
# 默认根目录: /opt/homebrew/var/www/
# 日志目录: /opt/homebrew/var/log/nginx/Mac 上 brew 装的 Nginx 路径与 Linux 略有不同(详见上面注释),开发够用,但生产环境不要用 Mac 做服务器。
3. Windows 上安装(不推荐生产)
Windows 版 Nginx 适合本地开发测试,不适合生产——Windows 上 Nginx 用 select 模型,性能远不如 Linux 的 epoll。安装方式:
- 到 nginx.org 下载 Mainline version 的 zip 包;
- 解压到
C:\\nginx; - 在 PowerShell 里执行
./nginx.exe启动; - 停止用
./nginx.exe -s quit。
4. Docker 安装(推荐新手和本地实验)
如果你不想搞乱系统,Docker 是最干净的方式——一行命令拉起一个完整 Nginx,删掉容器什么都不剩:
# 最快上手方式:Docker 一行命令起一个 Nginx
docker run -d --name my-nginx \
-p 80:80 \
-v $(pwd)/html:/usr/share/nginx/html:ro \
nginx:stable
# 参数解释:
# -d 后台运行
# --name 容器命名
# -p 80:80 把容器 80 端口映射到宿主机 80 端口
# -v ...:ro 把当前目录的 html/ 挂载到容器内默认网站根目录(只读)
# 进入容器看配置
docker exec -it my-nginx cat /etc/nginx/nginx.conf
# 重载配置(容器内)
docker exec my-nginx nginx -s reload5. 验证安装是否成功
装完后用下面这套命令自测,这些命令以后会天天用:
# 1. 查看版本(确认装好了)
nginx -v
# 输出示例: nginx version: nginx/1.24.0
# 2. 编译选项(看支持哪些模块)
nginx -V
# 输出会包含 configure arguments,能看到 --with-http_ssl_module 等
# 3. 测试配置文件语法(修改配置后必做!)
sudo nginx -t
# 输出: nginx: configuration file /etc/nginx/nginx.conf test is successful
# 4. 用 curl 验证页面
curl -I http://localhost
# HTTP/1.1 200 OK
# Server: nginx/1.24.0
# ...浏览器访问 http://localhost/,看到 "Welcome to nginx!" 欢迎页就大功告成了。
6. 目录结构(重要!必背)
Ubuntu/Debian 装的 Nginx 默认目录如下(CentOS 几乎一致,只是 www-data 用户换成 nginx):
/etc/nginx/nginx.conf— 主配置文件,所有故事的起点。/etc/nginx/conf.d/— 站点配置目录,里面每个.conf文件就是一个站点(推荐在这里加自己的配置)。/etc/nginx/sites-available/&sites-enabled/— Debian 系特有的"可用 / 已启用"两层目录,用 symlink 管理。/var/www/html/— 默认网站根目录(CentOS 是/usr/share/nginx/html/)。/var/log/nginx/access.log— 访问日志。/var/log/nginx/error.log— 错误日志。/usr/sbin/nginx— 可执行文件本体。/etc/nginx/mime.types— 文件扩展名到 Content-Type 的映射表。
记忆口诀:etc 配置、www 网页、log 日志、sbin 程序。
7. 启动、停止、重载
Nginx 的启停有两种方式——systemctl(推荐)和 nginx 命令的信号控制。两者效果等价:
# Ubuntu/CentOS 通用(systemd)
sudo systemctl start nginx # 启动
sudo systemctl stop nginx # 停止
sudo systemctl restart nginx # 重启(会断开现有连接,慎用)
sudo systemctl reload nginx # 平滑重载配置(推荐!零停机)
sudo systemctl status nginx # 查看状态
# 直接用 nginx 命令(信号控制)
sudo nginx # 启动
sudo nginx -s stop # 快速停止
sudo nginx -s quit # 优雅停止(等当前请求处理完)
sudo nginx -s reload # 重载配置
sudo nginx -s reopen # 重新打开日志文件(日志切割用)几个关键区别:
- restart vs reload:restart 会断开所有现有连接,慎用!reload 是平滑重载,master 会重新读配置、fork 新 worker,老 worker 处理完当前请求再退出——零停机部署就靠 reload。
- stop vs quit:stop 立即断开;quit 优雅退出,等请求处理完。
- 修改配置后必做两步:先
nginx -t测试语法,再nginx -s reload生效。
8. 第一个静态网站
来动手做一个小实验:建一个目录、扔个 HTML、改个配置,让 Nginx 把它发布出去。
- 创建网站目录:
sudo mkdir -p /var/www/mysite - 写一个简单的 HTML:
echo '<h1>Hello Nginx</h1>' | sudo tee /var/www/mysite/index.html - 新建配置文件
/etc/nginx/conf.d/mysite.conf,内容下一篇会讲,这里先用最简单的。 - 测试:
sudo nginx -t - 重载:
sudo nginx -s reload - 浏览器访问
http://localhost/,看到 "Hello Nginx" 即成功。
这一步走通后,你就拿到了 Nginx 的"入门钥匙"。下一篇我们正式进入配置文件的世界。
← 上一篇 Nginx 简介
下一篇 nginx.conf 结构 →