跳到主要内容
Web 技术与 Nginx 网站环境部署 | 极客日志
Shell / Bash
Web 技术与 Nginx 网站环境部署 综述由AI生成 Web 技术基础包括域名 DNS 解析静态与动态网页以及 HTTP 协议的核心概念。详细讲解了基于 CentOS 系统的 Nginx 编译安装流程涵盖环境初始化依赖包安装用户创建及模块配置。内容包含 Nginx 运行控制主配置文件详解虚拟主机设置访问状态监控以及 Gzip 压缩 IP 限制等实用扩展配置和常见故障排查方法。
芝士奶盖 发布于 2026/3/27 更新于 2026/5/31 30 浏览Web 技术基础与 Nginx 网站环境完整部署教程
1.1 域名与 DNS:网络地址的'翻译系统'
网络中设备通过IP 地址 唯一标识,但纯数字的 IP 难以记忆,因此诞生了域名 ——与 IP 一一对应的字符型地址。
1.1.1 域名的结构与类型
域名采用层级结构,从右到左级别依次降低,核心分为根域 、顶级域 、二级域 和主机名 :
根域:全球仅 13 台根服务器管理,是互联网域名体系的顶层;
顶级域:包括组织域(.com商业、.net网络、.org非盈利)和国家/地区域(.cn中国、.uk英国);
二级域:域名的核心主体,如 baidu、taobao,是企业/个人的网上标识;
主机名:如 www,代表域名下的具体服务器节点。
DNS 规定域名标号仅能由字母、数字和连字符 - 组成,单个标号不超过 63 字符,完整域名不超过 255 字符,且不区分大小写。
1.1.2 DNS 域名解析:从域名到 IP 的转换
DNS(域名系统) 是专门负责域名与 IP 地址转换的系统,解析方式分为两种:
静态映射 :通过本地 Hosts 文件配置域名 -IP 映射,优先级高于 DNS 服务器,适合本地测试;
动态映射 :通过公共 DNS 服务器(如 8.8.8.8、114.114.114.114)完成解析,是互联网的主流方式。
解析流程遵循'先本地后远程':用户访问域名时,系统先检查 Hosts 文件,无映射则向 DNS 服务器发起请求,最终获取 IP 地址实现访问。
1.1.3 Hosts 文件的实用操作
Hosts 文件可手动修改,实现域名本地解析,不同系统存储路径不同:
Windows:C:\Windows\System32\drivers\etc\hosts
CentOS/RHEL:/etc/hosts
实操示例 :在 CentOS 中添加 127.0.0.1 www.test.com,保存后访问 www.test.com 将直接指向本地,无需 DNS 解析,常用于网站本地开发测试。
1.2 静态网页与动态网页:网页的两种核心形态
网页是网站的基本组成单元,由 HTML 编写,根据内容生成方式分为静态网页 和动态网页 ,二者核心区别在于内容是否可动态变化。
1.2.1 静态网页
纯 HTML 格式的网页,后缀为 .htm/.html,内容由固定的 HTML 代码编写,生成后无法主动变化,除非手动修改代码。特点 :加载速度快、服务器压力小、安全性高;缺点是维护成本高,无法实现交互功能(如用户登录、数据查询)。注意 :静态网页可通过 GIF、Flash、滚动字幕实现视觉上的'动态效果',并非真正的动态网页。
1.2.2 动态网页
结合 HTML 与高级编程语言(PHP、Java、Python)、数据库技术的网页,后缀为 .php/.jsp/.asp,URL 中通常带有标志性符号 ?。特点 :内容可随时间、用户操作、数据库数据动态变化,支持交互功能;缺点是对服务器资源要求更高,需配套运行环境。 :
主流动态网页语言
PHP:超文本预处理器,语法简单、跨平台,适合中小型网站开发;
JSP:基于 Java 体系,稳定性强、适合大型企业级应用;
Python:结合 Django/Flask 框架,开发效率高,适合快速迭代的 Web 项目。
1.3 Web1.0 与 Web2.0:互联网的两代发展模式
Web1.0 :早期互联网模式,以门户网站为核心,内容由网站运营商单向提供,用户仅能被动浏览,盈利依靠点击量和增值服务(如新浪、早期搜狐);
Web2.0 :用户主导的互动模式,内容由用户生成,支持分享、社群交流,代表产品有博客、社交平台、短视频网站,核心特征是用户分享、兴趣聚合、开放平台 。
二、HTTP 协议:Web 通信的'通用语言' 超文本传输协议(HTTP)是互联网中应用最广泛的网络协议,所有网页文件都需遵循该标准,负责实现客户端(浏览器)与服务器之间的超文本传输,核心采用请求 - 响应 模型。
2.1 HTTP 协议的版本演进
HTTP/0.9 :已过时,仅支持 GET 方法,无版本号和请求头,无法传递大量信息;
HTTP/1.0 :首个指定版本号的协议,仍被代理服务器广泛使用,每次请求都需建立新连接;
HTTP/1.1 :当前主流版本,支持持久连接 (默认开启),可同时发送多个请求,降低线路负载,大幅提升传输速度。
2.2 核心 HTTP 方法:GET 与 POST HTTP 定义了多种请求方法,其中GET 和POST 是最常用的两种,二者均用于向服务器发起请求,但适用场景和特性差异显著,详细对比如下:
特性 GET 方法 POST 方法 数据传输 数据附在 URL 后,显式传递 数据在请求体中,隐式传递 长度限制 受 URL 长度限制(通常 2048 字符) 无长度限制 缓存 可被浏览器缓存,适合重复访问 不可缓存 安全性 安全性低,参数暴露在 URL 中 安全性高,参数不记录在日志/历史中 书签/刷新 可收藏为书签,刷新无副作用 不可收藏,刷新会重新提交数据 适用场景 数据查询、获取资源(如浏览网页) 数据提交、传输敏感信息(如登录、注册)
实操建议 :涉及用户密码、表单提交、数据修改的操作,必须使用 POST 方法;仅做资源查询时,使用 GET 方法提升访问效率。
2.3 HTTP 状态码:服务器的'响应提示' HTTP 状态码是 3 位数字代码,用于表示服务器对请求的处理结果,分为五大类,生产环境中最常用的状态码 及含义如下:
2XX(成功) :200 OK——请求成功,服务器正常返回资源;
3XX(重定向) :301 Moved Permanently——请求的资源永久跳转至新地址;
4XX(客户端错误) :403 Forbidden(禁止访问)、404 Not Found(服务器未找到请求资源);
5XX(服务器错误) :500 Internal Server Error(服务器内部错误)、502 Bad Gateway(无效网关)、503 Service Unavailable(服务暂时不可用)、504 Gateway Timeout(网关请求超时)。
实用技巧 :排查网站访问问题时,首先查看 HTTP 状态码,4XX 错误重点检查客户端请求(如 URL 是否正确),5XX 错误重点排查服务器配置和服务状态。
2.4 HTTP 完整请求流程 用户在浏览器输入 URL 到最终看到网页,背后是一次完整的 HTTP 请求 - 响应过程,核心分为客户端发起请求 和服务器返回响应 两个阶段,具体步骤:
客户端输入 URL,浏览器解析域名获取 IP 地址;
客户端向服务器发送HTTP 请求报文 ,包含请求行 (方法、URL、协议版本)、请求头 (附加信息,如 User-Agent、Host)、空行 (请求头结束标识)、请求体 (POST 方法的参数,GET 方法无);
服务器接收并处理请求,执行对应逻辑(如查询数据库、读取网页文件);
服务器向客户端返回HTTP 响应报文 ,包含状态行 (协议版本、状态码、描述)、响应头 (附加信息,如 Content-Type、Server)、空行 (响应头结束标识)、响应体 (HTML 代码、图片等资源);
浏览器解析响应体中的 HTML 代码,渲染并显示网页。
三、Nginx 网站环境部署:从编译安装到配置运行 Nginx 是一款轻量级的 HTTP 服务器/反向代理服务器,由俄罗斯开发者 Igor Sysoev 开发,核心优势是高并发处理能力 (单台物理机可支持 3-5 万并发请求)、低系统资源消耗 、稳定性强 ,广泛应用于企业级 Web 服务、反向代理、负载均衡等场景。
本文以 CentOS 系统为例,讲解 Nginx 的编译安装 (灵活性高,可自定义模块)、配置、运行控制的完整步骤,并补充实用配置。
3.1 编译安装前的准备工作 编译安装 Nginx 前需完成环境初始化,关闭防火墙、禁用 SELinux,安装编译依赖包,创建专用运行用户(提升安全性)。
3.1.1 环境初始化
3.1.2 安装编译依赖包 Nginx 编译需要依赖 pcre(正则支持)、zlib(压缩支持)、gcc(编译工具)、openssl(HTTPS 支持)等库,执行以下命令一键安装:
yum -y install pcre-devel zlib-devel gcc* openssl-devel
3.1.3 创建 Nginx 专用运行用户 为了提升服务器安全性,避免 Nginx 以 root 用户运行,创建无登录权限的专用用户和组:
useradd -M -s /sbin/nologin nginx
3.2 Nginx 编译安装(自定义模块) 编译安装的核心是 ./configure 配置参数,可根据业务需求开启/关闭模块,本文使用Nginx 1.26.3 (稳定版),并开启常用核心模块(含 HTTPS、状态统计、压缩等)。
3.2.1 下载并解压 Nginx 安装包
3.2.2 配置编译参数 执行 ./configure 配置安装路径和模块,完整实用参数 如下(包含文档核心模块 + 实用扩展模块):
./configure \ --prefix=/usr/local/nginx \
注意事项 :若执行 ./configure 时报错,大概率是依赖包未安装完整,根据报错信息补充安装即可(如缺少 pcre-devel 则重新执行 yum install -y pcre-devel)。
3.2.3 编译并安装 配置参数无误后,执行编译和安装命令,耗时根据服务器性能而定:
3.2.4 配置 Nginx 全局命令 将 Nginx 的可执行文件添加到系统全局路径,实现任意目录执行 nginx 命令:
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
3.3 Nginx 运行控制:启动、停止、重载 Nginx 的运行控制有两种方式:原生命令 和系统服务 ,系统服务方式更符合企业级运维习惯,推荐使用。
3.3.1 原生命令(基础操作)
3.3.2 配置系统服务(企业级推荐) 将 Nginx 注册为系统服务,可通过 systemctl 命令实现开机自启、启动、停止、重载,步骤如下:
vim /lib/systemd/system/nginx.service
[Unit] Description =The NGINX HTTP and reverse proxy server After=network.target
重新加载系统服务配置,设置开机自启并启动 Nginx:
实用技巧 :企业运维中,修改 Nginx 配置后,执行 nginx -t 检查语法,再执行 systemctl reload nginx 重载,全程不中断服务。
3.4 Nginx 核心配置文件:nginx.conf Nginx 的主配置文件为 /usr/local/nginx/conf/nginx.conf,采用模块化结构,核心分为全局配置 、I/O 事件配置 、HTTP 配置 三部分,配置文件为纯文本格式,使用 # 注释。
3.4.1 全局配置 vim /usr/local/nginx/conf/nginx.conf
#user nobody; # 运行用户,已通过编译参数指定为 nginx,可注释 worker_processes 1; # 工作进程数量,建议设置为与服务器 CPU 核心数一致(如 4 核设为 4),提升并发处理能力 #error_log logs/error.log; # 错误日志路径,默认开启 #pid logs/nginx.pid; # PID 文件路径,默认开启
优化建议 :worker_processes 是核心优化参数,执行 grep 'processor' /proc/cpuinfo | wc -l 查看 CPU 核心数,将参数值设为核心数或核心数 + 1。
3.4.2 I/O 事件配置 配置 Nginx 的网络 I/O 模型,核心参数:
events {
use epoll; # 使用 epoll 模型(Linux 系统最优 I/O 模型),大幅提升并发连接数
worker_connections 4096; # 每个工作进程的最大连接数,默认 4096,可根据服务器性能调整(如 10240)
}
知识点补充 :epoll 是 Linux 系统的高性能 I/O 多路复用模型,相比 select/poll,支持更多的并发连接,且性能不会随连接数增加而下降,是 Nginx 高并发的核心保障。
3.4.3 HTTP 配置 HTTP 配置是 Nginx 的核心,包含全局 HTTP 配置和server 块(虚拟主机) ,支持配置多个 server 块,实现一台服务器部署多个网站,核心配置及注释:
http {
include mime.types; # 引入 MIME 类型配置,识别不同文件类型(如.html、.jpg)
default_type application/octet-stream; # 默认文件类型,未知类型按二进制流处理
# 日志格式定义,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 logs/access.log main; # 访问日志路径,使用 main 格式
sendfile on; # 开启 sendfile 机制,提升文件传输效率(禁用磁盘缓存,直接内存传输)
#tcp_nopush on; # 开启后提升 TCP 传输效率,建议与 sendfile 配合使用
keepalive_timeout 65; # 持久连接超时时间,默认 65 秒,可根据业务调整(如 30 秒)
#gzip on; # 开启 Gzip 压缩,建议开启,压缩网页资源(HTML、CSS、JS)
# 虚拟主机 server 块,一个 server 块对应一个网站
server {
listen 80; # 监听端口,默认 80(HTTP),HTTPS 需监听 443
server_name www.benet.com; # 域名,可配置多个(如 www.benet.com benet.com)
charset utf-8; # 网页编码,建议设为 utf-8,避免中文乱码
#access_log logs/host.access.log main; # 该虚拟主机的独立访问日志,可开启
# 根路径配置,匹配域名的根请求(如 www.benet.com/)
location / {
root html; # 网站根目录,默认/usr/local/nginx/html
index index.html index.htm; # 默认首页文件,按顺序匹配
}
# 错误页面配置,匹配 500/502/503/504 错误,跳转到 50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html; # 错误页面所在目录
}
}
}
配置 server_name 时,域名需与 DNS 解析或 Hosts 文件映射一致,否则无法访问;
root 指定的是网站根目录的绝对路径 ,默认 html 对应 /usr/local/nginx/html;
中文乱码问题:除了配置 charset utf-8,还需在网页的 HTML 代码中添加 <meta charset="utf-8">。
3.5 Nginx 访问状态统计:监控服务运行状态 通过 http_stub_status_module 模块可开启 Nginx 的访问状态统计,实时监控连接数、请求数等关键指标,是运维监控的必备配置。
3.5.1 开启状态统计配置 在 http 块的 server 块中添加以下配置:
server {
listen 80;
server_name localhost;
# 本地访问,可改为实际域名
charset utf-8;
location / {
root html;
index index.html index.htm;
}
# 配置状态统计路径,访问 http://localhost/status 即可查看
location /status {
stub_status on; # 开启状态统计
access_log off; # 关闭该路径的访问日志,减少日志量
allow 127.0.0.1; # 仅允许本地访问,提升安全性
deny all; # 拒绝其他所有 IP 访问
}
}
3.5.2 验证状态统计 重载 Nginx 配置后,本地访问 http://localhost/status,将看到如下信息:
Active connections: 2
server accepts handled requests
223 223 223
Reading: 0
Writing: 1
Waiting: 1
Active connections:当前活跃连接数;
accepts:服务器累计接受的连接数;
handled:服务器累计处理的连接数(与 accepts 一致,无连接丢失);
requests:服务器累计处理的请求数;
Reading:当前正在读取客户端请求的连接数;
Writing:当前正在向客户端返回响应的连接数;
Waiting:当前处于空闲状态的持久连接数。
四、Nginx 配置优化与常见问题
4.1 常见注意事项
编译报错 :依赖包未安装完整,根据报错信息补充 yum 安装即可;
配置文件语法错误 :修改配置后必执行 nginx -t 检查,语法错误会导致 Nginx 无法启动/重载;
网站无法访问 :检查防火墙/SELinux 是否关闭、Nginx 是否启动、80/443 端口是否监听、server_name 与域名映射是否一致;
中文乱码 :同时配置 Nginx 的 charset utf-8 和网页的 <meta charset="utf-8">;
权限问题 :Nginx 运行用户(nginx)需拥有网站根目录的读权限,否则会报 403 Forbidden 错误,执行 chown -R nginx:nginx /usr/local/nginx/html 即可。
4.2 实用扩展配置
4.2.1 开启 Gzip 压缩,提升网页加载速度 Gzip 可压缩 HTML、CSS、JS、图片等资源,减少传输体积,提升网页加载速度,在 http 块中添加以下配置:
gzip on; # 开启 Gzip
gzip_min_length 1k; # 仅压缩大于 1k 的文件
gzip_comp_level 6; # 压缩级别,1-9,级别越高压缩比越大,消耗 CPU 越多,建议 6
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 需压缩的文件类型
gzip_vary on; # 向客户端返回压缩标识
4.2.2 限制 IP 访问,提升网站安全性 通过 allow 和 deny 指令限制特定 IP/IP 段访问网站,如仅允许公司内网 IP 访问,在 location 块中添加:
location / {
root html;
index index.html index.htm;
allow 192.168.1.0/24; # 允许 192.168.1.0 网段访问
allow 127.0.0.1; # 允许本地访问
deny all; # 拒绝其他所有 IP
}
4.2.3 配置默认首页与 404 错误页面 除了默认的 index.html,可添加自定义首页(如 index.php),同时配置自定义 404 错误页面,提升用户体验:
server {
listen 80;
server_name www.test.com;
charset utf-8;
root html;
index index.php index.html index.htm; # 优先匹配 index.php
# 配置 404 错误页面
error_page 404 /404.html;
location = /404.html {
root html;
expires -1; # 禁止缓存 404 页面
}
}
只需在 /usr/local/nginx/html 目录下创建 404.html 自定义页面即可。
相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online