在Web服务与反向代理领域,Nginx凭借高并发、轻量级的特性成为行业标配。无论是搭建静态网站、实现负载均衡,还是作为API网关,「正确安装」与「理解基础配置」都是入门的第一步。本文将从3种主流安装方式(源码编译/包管理/Docker)、核心目录结构解析、常用命令实战三个维度,带初学者快速掌握Nginx的基础操作,所有步骤均经过Linux环境验证,可直接落地实践。
一、Nginx 安装方式:3种方案对比与实战
Nginx的安装方式需根据场景选择:包管理工具(yum/apt)适合快速部署,源码编译适合自定义模块,Docker容器适合环境隔离。以下分别详解操作步骤与注意事项。
1.1 包管理工具安装(yum/apt):快速部署首选
包管理工具(CentOS的yum、Ubuntu的apt)是最便捷的安装方式,适合对模块无特殊需求的场景,自动解决依赖关系,一键完成安装。
1.1.1 CentOS/RHEL 系统(yum 安装)
步骤1:安装依赖与Nginx仓库
默认CentOS官方仓库的Nginx版本较旧,建议添加Nginx官方yum仓库以获取最新稳定版:
# 1. 安装依赖(curl用于下载仓库配置,policycoreutils用于SELinux管理)
yum install -y curl policycoreutils openssh-server
# 2. 添加Nginx官方yum仓库(CentOS 7为例,其他版本需替换链接)
curl -o /etc/yum.repos.d/nginx.repo https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 3. 验证仓库是否添加成功
yum repolist | grep nginx # 输出包含"nginx"即成功
步骤2:安装并启动Nginx
# 1. 安装Nginx(自动解决依赖)
yum install -y nginx
# 2. 启动Nginx并设置开机自启
systemctl start nginx # 启动服务
systemctl enable nginx # 开机自启
systemctl status nginx # 查看状态(显示"active (running)"即成功)
步骤3:验证安装
打开浏览器访问服务器IP(如 http://192.168.1.100
),或在服务器本地执行:
curl http://localhost # 输出Nginx默认欢迎页面HTML代码即成功
1.1.2 Ubuntu/Debian 系统(apt 安装)
步骤1:更新仓库并安装
# 1. 更新apt仓库索引
apt update
# 2. 安装Nginx(自动解决依赖)
apt install -y nginx
# 3. 启动并设置开机自启
systemctl start nginx
systemctl enable nginx
systemctl status nginx
步骤2:验证安装
同CentOS,访问IP或执行curl http://localhost
,看到默认欢迎页面即为成功。
1.1.3 包管理安装的优势与局限
- 优势:操作简单(5分钟完成)、自动解决依赖、便于版本更新(
yum update nginx
/apt upgrade nginx
); - 局限:无法自定义编译模块(如第三方WAF模块),版本受仓库限制(如需最新版需手动添加官方仓库)。
1.2 源码编译安装:自定义模块必备
当需要添加第三方模块(如ngx_brotli压缩模块、ngx_waf安全模块)时,必须通过源码编译安装。该方式灵活度最高,但需手动处理依赖。
1.2.1 环境准备(依赖安装)
Nginx依赖gcc
编译环境、pcre
正则库、zlib
压缩库、openssl
加密库(支持HTTPS),需先安装:
# CentOS/RHEL 系统
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
# Ubuntu/Debian 系统
apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
1.2.2 下载源码并编译(以Nginx 1.24.0为例)
步骤1:下载源码包
从Nginx官方网站获取最新稳定版源码,或用wget
直接下载:
# 1. 创建源码目录并进入
mkdir -p /usr/local/src/nginx
cd /usr/local/src/nginx
# 2. 下载Nginx 1.24.0源码(稳定版,可替换为最新版链接)
wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 3. 解压源码包
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
步骤2:配置编译参数(核心:添加自定义模块)
通过./configure
命令指定安装路径、启用模块,以下示例添加「SSL模块」(支持HTTPS)和「gzip压缩模块」:
./configure \
--prefix=/usr/local/nginx # 安装目录(核心,后续配置/命令均基于此路径)
--user=nginx # 运行Nginx的用户(避免root权限风险)
--group=nginx # 运行Nginx的用户组
--with-http_ssl_module # 启用SSL模块(支持HTTPS)
--with-http_gzip_module # 启用gzip压缩模块
--with-http_stub_status_module # 启用状态监控模块(查看连接数、请求量)
关键说明:
- 如需添加第三方模块(如ngx_brotli),需先下载模块源码,再通过
--add-module=/path/to/module
添加; - 执行
./configure
后若报错,通常是缺少依赖,根据错误提示安装对应包即可(如缺少pcre-devel
会提示the HTTP rewrite module requires the PCRE library
)。
步骤3:编译与安装
# 1. 编译(-j4 表示用4核CPU并行编译,加快速度)
make -j4
# 2. 安装(将编译后的文件复制到--prefix指定的目录)
make install
步骤4:创建用户与启动脚本
源码安装不会自动创建用户和系统服务,需手动配置:
# 1. 创建nginx用户(避免用root运行)
useradd -M -s /sbin/nologin nginx # -M不创建家目录,-s禁止登录
# 2. 验证安装(查看Nginx版本)
/usr/local/nginx/sbin/nginx -v # 输出"nginx version: nginx/1.24.0"即成功
# 3. 启动Nginx
/usr/local/nginx/sbin/nginx
# 4. 配置系统服务(便于用systemctl管理)
cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=Nginx Web Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
User=nginx
Group=nginx
[Install]
WantedBy=multi-user.target
EOF
# 5. 重新加载systemd配置并设置开机自启
systemctl daemon-reload
systemctl enable nginx
1.2.3 源码安装的优势与注意事项
- 优势:可自定义模块、安装路径灵活、版本自主选择;
- 注意事项:升级需重新编译(无法用yum/apt更新),需手动维护依赖,适合有一定Linux基础的用户。
1.3 Docker容器安装:环境隔离与快速部署
Docker容器可避免环境依赖冲突,适合开发测试或微服务场景,一键启动Nginx,无需关注底层系统配置。
1.3.1 前提:安装Docker
若未安装Docker,先执行以下命令(适用于CentOS/Ubuntu):
# 1. 安装Docker依赖
yum install -y yum-utils device-mapper-persistent-data lvm2 # CentOS
# apt install -y apt-transport-https ca-certificates curl software-properties-common # Ubuntu
# 2. 添加Docker官方仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # CentOS
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - # Ubuntu
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # Ubuntu
# 3. 安装Docker并启动
yum install -y docker-ce # CentOS
# apt update && apt install -y docker-ce # Ubuntu
systemctl start docker
systemctl enable docker
1.3.2 启动Nginx容器
基础启动(临时测试):
# 启动Nginx容器,映射80端口(宿主机80端口→容器80端口)
docker run --name nginx-test -p 80:80 -d nginx:1.24.0
--name nginx-test
:容器名称;-p 80:80
:端口映射(宿主机端口:容器端口);-d
:后台运行;nginx:1.24.0
:指定Nginx版本(避免使用latest,防止版本变更)。
持久化配置与数据(生产环境):
容器默认的配置、静态资源、日志在容器内部,删除容器会丢失,需挂载宿主机目录:
# 1. 在宿主机创建目录(用于挂载)
mkdir -p /data/nginx/{conf,html,logs}
# 2. 复制容器内默认配置到宿主机(便于修改)
docker cp nginx-test:/etc/nginx/nginx.conf /data/nginx/conf/
docker cp nginx-test:/etc/nginx/conf.d /data/nginx/conf/
docker cp nginx-test:/usr/share/nginx/html /data/nginx/
# 3. 停止并删除临时容器
docker stop nginx-test
docker rm nginx-test
# 4. 启动生产环境容器(挂载配置、静态资源、日志)
docker run --name nginx-prod \
-p 80:80 \
-v /data/nginx/conf:/etc/nginx \ # 挂载配置目录
-v /data/nginx/html:/usr/share/nginx/html # 挂载静态资源
-v /data/nginx/logs:/var/log/nginx # 挂载日志目录
--restart=always \ # 容器异常时自动重启
-d nginx:1.24.0
验证容器运行:
docker ps | grep nginx-prod # 查看容器是否运行
curl http://localhost # 验证Nginx服务
1.3.3 Docker安装的优势与局限
- 优势:环境隔离(不影响宿主机)、启动快速(10秒内)、版本切换方便(换镜像标签即可);
- 局限:配置需通过挂载目录修改,性能略低于宿主机直接安装(容器网络开销)。
二、Nginx 核心目录结构解析
无论哪种安装方式,Nginx的目录结构都遵循「配置-资源-日志」的分离原则,理解目录作用是后续配置的基础。以下以包管理安装(默认路径)和源码安装(--prefix=/usr/local/nginx
)为例对比说明。
2.1 核心目录:3大核心路径
目录用途 | 包管理安装路径(yum/apt) | 源码安装路径(–prefix=/usr/local/nginx) | 核心作用 |
---|---|---|---|
配置目录 | /etc/nginx | /usr/local/nginx/conf | 存放Nginx所有配置文件(主配置、虚拟主机、模块配置) |
静态资源目录 | /usr/share/nginx/html | /usr/local/nginx/html | 存放静态文件(HTML、CSS、JS、图片等),默认欢迎页面就在此目录 |
日志目录 | /var/log/nginx | /usr/local/nginx/logs | 存放访问日志(access.log)、错误日志(error.log),用于问题排查与监控 |
执行文件目录 | /usr/sbin/nginx | /usr/local/nginx/sbin | 存放Nginx可执行文件(启动/停止命令) |
2.1.1 配置目录(/etc/nginx 详解)
配置目录是Nginx的「大脑」,核心文件与子目录如下:
/etc/nginx/
├── nginx.conf # 主配置文件(全局配置,如进程数、连接数)
├── conf.d/ # 虚拟主机配置目录(默认存放default.conf)
│ └── default.conf # 默认虚拟主机配置(监听80端口,指向/usr/share/nginx/html)
├── sites-available/ # (Debian/Ubuntu特有)存放所有虚拟主机配置(仅定义,不启用)
├── sites-enabled/ # (Debian/Ubuntu特有)启用的虚拟主机(通过软链接指向sites-available)
├── modules/ # 动态模块目录(Nginx 1.9+支持动态加载模块)
└── ssl/ # (自定义)通常用于存放SSL证书(HTTPS配置时)
关键说明:
- CentOS默认没有
sites-available
和sites-enabled
,需手动创建并在nginx.conf
中通过include /etc/nginx/sites-enabled/*;
启用; conf.d/
与sites-enabled/
功能类似,均用于拆分虚拟主机配置,避免主配置文件过大。
2.1.2 静态资源目录(/usr/share/nginx/html)
默认存放静态文件,初始目录结构:
/usr/share/nginx/html/
├── index.html # 默认欢迎页面(访问IP时显示)
├── 50x.html # 错误页面(如502、504时显示)
└── static/ # (自定义)通常用于存放CSS、JS、图片等静态资源
实战示例:替换默认页面为自定义HTML
# 创建自定义页面
echo "<h1>My First Nginx Page</h1>" > /usr/share/nginx/html/index.html
# 访问IP即可看到自定义页面
2.1.3 日志目录(/var/log/nginx)
核心日志文件:
access.log
:访问日志,记录所有客户端请求(IP、时间、请求路径、状态码等);error.log
:错误日志,记录Nginx运行错误(如配置错误、后端服务连接失败)。
日志示例(access.log):
192.168.1.101 - - [15/Oct/2024:10:30:00 +0800] "GET /index.html HTTP/1.1" 200 25 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/118.0.0.0"
192.168.1.101
:客户端IP;[15/Oct/2024:10:30:00 +0800]
:请求时间;GET /index.html HTTP/1.1
:请求方法、路径、协议;200
:HTTP状态码(200表示成功);25
:响应字节数;- 最后部分:客户端浏览器信息。
2.2 关键文件:nginx.conf 主配置解析
nginx.conf
是Nginx的全局配置文件,决定服务器的核心运行参数,以下是包管理安装的默认配置(精简版)及关键参数说明:
# 1. 全局块:配置影响Nginx全局的参数
user nginx; # 运行Nginx的用户(避免root)
worker_processes auto; # 工作进程数(auto表示等于CPU核心数,充分利用多核)
error_log /var/log/nginx/error.log warn; # 错误日志路径与级别(warn/error/info/debug)
pid /var/run/nginx.pid; # Nginx进程PID文件路径
# 2. 事件块:配置网络连接相关参数
events {
worker_connections 1024; # 单工作进程最大连接数(默认1024,高并发场景可调至10000+)
use epoll; # 启用epoll事件模型(Linux下高性能模型,默认自动选择)
}
# 3. HTTP块:配置HTTP协议相关参数(核心,包含虚拟主机、缓存、压缩等)
http {
include /etc/nginx/mime.types; # 引入MIME类型映射(如.html→text/html)
default_type application/octet-stream; # 默认MIME类型(未知文件类型时)
# 日志格式定义(name为main,可在虚拟主机中引用)
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; # 访问日志路径,使用main格式
sendfile on; # 启用sendfile系统调用(减少用户态与内核态数据拷贝,提升性能)
# tcp_nopush on; # 配合sendfile使用,发送大文件时合并数据包,减少网络包数量
# tcp_nodelay on; # 小数据包时禁用Nagle算法,降低延迟(如实时通信场景)
keepalive_timeout 65; # 长连接超时时间(客户端65秒内无请求则断开连接)
# gzip on; # 启用gzip压缩(压缩HTML/CSS/JS,减少传输带宽)
include /etc/nginx/conf.d/*.conf; # 引入虚拟主机配置(conf.d目录下所有.conf文件)
# include /etc/nginx/sites-enabled/*; # (Debian/Ubuntu)引入启用的虚拟主机
}
核心参数说明:
worker_processes
:工作进程数建议设为CPU核心数(如4核设为4),避免进程切换开销;worker_connections
:单进程最大连接数,需结合系统文件描述符限制(ulimit -n
)调整,若ulimit -n 65535
,则worker_connections
可设为10000+;keepalive_timeout
:长连接超时时间,静态资源服务可设为60-120秒,API服务可设为10-30秒(减少空闲连接占用)。
三、Nginx 基础命令:启动/停止/重载/检查
Nginx的命令通过nginx
可执行文件触发,不同安装方式的命令路径略有差异(包管理:/usr/sbin/nginx
;源码:/usr/local/nginx/sbin/nginx
;Docker:docker exec 容器名 nginx
),以下以包管理安装为例详解。
3.1 基础命令格式
nginx [选项]
常用选项:
-s
:发送信号给Nginx进程(start/stop/reload/quit/test);-v
:查看Nginx版本;-V
:查看Nginx版本及编译参数(含启用的模块);-t
:检查配置文件语法是否正确;-T
:检查配置文件并打印完整配置(便于排查引入的子配置)。
3.2 常用命令实战
3.2.1 启动与停止
# 1. 启动Nginx(首次启动)
nginx # 包管理安装
# /usr/local/nginx/sbin/nginx # 源码安装
# docker start nginx-prod # Docker容器
# 2. 快速停止(强制终止进程,可能丢失未处理请求)
nginx -s stop
# 3. 优雅停止(等待所有请求处理完成后停止,推荐生产环境)
nginx -s quit
# docker stop nginx-prod # Docker容器(默认优雅停止)
3.2.2 配置重载与检查
配置重载:修改配置文件后,无需重启Nginx,执行重载命令即可生效(优雅重载,不中断服务):
nginx -s reload # 包管理安装
# /usr/local/nginx/sbin/nginx -s reload # 源码安装
# docker exec nginx-prod nginx -s reload # Docker容器
配置检查:修改配置后必须先检查语法,避免因配置错误导致Nginx无法启动或重载:
# 1. 检查配置语法(仅提示错误,不打印配置)
nginx -t
# 输出示例(成功):
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful
# 2. 检查配置并打印完整配置(含引入的子配置,便于排查)
nginx -T
3.2.3 查看版本与编译参数
# 1. 查看Nginx版本
nginx -v
# 输出:nginx version: nginx/1.24.0
# 2. 查看版本及编译参数(含启用的模块)
nginx -V
# 输出示例(含SSL、gzip模块):
# nginx version: nginx/1.24.0
# built with OpenSSL 1.1.1k 25 Mar 2021
# configure arguments: --prefix=/etc/nginx --with-http_ssl_module --with-http_gzip_module
3.3 命令使用注意事项
- 权限问题:若Nginx运行用户为
nginx
,修改配置/静态资源时需确保nginx
用户有读写权限(如chown -R nginx:nginx /usr/share/nginx/html
); - Docker命令差异:容器内的Nginx命令需通过
docker exec
执行,如docker exec nginx-prod nginx -t
; - 重载失败处理:若
nginx -s reload
失败,先执行nginx -t
检查配置错误,修复后再重载,避免强行重启导致服务中断。
四、实战:搭建第一个静态网站
结合以上安装与配置知识,实战搭建一个静态网站(以包管理安装为例):
步骤1:准备静态资源
# 1. 创建网站目录(按域名区分,便于管理)
mkdir -p /usr/share/nginx/my-site
# 2. 创建首页HTML
cat > /usr/share/nginx/my-site/index.html << EOF
<!DOCTYPE html>
<html>
<head>
<title>My Nginx Site</title>
<style>
h1 { color: #2c3e50; text-align: center; margin-top: 50px; }
</style>
</head>
<body>
<h1>Hello, Nginx! This is My First Static Site.</h1>
</body>
</html>
EOF
# 3. 设置权限
chown -R nginx:nginx /usr/share/nginx/my-site
步骤2:创建虚拟主机配置
# 创建虚拟主机配置文件(在conf.d目录下)
cat > /etc/nginx/conf.d/my-site.conf << EOF
server {
listen 80; # 监听80端口
server_name my-site.local; # 网站域名(本地测试可修改/etc/hosts映射)
# 静态资源配置
root /usr/share/nginx/my-site; # 网站根目录
index index.html; # 默认首页
# 访问日志配置(单独记录该网站日志)
access_log /var/log/nginx/my-site-access.log main;
error_log /var/log/nginx/my-site-error.log warn;
# 处理404错误(找不到页面时返回自定义页面)
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/my-site;
}
}
EOF
步骤3:检查配置并重载
# 1. 检查配置语法
nginx -t
# 2. 重载配置(使新虚拟主机生效)
nginx -s reload
步骤4:测试访问
- 本地测试:执行
curl http://my-site.local
(需先在/etc/hosts
添加127.0.0.1 my-site.local
); - 外部访问:在客户端
hosts
添加服务器IP与my-site.local
的映射,打开浏览器访问http://my-site.local
,即可看到自定义静态页面。
总结:安装与配置的核心要点
- 安装选择:快速部署用包管理,自定义模块用源码,环境隔离用Docker;
- 目录理解:配置在
/etc/nginx
,资源在/usr/share/nginx/html
,日志在/var/log/nginx
,避免配置混乱; - 命令习惯:修改配置后先
nginx -t
检查,再nginx -s reload
重载,禁止直接重启; - 权限安全:避免用root运行Nginx,静态资源/配置文件权限设为
nginx:nginx
。
掌握以上内容,即可完成Nginx的基础部署与静态网站搭建,后续可进一步学习反向代理、负载均衡、HTTPS配置等进阶内容。