Web 技术基础与 Nginx 网站环境完整部署教程
1.1 域名与 DNS:网络地址的'翻译系统'
网络中设备通过IP 地址唯一标识,但纯数字的 IP 难以记忆,因此诞生了域名——与 IP 一一对应的字符型地址。
1.1.1 域名的结构与类型
域名采用层级结构,从右到左级别依次降低,核心分为根域、顶级域、二级域和主机名:
- 根域:全球仅 13 台根服务器管理,是互联网域名体系的顶层;
- 顶级域:包括组织域(
.com商业、.net网络、非盈利)和国家/地区域(中国、英国);
Web 技术基础包括域名 DNS 解析静态与动态网页以及 HTTP 协议的核心概念。详细讲解了基于 CentOS 系统的 Nginx 编译安装流程涵盖环境初始化依赖包安装用户创建及模块配置。内容包含 Nginx 运行控制主配置文件详解虚拟主机设置访问状态监控以及 Gzip 压缩 IP 限制等实用扩展配置和常见故障排查方法。
网络中设备通过IP 地址唯一标识,但纯数字的 IP 难以记忆,因此诞生了域名——与 IP 一一对应的字符型地址。
域名采用层级结构,从右到左级别依次降低,核心分为根域、顶级域、二级域和主机名:
.com商业、.net网络、非盈利)和国家/地区域(中国、英国);.org.cn.ukbaidu、taobao,是企业/个人的网上标识;www,代表域名下的具体服务器节点。DNS 规定域名标号仅能由字母、数字和连字符 - 组成,单个标号不超过 63 字符,完整域名不超过 255 字符,且不区分大小写。
DNS(域名系统) 是专门负责域名与 IP 地址转换的系统,解析方式分为两种:
Hosts 文件配置域名 -IP 映射,优先级高于 DNS 服务器,适合本地测试;解析流程遵循'先本地后远程':用户访问域名时,系统先检查 Hosts 文件,无映射则向 DNS 服务器发起请求,最终获取 IP 地址实现访问。
Hosts 文件可手动修改,实现域名本地解析,不同系统存储路径不同:
C:\Windows\System32\drivers\etc\hosts/etc/hosts实操示例:在 CentOS 中添加 127.0.0.1 www.test.com,保存后访问 www.test.com 将直接指向本地,无需 DNS 解析,常用于网站本地开发测试。
网页是网站的基本组成单元,由 HTML 编写,根据内容生成方式分为静态网页和动态网页,二者核心区别在于内容是否可动态变化。
纯 HTML 格式的网页,后缀为 .htm/.html,内容由固定的 HTML 代码编写,生成后无法主动变化,除非手动修改代码。特点:加载速度快、服务器压力小、安全性高;缺点是维护成本高,无法实现交互功能(如用户登录、数据查询)。注意:静态网页可通过 GIF、Flash、滚动字幕实现视觉上的'动态效果',并非真正的动态网页。
结合 HTML 与高级编程语言(PHP、Java、Python)、数据库技术的网页,后缀为 .php/.jsp/.asp,URL 中通常带有标志性符号 ?。特点:内容可随时间、用户操作、数据库数据动态变化,支持交互功能;缺点是对服务器资源要求更高,需配套运行环境。主流动态网页语言:
超文本传输协议(HTTP)是互联网中应用最广泛的网络协议,所有网页文件都需遵循该标准,负责实现客户端(浏览器)与服务器之间的超文本传输,核心采用请求 - 响应模型。
HTTP 定义了多种请求方法,其中GET和POST是最常用的两种,二者均用于向服务器发起请求,但适用场景和特性差异显著,详细对比如下:
| 特性 | GET 方法 | POST 方法 |
|---|---|---|
| 数据传输 | 数据附在 URL 后,显式传递 | 数据在请求体中,隐式传递 |
| 长度限制 | 受 URL 长度限制(通常 2048 字符) | 无长度限制 |
| 缓存 | 可被浏览器缓存,适合重复访问 | 不可缓存 |
| 安全性 | 安全性低,参数暴露在 URL 中 | 安全性高,参数不记录在日志/历史中 |
| 书签/刷新 | 可收藏为书签,刷新无副作用 | 不可收藏,刷新会重新提交数据 |
| 适用场景 | 数据查询、获取资源(如浏览网页) | 数据提交、传输敏感信息(如登录、注册) |
实操建议:涉及用户密码、表单提交、数据修改的操作,必须使用 POST 方法;仅做资源查询时,使用 GET 方法提升访问效率。
HTTP 状态码是 3 位数字代码,用于表示服务器对请求的处理结果,分为五大类,生产环境中最常用的状态码及含义如下:
实用技巧:排查网站访问问题时,首先查看 HTTP 状态码,4XX 错误重点检查客户端请求(如 URL 是否正确),5XX 错误重点排查服务器配置和服务状态。
用户在浏览器输入 URL 到最终看到网页,背后是一次完整的 HTTP 请求 - 响应过程,核心分为客户端发起请求和服务器返回响应两个阶段,具体步骤:
Nginx 是一款轻量级的 HTTP 服务器/反向代理服务器,由俄罗斯开发者 Igor Sysoev 开发,核心优势是高并发处理能力(单台物理机可支持 3-5 万并发请求)、低系统资源消耗、稳定性强,广泛应用于企业级 Web 服务、反向代理、负载均衡等场景。
本文以 CentOS 系统为例,讲解 Nginx 的编译安装(灵活性高,可自定义模块)、配置、运行控制的完整步骤,并补充实用配置。
编译安装 Nginx 前需完成环境初始化,关闭防火墙、禁用 SELinux,安装编译依赖包,创建专用运行用户(提升安全性)。
# 关闭防火墙并设置开机自启 systemctl stop firewalld systemctl disable firewalld # 临时禁用 SELinux(永久禁用需修改/etc/selinux/config,将 SELINUX=enforcing 改为 disabled) setenforce 0
Nginx 编译需要依赖 pcre(正则支持)、zlib(压缩支持)、gcc(编译工具)、openssl(HTTPS 支持)等库,执行以下命令一键安装:
yum -y install pcre-devel zlib-devel gcc* openssl-devel
为了提升服务器安全性,避免 Nginx 以 root 用户运行,创建无登录权限的专用用户和组:
useradd -M -s /sbin/nologin nginx # -M:不创建家目录;-s /sbin/nologin:设置为无登录权限
编译安装的核心是 ./configure 配置参数,可根据业务需求开启/关闭模块,本文使用Nginx 1.26.3(稳定版),并开启常用核心模块(含 HTTPS、状态统计、压缩等)。
# 下载安装包(可从 Nginx 官网 https://nginx.org/下载最新稳定版) wget https://nginx.org/download/nginx-1.26.3.tar.gz # 解压安装包 tar zxvf nginx-1.26.3.tar.gz # 进入解压目录 cd nginx-1.26.3
执行 ./configure 配置安装路径和模块,完整实用参数如下(包含文档核心模块 + 实用扩展模块):
./configure \ --prefix=/usr/local/nginx \ # Nginx 安装根目录 --user=nginx \ # 运行用户 --group=nginx \ # 运行组 --with-http_ssl_module \ # 开启 HTTPS 支持(必开,适配 HTTPS 网站) --with-http_v2_module \ # 开启 HTTP/2 支持(提升传输速度) --with-http_realip_module \ # 开启 IP 透传(获取客户端真实 IP,反向代理必备) --with-http_stub_status_module \ # 开启状态统计模块(监控 Nginx 运行状态) --with-http_gzip_static_module \ # 开启静态压缩(压缩网页资源,提升加载速度) --with-pcre \ # 开启 PCRE 正则支持 --with-stream \ # 开启 TCP 反向代理(支持 TCP/UDP 协议转发) --add-module=./ngx_http_proxy_connect_module # 开启 HTTPS 转发(第三方模块,解决 Nginx 默认不支持 HTTPS 转发问题)
注意事项:若执行 ./configure 时报错,大概率是依赖包未安装完整,根据报错信息补充安装即可(如缺少 pcre-devel 则重新执行 yum install -y pcre-devel)。
配置参数无误后,执行编译和安装命令,耗时根据服务器性能而定:
# 编译 make # 安装 make install
将 Nginx 的可执行文件添加到系统全局路径,实现任意目录执行 nginx 命令:
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ # 验证是否配置成功 nginx -v # 输出 nginx version: nginx/1.26.3 即成功
Nginx 的运行控制有两种方式:原生命令和系统服务,系统服务方式更符合企业级运维习惯,推荐使用。
# 检查配置文件语法(必做!修改配置后先检查,避免语法错误导致服务启动失败) nginx -t # 启动 Nginx nginx # 重载配置文件(修改配置后无需停止服务,直接重载,不影响业务) nginx -s reload # 优雅停止 Nginx(处理完当前请求后停止,避免数据丢失) nginx -s quit # 强制停止 Nginx(紧急情况使用,可能导致请求中断) nginx -s stop # 查看 Nginx 进程状态 ps -ef | grep nginx netstat -anpt | grep nginx # 查看 80 端口是否监听
将 Nginx 注册为系统服务,可通过 systemctl 命令实现开机自启、启动、停止、重载,步骤如下:
vim /lib/systemd/system/nginx.service
[Unit] Description=The NGINX HTTP and reverse proxy server After=network.target # 网络启动后再启动 Nginx [Service] Type=forking # 后台运行模式 PIDFile=/usr/local/nginx/logs/nginx.pid # Nginx 的 PID 文件路径 ExecStart=/usr/local/sbin/nginx # 启动命令 ExecStop=/usr/local/sbin/nginx -s quit # 停止命令 ExecReload=/usr/local/sbin/nginx -s reload # 重载命令 PrivateTmp=true # 为 Nginx 分配独立的临时目录 [Install] WantedBy=multi-user.target # 多用户模式下开机自启
# 重新加载系统服务 systemctl daemon-reload # 设置开机自启 systemctl enable nginx # 启动 Nginx systemctl start nginx # 查看 Nginx 服务状态 systemctl status nginx
实用技巧:企业运维中,修改 Nginx 配置后,执行 nginx -t 检查语法,再执行 systemctl reload nginx 重载,全程不中断服务。
Nginx 的主配置文件为 /usr/local/nginx/conf/nginx.conf,采用模块化结构,核心分为全局配置、I/O 事件配置、HTTP 配置三部分,配置文件为纯文本格式,使用 # 注释。
全局配置影响 Nginx 整体运行,核心参数:
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。
配置 Nginx 的网络 I/O 模型,核心参数:
events {
use epoll; # 使用 epoll 模型(Linux 系统最优 I/O 模型),大幅提升并发连接数
worker_connections 4096; # 每个工作进程的最大连接数,默认 4096,可根据服务器性能调整(如 10240)
}
知识点补充:epoll 是 Linux 系统的高性能 I/O 多路复用模型,相比 select/poll,支持更多的并发连接,且性能不会随连接数增加而下降,是 Nginx 高并发的核心保障。
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">。通过 http_stub_status_module 模块可开启 Nginx 的访问状态统计,实时监控连接数、请求数等关键指标,是运维监控的必备配置。
在 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 访问
}
}
重载 Nginx 配置后,本地访问 http://localhost/status,将看到如下信息:
Active connections: 2
server accepts handled requests
223 223 223
Reading: 0
Writing: 1
Waiting: 1
参数含义:
yum 安装即可;nginx -t 检查,语法错误会导致 Nginx 无法启动/重载;server_name 与域名映射是否一致;charset utf-8 和网页的 <meta charset="utf-8">;chown -R nginx:nginx /usr/local/nginx/html 即可。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; # 向客户端返回压缩标识
通过 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
}
除了默认的 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 自定义页面即可。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online