当前位置: 首页 > news >正文

web服务与Nginx

一、引言

在互联网蓬勃发展的当下,网页和 HTTP 协议是构建网络世界的基石。掌握这些知识,对于从事互联网技术相关工作的人来说至关重要。本文将深入探讨 Web 基础概念、HTTP 协议,以及 Nginx 服务器的搭建与配置,同时附上相关实验命令,希望能帮助读者建立起系统的知识体系,并通过实践加深理解。

二、Web 基础详解

(一)域名与 DNS

  1. 域名概念与结构:网络基于 TCP/IP 协议运行,每台主机都有唯一的 IP 地址,但 IP 地址难以记忆,于是出现了域名。例如www.baidu.com,“baidu” 是主体,“com” 是顶级域名后缀,“www” 是主机名。域名结构中,级别最低的域名在最左边,最高的在最右边,总长度不超 255 个字符,且标号由英文字母、数字组成,除连字符外不能用其他标点符号。
  2. 域名结构类型:根域由 13 台根服务器管理,负责互联网主目录;顶级域包含组织域(如.com商业机构、.net网络组织)和国家 / 地区域名(如.cn中国);二级域名是顶级域名前的部分,如 “baidu”;FQDN(全域名)则是主机名加上全路径,能准确表示主机位置。
  3. 域名解析与注册:域名解析是将主机名转换为 IP 地址的过程,可采用静态或动态解析方法。在 Windows 命令行中,可使用以下命令查询域名对应的 IP 地址:
nslookup www.baidu.com

域名注册遵循先申请先注册原则,注册时需准备资料(如.cn域名个人申请需身份证或企业营业执照),选择注册网站,查询并申请域名,成功后进行 DNS 解析管理。

(二)网页与 HTML

  1. 网页概述:网页是构成网站的基本元素,通过 URL 识别与存取,包含文本、图像、声音、视频等多种内容。同时,网页相关概念众多,如域名是浏览网页输入的网址,HTTP 是传输网页的协议,HTML 是编写网页的语言等。
  2. HTML 概述与基本标签:HTML(超文本标记语言)通过标记符号描述网页内容的显示方式。它采用双标记符形式,文件最外层是<html></html>,内部包含头标签<head>和内容标签<body>。头标签中有<title>定义文档标题等标签,内容标签中有<table>定义表格等常用标签。
  3. 网站与主页:网站由多个网页组成,具有独立域名和存放空间。主页是用户打开浏览器时默认打开的网页,网站服务器收到浏览器请求时,若未指定特定目录或文件,通常会返回首页,首页一般起到引导用户浏览网站其他内容的作用。

(三)静态网页与动态网页

  1. 静态网页:纯粹 HTML 格式的网页是静态网页,扩展名通常是.htm.html。虽然静态网页也能有动态效果(如 GIF 动画、FLASH 等),但这些效果只是视觉上的,页面内容和显示效果基本固定。
  2. 动态网页:动态网页与静态网页相对,其页面代码不变,但显示内容可随时间、环境或数据库操作结果改变。动态网页 URL 后缀常见的有.aspx.asp.jsp.php等,且网址中常带有 “?”。它融合了 HTML 语法、高级程序设计语言(如 Java、PHP、C#)和数据库编程技术,实现网站内容和风格的高效管理。
  3. 动态网页语言:早期动态网页常用 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&param2=value2

使用curl模拟 POST 请求:

curl -X POST -d "param1=value1&param2=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 服务基础

  1. Nginx 简介与安装:Nginx 专为性能优化开发,具有稳定性高、资源消耗低、并发处理能力强等优点。以 Nginx1.12.0 为例,安装前需先安装支持软件(如pcrezlib等开发包),创建运行用户和组以及日志目录,然后进行编译安装,安装后可创建链接文件方便调用。
    安装支持软件:
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 信号优雅关闭进程等。还可编写服务脚本,使用chkconfigsystemctl工具管理,方便启动、停止、重启、重载服务。
检查配置文件:

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 虚拟主机

  1. 基于域名的虚拟主机:修改 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

  1. 基于 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

  1. 基于端口的虚拟主机:选择系统未使用的端口,映射到同一 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 服务器从安装配置、访问控制到虚拟主机搭建都进行了深入探讨,并附上了相关实验命令。希望读者通过本文能对相关知识有更深入的理解,为进一步学习和实践互联网技术奠定坚实基础。

相关文章:

  • MySQL 主从复制
  • 二叉树的所有路径(回溯算法基础)
  • 蓝牙耳机开发--TWS蓝牙耳机双向通信充电盒设计
  • 滑动窗口模板
  • 《系统分析师-第三阶段—总结(六)》
  • Android Studio学习记录1
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • 云服务器被黑客攻击应急响应与加固指南(上)
  • Swiper 在 Vue 中的使用指南
  • 用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)
  • Atcoder Help 有关Atcoder 的介绍-1 涨分规则
  • docker安装Canal1.1.5,MySQL5.7踩坑
  • 企业架构之旅(2):解锁TOGAF ADM
  • OpenCV-Python (官方)中文教程(部分一)_Day16
  • MicroPython for ESP32 舵机控制详解
  • 【学习笔记】软件测试流程-测试设计阶段
  • 全地形车市场
  • FPGA-DDS信号发生器
  • watch 监视器
  • 葡萄牙总理:未来几小时内将全面恢复供电
  • 俄罗斯延长非法滞留外国人限期离境时间至9月
  • 人社部:将会同更多部门分行业、分领域制定专项培训计划
  • 利物浦提前四轮英超夺冠,顶级联赛冠军数追平曼联
  • 新加坡选情渐热:播客、短视频各显神通,总理反对身份政治
  • 大漠孤烟为何“直”?物理学家在唐诗中读出“不一样的美”