Nginx(二)3种安装方式+目录解析+命令实战

在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-availablesites-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 命令使用注意事项

  1. 权限问题:若Nginx运行用户为nginx,修改配置/静态资源时需确保nginx用户有读写权限(如chown -R nginx:nginx /usr/share/nginx/html);
  2. Docker命令差异:容器内的Nginx命令需通过docker exec执行,如docker exec nginx-prod nginx -t
  3. 重载失败处理:若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,即可看到自定义静态页面。

总结:安装与配置的核心要点

  1. 安装选择:快速部署用包管理,自定义模块用源码,环境隔离用Docker;
  2. 目录理解:配置在/etc/nginx,资源在/usr/share/nginx/html,日志在/var/log/nginx,避免配置混乱;
  3. 命令习惯:修改配置后先nginx -t检查,再nginx -s reload重载,禁止直接重启;
  4. 权限安全:避免用root运行Nginx,静态资源/配置文件权限设为nginx:nginx

掌握以上内容,即可完成Nginx的基础部署与静态网站搭建,后续可进一步学习反向代理、负载均衡、HTTPS配置等进阶内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑客思维者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值