web服务与Nginx
一、引言
在互联网蓬勃发展的当下,网页和 HTTP 协议是构建网络世界的基石。掌握这些知识,对于从事互联网技术相关工作的人来说至关重要。本文将深入探讨 Web 基础概念、HTTP 协议,以及 Nginx 服务器的搭建与配置,同时附上相关实验命令,希望能帮助读者建立起系统的知识体系,并通过实践加深理解。
二、Web 基础详解
(一)域名与 DNS
- 域名概念与结构:网络基于 TCP/IP 协议运行,每台主机都有唯一的 IP 地址,但 IP 地址难以记忆,于是出现了域名。例如
www.baidu.com
,“baidu” 是主体,“com” 是顶级域名后缀,“www” 是主机名。域名结构中,级别最低的域名在最左边,最高的在最右边,总长度不超 255 个字符,且标号由英文字母、数字组成,除连字符外不能用其他标点符号。 - 域名结构类型:根域由 13 台根服务器管理,负责互联网主目录;顶级域包含组织域(如
.com
商业机构、.net
网络组织)和国家 / 地区域名(如.cn
中国);二级域名是顶级域名前的部分,如 “baidu”;FQDN(全域名)则是主机名加上全路径,能准确表示主机位置。 - 域名解析与注册:域名解析是将主机名转换为 IP 地址的过程,可采用静态或动态解析方法。在 Windows 命令行中,可使用以下命令查询域名对应的 IP 地址:
nslookup www.baidu.com
域名注册遵循先申请先注册原则,注册时需准备资料(如.cn
域名个人申请需身份证或企业营业执照),选择注册网站,查询并申请域名,成功后进行 DNS 解析管理。
(二)网页与 HTML
- 网页概述:网页是构成网站的基本元素,通过 URL 识别与存取,包含文本、图像、声音、视频等多种内容。同时,网页相关概念众多,如域名是浏览网页输入的网址,HTTP 是传输网页的协议,HTML 是编写网页的语言等。
- HTML 概述与基本标签:HTML(超文本标记语言)通过标记符号描述网页内容的显示方式。它采用双标记符形式,文件最外层是
<html></html>
,内部包含头标签<head>
和内容标签<body>
。头标签中有<title>
定义文档标题等标签,内容标签中有<table>
定义表格等常用标签。 - 网站与主页:网站由多个网页组成,具有独立域名和存放空间。主页是用户打开浏览器时默认打开的网页,网站服务器收到浏览器请求时,若未指定特定目录或文件,通常会返回首页,首页一般起到引导用户浏览网站其他内容的作用。
(三)静态网页与动态网页
- 静态网页:纯粹 HTML 格式的网页是静态网页,扩展名通常是
.htm
或.html
。虽然静态网页也能有动态效果(如 GIF 动画、FLASH 等),但这些效果只是视觉上的,页面内容和显示效果基本固定。 - 动态网页:动态网页与静态网页相对,其页面代码不变,但显示内容可随时间、环境或数据库操作结果改变。动态网页 URL 后缀常见的有
.aspx
、.asp
、.jsp
、.php
等,且网址中常带有 “?”。它融合了 HTML 语法、高级程序设计语言(如 Java、PHP、C#)和数据库编程技术,实现网站内容和风格的高效管理。 - 动态网页语言:早期动态网页常用 CGI 技术,但因其编程困难、效率低、修改复杂,逐渐被新技术取代。目前常用的动态网页编程语言有 PHP(语法借鉴多种语言,易于上手,可构建交互性网站)、JSP(基于 Java 体系的 Web 开发技术)、Python(面向对象、跨平台,应用广泛)、Ruby(简单快捷的面向对象脚本语言)。
三、HTTP 协议深度解析
(一)HTTP 协议概述
HTTP 协议采用请求 / 响应模型。客户端向服务器发送请求,请求头包含请求方法、URL、协议版本等信息;服务器以状态行响应,响应内容包括协议版本、状态码、服务器信息等。HTTP 协议有多个版本,如已过时的 HTTP/0.9,广泛使用的 HTTP/1.0,以及当前版本 HTTP/1.1,后者支持持久连接和管道方式发送请求,能提高传输速度。
可以使用curl
命令模拟 HTTP 请求,查看请求和响应信息:
curl -v http://www.example.com
(二)HTTP 方法
HTTP 支持多种请求方法,最常用的是 GET 和 POST。GET 方法用于获取资源,参数显示在 URL 后缀中,如http://www.test.com/a.php?Id=123
,但 URL 长度有限制,且数据会被浏览器缓存,安全性较差;POST 方法用于在资源后附加新数据,参数隐藏提交,适合提交表单、用户名密码等数据,对数据长度无限制,安全性更高。
使用curl
模拟 GET 请求:
curl http://www.example.com?param1=value1¶m2=value2
使用curl
模拟 POST 请求:
curl -X POST -d "param1=value1¶m2=value2" http://www.example.com
(三)HTTP 状态码
HTTP 状态码是表示网页服务器响应状态的 3 位数字代码。分为五大类:1XX 表示信息提示;2XX、3XX 表示请求正常;4XX 表示客户端错误(如 404 Not Found 表示服务器无法找到请求页面);5XX 表示服务器错误(如 500 Internal Server Error 表示内部服务器错误)。
(四)HTTP 请求流程分析
用户在浏览器输入 URL 访问时,发起包含请求行、请求头、请求体的 HTTP 请求报文。请求行由请求方法、URL、协议版本组成;请求头添加附加信息;GET 方法请求体无数据,POST 方法请求体包含提交参数。服务器收到请求后返回包含状态行、响应头、响应体的响应报文,状态行包含协议版本、状态码、状态码描述,响应头添加附加信息,响应体是服务器返回的 HTML 数据,浏览器解析后显示页面。
四、Nginx 服务器搭建与配置
(一)Nginx 服务基础
- Nginx 简介与安装:Nginx 专为性能优化开发,具有稳定性高、资源消耗低、并发处理能力强等优点。以 Nginx1.12.0 为例,安装前需先安装支持软件(如
pcre
、zlib
等开发包),创建运行用户和组以及日志目录,然后进行编译安装,安装后可创建链接文件方便调用。
安装支持软件:
yum install -y pcre-devel zlib-devel openssl-devel
创建运行用户和组:
groupadd nginx
useradd -M -s /sbin/nologin -g nginx nginx
创建日志目录:
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx
下载并解压 Nginx 源码包:
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
编译安装:
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
创建链接文件:
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
Nginx 的运行控制:Nginx 主程序提供 “-t” 选项检查配置文件,直接运行可启动服务器,也可指定配置文件启动。Nginx 进程支持多种信号,如 HUP 信号重载配置,QUIT 信号优雅关闭进程等。还可编写服务脚本,使用chkconfig
和systemctl
工具管理,方便启动、停止、重启、重载服务。
检查配置文件:
nginx -t
启动 Nginx:
nginx
使用信号控制 Nginx:
# 优雅关闭
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
# 强制关闭
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
# 重载配置
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
使用systemctl
管理 Nginx:
# 启动
systemctl start nginx
# 停止
systemctl stop nginx
# 重启
systemctl restart nginx
# 重载配置
systemctl reload nginx
# 设置开机自启
systemctl enable nginx
配置文件 nginx.conf:Nginx 主配置文件nginx.conf
包含全局配置(如运行用户、工作进程数等)、I/O 事件配置和 HTTP 配置。其中,HTTP 配置中的location
块用于配置网站根目录、默认首页、错误页面等。此外,Nginx 内置HTTP_STUB_STATUS
状态统计模块,启用该模块并配置后,可查看 Web 访问情况。
(二)Nginx 访问控制
基于授权的访问控制:Nginx 可实现基于用户授权的访问控制,步骤包括使用htpasswd
生成用户密码认证文件,修改密码文件权限和所有者,在主配置文件中添加认证配置项,检测语法并重启服务,最后用浏览器访问测试。
生成用户密码认证文件:
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/conf/htpasswd.users username
修改配置文件nginx.conf
,添加以下内容:
location / {auth_basic "Restricted Access";auth_basic_user_file /usr/local/nginx/conf/htpasswd.users;
}
检查配置并重启:
nginx -t
nginx -s reload
基于客户端的访问控制:基于客户端 IP 地址进行访问控制,规则是deny
拒绝某个 IP 或 IP 段访问,allow
允许某个 IP 或 IP 段访问,规则从上往下执行。在主配置文件中添加配置项后重启服务器即可生效。
修改配置文件nginx.conf
,添加以下内容:
location / {deny 192.168.1.100;allow all;
}
检查配置并重启:
nginx -t
nginx -s reload
(三)Nginx 虚拟主机
- 基于域名的虚拟主机:修改 Windows 客户机的
hosts
文件,指定多个域名指向同一服务器 IP。准备各个网站的目录和测试首页,修改 Nginx 配置文件,添加对应域名的server{}
段,配置监听地址、域名、日志文件、网站根目录等,检测配置并重启服务,访问不同域名测试。
修改 Windowshosts
文件(路径:C:\Windows\System32\drivers\etc\hosts
),添加以下内容:
192.168.1.10 www.site1.com
192.168.1.10 www.site2.com
创建网站目录和测试文件:
mkdir -p /data/www/site1
mkdir -p /data/www/site2
echo "This is site 1" > /data/www/site1/index.html
echo "This is site 2" > /data/www/site2/index.html
修改 Nginx 配置文件nginx.conf
,添加以下内容:
server {listen 80;server_name www.site1.com;access_log /var/log/nginx/site1.access.log;error_log /var/log/nginx/site1.error.log;root /data/www/site1;index index.html;
}server {listen 80;server_name www.site2.com;access_log /var/log/nginx/site2.access.log;error_log /var/log/nginx/site2.error.log;root /data/www/site2;index index.html;
}
检查配置并重启:
nginx -t
nginx -s reload
- 基于 IP 的虚拟主机:通过配置虚拟 IP,使主机有多个 IP 地址,每个 IP 对应一个站点。修改 Nginx 配置文件,指定不同 IP 的监听地址和相关配置,重启服务后访问不同 IP 测试。
配置虚拟 IP:
ifconfig eth0:1 192.168.1.11 netmask 255.255.255.0 up
修改 Nginx 配置文件nginx.conf
,添加以下内容:
server {listen 192.168.1.10:80;server_name _;root /data/www/site1;index index.html;
}server {listen 192.168.1.11:80;server_name _;root /data/www/site2;index index.html;
}
检查配置并重启:
nginx -t
nginx -s reload
- 基于端口的虚拟主机:选择系统未使用的端口,映射到同一 IP 地址。在 Nginx 配置文件中添加对应端口的
server{}
段,检测端口运行情况,访问不同端口测试。
修改 Nginx 配置文件nginx.conf
,添加以下内容:
server {listen 8080;server_name _;root /data/www/site1;index index.html;
}server {listen 8081;server_name _;root /data/www/site2;index index.html;
}
检查配置并重启:
nginx -t
nginx -s reload
五、总结
本文全面介绍了 Web 开发基础和 Nginx 服务器搭建知识。Web 基础涵盖域名、网页、静态与动态网页等概念;HTTP 协议详细讲解了协议版本、请求方法、状态码和请求流程;Nginx 服务器从安装配置、访问控制到虚拟主机搭建都进行了深入探讨,并附上了相关实验命令。希望读者通过本文能对相关知识有更深入的理解,为进一步学习和实践互联网技术奠定坚实基础。