目录
一、Web 基础:从域名到网页的核心架构
(一)域名与 DNS:网络寻址的核心逻辑
-
域名的本质与结构
域名是 IP 地址的符号化表示,解决了数字 IP 难以记忆的问题。其结构遵循 “主机名。二级域名。顶级域名。根域” 的层级体系,例如www.baidu.com
中,baidu
是二级域名,com
是顶级域名,根域为隐含的 “.”。- 顶级域名分类:包括国家 / 地区域名(如
.cn
、.uk
)和组织域名(如.com
商业机构、.org
非盈利组织)。 - 全域名(FQDN):主机名与域名的完整组合,如
www.baidu.com
,明确标识主机在网络中的位置。
- 顶级域名分类:包括国家 / 地区域名(如
-
DNS 解析:从域名到 IP 的映射过程
DNS(域名系统)通过分布式数据库将域名解析为 IP 地址,支持静态解析(本地hosts
文件)和动态解析(DNS 服务器递归 / 迭代查询)。在 Windows 命令行中,使用nslookup www.baidu.com
可直接查询域名对应的 IP 地址。 -
域名注册:流程与规则
遵循 “先申请先注册” 原则,不同后缀域名由不同机构管理(如.com
由 ICANN 管理,.cn
由 CNNIC 管理)。注册步骤包括:准备资料(如.cn
需身份证 / 营业执照)、选择注册商、查询域名可用性、提交申请并缴费,最终通过 WHOIS 信息查询域名归属。
(二)网页与 HTML:构建 Web 的基石
-
网页的构成与元素
网页是承载信息的文件,通过 URL 访问,由 HTML 编写,包含文本、图像(GIF/JPEG/PNG)、动画(GIF/SVG/Flash)、声音、视频、表格、导航栏、表单等元素。核心概念包括:- URL:统一资源定位符,标识网络资源路径,如
http://www.example.com/page.html
。 - HTML:超文本标记语言,通过标签定义页面结构,如
<html>
、<head>
、<body>
,支持文本格式化、图片插入、超链接等功能。
- URL:统一资源定位符,标识网络资源路径,如
-
HTML 基础语法与文件结构
- 标签语法:双标签结构,如
<标签>内容</标签>
,区分开始标签和结束标签(带/
)。 - 基本结构:
html
<html> <head> <title>页面标题</title> </head> <body> 页面内容 </body> </html>
头标签(<head>
)包含元数据(<meta>
)、样式(<style>
)、脚本(<script>
)等;内容标签(<body>
)包含可见内容,如段落(<p>
)、链接(<a>
)、表格(<table>
)。
- 标签语法:双标签结构,如
-
静态网页 vs 动态网页:技术实现的分水岭
- 静态网页:纯 HTML 文件(
.htm
/.html
),内容固定,动态效果仅通过 GIF/Flash 实现,不涉及服务器逻辑。 - 动态网页:后缀为
.php
、.jsp
、.asp
等,结合数据库和服务器端语言(如 PHP、Java、Python),内容可根据时间、用户行为或数据库操作动态变化,URL 中常见 “?” 传递参数。
- 静态网页:纯 HTML 文件(
(三)动态网页技术栈:从 CGI 到现代框架
早期动态网页依赖 CGI 技术,因效率低逐渐被淘汰。当前主流技术包括:
- PHP:跨平台脚本语言,语法简洁,广泛用于中小型网站(如 WordPress)。
- JSP:基于 Java 生态,适合企业级应用,与 Servlet 协同实现 MVC 架构。
- Python:通过 Flask、Django 框架支持动态网页,兼具简洁性与扩展性。
- Ruby:借助 Rails 框架,倡导 “约定优于配置”,适合快速开发。
二、HTTP 协议:Web 通信的 “语言”
(一)协议概述:请求 - 响应模型的核心
HTTP(超文本传输协议)是 Web 的基础通信协议,采用客户端 - 服务器模型:
- 客户端发起请求:包含请求方法(如 GET/POST)、URL、协议版本(如 HTTP/1.1)、请求头(如
User-Agent
标识浏览器信息)和请求体(POST 数据)。 - 服务器返回响应:包含状态码(如 200 成功、404 未找到)、响应头(如
Content-Type
标识数据类型)和响应体(HTML 内容或错误信息)。
(二)HTTP 方法:操作资源的 “指令”
方法 | 描述 | 使用场景 |
---|---|---|
GET | 请求资源(参数在 URL 中) | 读取数据(如获取页面) |
POST | 提交数据(参数在请求体中) | 表单提交、文件上传 |
PUT | 更新资源 | 修改数据(如更新用户信息) |
DELETE | 删除资源 | 删除数据(如删除文件) |
HEAD | 获取资源头部信息 | 检查资源是否存在 |
GET vs POST 对比:
- GET 参数暴露在 URL 中,长度受限(约 2048 字符),可被缓存,安全性较低;
- POST 参数隐藏在请求体中,无长度限制,不可缓存,适合提交敏感数据(如密码)。
(三)状态码:通信结果的 “信号灯”
- 1XX(信息提示):如 100 Continue,表示服务器接收请求并继续处理。
- 2XX(成功):如 200 OK,请求成功;201 Created,资源创建成功。
- 3XX(重定向):如 301 永久重定向(浏览器自动跳转),302 临时重定向。
- 4XX(客户端错误):如 403 Forbidden(权限拒绝),404 Not Found(资源未找到)。
- 5XX(服务器错误):如 500 Internal Server Error(服务器内部错误),502 Bad Gateway(网关错误)。
(四)请求与响应报文:数据传输的 “格式”
- 请求报文结构:
plaintext
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 Connection: Keep-Alive (空行) (请求体,GET无)
- 响应报文结构:
plaintext
HTTP/1.1 200 OK Server: Nginx/1.12.0 Content-Type: text/html Content-Length: 1234 (空行) <html>响应内容</html>
三、Nginx 服务器:高性能 Web 服务的首选
(一)Nginx 基础:轻量、高效的 Web 服务器
由俄罗斯工程师 Igor Sysoev 开发,专为解决高并发(C10K 问题)设计,具备以下优势:
- 事件驱动架构:单服务器支持 3 万 - 5 万并发连接,内存消耗低(每万连接约 2.5MB)。
- 模块化设计:支持 HTTP/2、HTTPS、负载均衡、动静分离等功能。
- 应用场景:静态资源服务、反向代理、API 网关、流媒体分发(如 Netflix 视频调度)。
(二)编译安装:从源码到运行的全流程
- 准备依赖环境:
bash
dnf install -y gcc make pcre-devel zlib-devel openssl-devel
- 创建专用用户与目录:
bash
useradd -M -s /sbin/nologin nginx # 创建无Shell访问的用户 mkdir -p /var/log/nginx && chown -R nginx:nginx /var/log/nginx
- 下载并编译源码:
bash
wget http://nginx.org/download/nginx-1.26.3.tar.gz tar zxf nginx-1.26.3.tar.gz && cd nginx-1.26.3 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module make && make install
- 创建快捷链接:
bash
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx
(三)配置文件与运行控制
- 核心配置文件
nginx.conf
:- 全局配置:设置运行用户(
user nginx
)、工作进程数(worker_processes 1
)、日志路径。 - HTTP 配置:定义虚拟主机(
server
块)、监听端口(listen 80
)、域名(server_name www.example.com
)、根目录(root /var/www/html
)、默认首页(index index.html
)。
- 全局配置:设置运行用户(
- 运行控制命令:
- 检查配置:
nginx -t
- 启动服务:
nginx
- 重载配置:
killall -s HUP nginx
或systemctl reload nginx
- 优雅停止:
killall -s QUIT nginx
- 检查配置:
(四)访问控制:安全与权限管理
- 基于用户授权的访问控制:
- 生成密码文件(需
httpd-tools
):bash
htpasswd -c /usr/local/nginx/passwd.db test # 创建用户test
- 修改配置文件,添加认证规则:
nginx
server { location / { auth_basic "secret"; # 认证领域名称 auth_basic_user_file /usr/local/nginx/passwd.db; # 密码文件路径 } }
- 生成密码文件(需
- 基于 IP 的访问控制:
nginx
server { location / { deny 192.168.9.207; # 拒绝特定IP allow all; # 允许所有其他IP } }
(五)虚拟主机:一台服务器托管多个网站
- 基于域名的虚拟主机:
- 在
hosts
文件中绑定域名到服务器 IP:plaintext
192.168.9.158 www.bt.com www.test.com
- 配置多个
server
块,指定不同server_name
:nginx
server { listen 80; server_name www.bt.com; root /var/www/html/btcom; index index.html; } server { listen 80; server_name www.test.com; root /var/www/html/testcom; index index.html; }
- 在
- 基于 IP 的虚拟主机:
- 添加虚拟 IP(如
192.168.9.110
),配置不同listen
IP:nginx
server { listen 192.168.9.158:80; root /var/www/html/btcom; } server { listen 192.168.9.110:80; root /var/www/html/testcom; }
- 添加虚拟 IP(如
- 基于端口的虚拟主机:
- 监听不同端口(如 6666 和 8888):
nginx
server { listen 192.168.9.158:6666; root /var/www/html/btcom; } server { listen 192.168.9.158:8888; root /var/www/html/testcom; }
- 监听不同端口(如 6666 和 8888):
(六)状态统计与监控
启用http_stub_status_module
模块,配置访问路径/status
:
nginx
location /status {
stub_status on;
access_log off; # 关闭日志记录
}
访问http://服务器IP/status
可查看活动连接数、处理请求数等统计信息。
四、总结:从理论到实践的 Web 开发基石
掌握 Web 基础(域名 / DNS、HTML / 动态网页)、HTTP 协议(请求方法、状态码)与 Nginx 服务器(安装、配置、虚拟主机)是进入互联网技术领域的关键一步。这些知识不仅是前端开发、后端架构的基础,更是理解分布式系统、微服务架构的前提。通过实战配置 Nginx,可直观感受高性能 Web 服务的搭建过程,为后续深入学习负载均衡、HTTPS 加密、容器化部署(如 Kubernetes Ingress)奠定坚实基础。