Linux中web服务器的部署及优化

前言:Nginx 和 Apache HTTP Server 是两款非常流行的 Web 服务器。

Nginx

  • 简介:Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。由俄罗斯人伊戈尔・赛索耶夫开发,其在处理高并发连接方面表现卓越,能够高效地处理大量并发请求,广泛应用于各种规模的网站和应用程序中。
  • 特点
    • 高并发处理能力:采用事件驱动的异步非阻塞模型,能在少量线程下处理大量并发连接,在高并发场景下,Nginx 的性能优势明显,资源占用少,响应速度快。例如,一些大型电商网站在促销活动期间,Nginx 能稳定处理海量并发请求,保障网站的正常运行。
    • 反向代理和负载均衡:作为反向代理服务器,可接收互联网用户的请求并转发到后端真实服务器,同时实现负载均衡功能,将请求均匀分配到多个后端服务器上,提高系统的可靠性和可扩展性。如将用户对网站的访问请求均衡分配到多个 Web 服务器上,避免单个服务器负载过高。
    • 配置简洁:配置文件结构清晰,语法简洁,易于理解和维护。通过简单的配置指令,可实现各种复杂的功能,如虚拟主机设置、URL 重写、SSL/TLS 加密等。
  • 应用场景
    • 静态资源服务器:擅长处理静态文件,如 HTML、CSS、JavaScript、图片等。其高效的文件缓存机制和快速的响应能力,能快速将静态资源发送给客户端,提升网站的访问速度。
    • 反向代理和负载均衡:常作为反向代理服务器部署在前端,与后端的多个 Web 服务器配合,实现负载均衡和请求转发,提高系统的性能和可用性。
    • 高并发 Web 应用:对于需要处理大量并发请求的 Web 应用,如大型门户网站、在线游戏平台、电商网站等,Nginx 是理想的选择,能提供稳定高效的服务。

Apache HTTP Server

  • 简介:Apache HTTP Server 是一款历史悠久、应用广泛的开源 Web 服务器软件。由 Apache 软件基金会开发和维护,是全球使用最广泛的 Web 服务器之一,具有高度的稳定性、可扩展性和跨平台性。
  • 特点
    • 高度可定制 :通过丰富的模块系统,可根据不同需求进行灵活定制。例如,可加载mod_ssl模块实现 HTTPS 加密,mod_php模块支持 PHP 脚本的运行,满足各种不同类型网站和应用的功能需求。
    • 广泛的兼容性:能在多种操作系统上运行,如 Linux、Windows、macOS 等,适应不同的服务器环境,方便用户根据自身需求选择合适的操作系统平台。
    • 强大的社区支持:拥有庞大且活跃的社区,用户在使用过程中遇到问题可方便地获取帮助、查找资料,同时社区不断推动着 Apache 的发展和更新,使其能紧跟技术发展的步伐。
  • 应用场景
    • 传统动态网站:对于使用 PHP、Python 等动态语言开发的传统网站,Apache 是常用的选择。其丰富的模块和广泛的兼容性,能很好地支持各种动态脚本的运行,配合数据库系统可构建功能强大的动态网站。
    • 企业级应用:在企业级应用中,Apache 的稳定性和可扩展性得到了广泛认可。可用于部署企业内部的信息系统、办公自动化系统等,满足企业对可靠性和功能多样性的要求。
    • 对功能扩展要求高的网站:如果网站需要频繁进行功能扩展和定制,如添加各种个性化的模块和功能,Apache 的高度可定制性使其能够很好地满足这类需求。

一、Web 基础知识精简总结

1. 万维网(WWW)

  • 定义 :全球信息网络(World Wide Web),通过互联网以超文本形式(文字、图片、音频、视频)传递信息。

  • 核心工具 :使用浏览器访问并解析网页数据(如 Chrome、Firefox)。

  • 特点

    • 支持超链接跳转(点击链接访问其他资源)。

    • 客户端-服务器架构(浏览器请求,服务器返回数据)。

2. 网址(URI、URL、URN)

类型 全称 作用 示例
URI 统一资源标识符 唯一标识资源(包含 URL 和 URN) https://example.com
URL 统一资源定位符 定位资源的具体路径与访问方式 https://example.com/page
URN 统一资源名称 命名资源但不指定位置 磁力链接(magnet:?xt=...

3. URL 组成结构

格式

复制代码
<协议>://<用户>:<密码>@<主机>:<端口>/<路径>;<参数>?<查询>#<片段>  

各字段详解

  1. 协议(Scheme) :访问资源的协议(如 httphttpsftp)。

  2. 主机(Host) :服务器的域名或 IP 地址(如 google.com)。

  3. 端口(Port) :服务监听的端口(默认端口可省略,如 HTTP 默认 80)。

  4. 路径(Path) :资源在服务器上的位置(如 /images/logo.png)。

  5. 参数(Params) :向服务器传递额外参数(分号分隔,如 ;lang=en)。

  6. 查询(Query) :动态参数(问号后键值对,& 分隔,如 ?q=apple&page=2)。

  7. 片段(Fragment) :页面内锚点定位(# 后内容,如 #section1)。

4. 常见对比

  • URL vs URN

    • URL:明确资源的位置和访问方式(如网页地址)。

    • URN:仅标识资源名称(如书籍 ISBN、磁力链接)。

二、HTTP 协议核心知识点精简

1、HTTP 基础

分类 核心要点
定义 超文本传输协议(HyperText Transfer Protocol),基于 请求-响应模型 的应用层协议。
特点 - 无状态:每次请求独立,依赖 Cookie/Session 维持状态。 - 明文传输(HTTPS 加密)。
URI 结构 协议://域名:端口/路径?查询参数#片段 示例:https://www.example.com:443/path?name=val#section

2、HTTP 版本对比

版本 关键改进
HTTP/1.0 - 短连接:每次请求新建 TCP 连接。 - 基础方法(GET、POST)。
HTTP/1.1 - 持久连接(默认 Connection: keep-alive)。 - 管道化(Pipelining)。 - 新增方法(PUT、DELETE 等)。
HTTP/2 - 多路复用(Multiplexing)。 - 二进制分帧。 - 头部压缩(HPACK)。
HTTP/3 - 基于 QUIC 协议 (UDP 实现,减少延迟)。 - 改进拥塞控制。

3、HTTP 请求方法

方法 用途 幂等性 安全性
GET 获取资源(参数在 URL 中) 是(只读)
POST 提交数据(参数在 Body 中)
PUT 更新整个资源
PATCH 更新资源部分内容
DELETE 删除资源

4、HTTP 状态码

分类 范围 常见状态码 说明
1xx 信息响应 100 Continue 请求已接收,客户端继续发送。
2xx 成功 200 OK 201 Created 请求成功处理。
3xx 重定向 301 Moved Permanently 302 Found 资源重定向(永久/临时)。
4xx 客户端错误 400 Bad Request 404 Not Found 请求语法错误/资源不存在。
5xx 服务端错误 500 Internal Error 503 Service Unavailable 服务器内部错误/服务不可用。

常见的HTTP状态码:

状态码 名称 含义 常见原因与解决方案
200 OK 请求已成功处理,服务器返回了预期的响应内容。 - 成功场景 :客户端请求的资源存在且服务器正常处理。 - 验证方法:检查响应体(Body)内容是否符合预期,确保业务逻辑正确执行。
400 Bad Request 请求语法错误,服务器无法解析。 - 请求参数格式错误(如 JSON 格式错误)。 - 检查请求头、Body 是否符合 API 规范。
401 Unauthorized 未提供有效身份验证信息。 - 缺少 Token 或 API Key。 - 检查 Authorization 头部是否有效。
403 Forbidden 服务器拒绝请求(身份验证通过,但权限不足)。 - 用户无权访问资源。 - 检查用户角色或权限配置。
404 Not Found 请求的资源不存在。 - URL 路径错误或资源已被删除。 - 检查请求路径和资源状态。
500 Internal Server Error 服务器内部错误。 - 代码逻辑异常(如空指针)。 - 检查服务端日志,修复代码 Bug。
503 Service Unavailable 服务暂时不可用(如维护或过载)。 - 服务器过载或主动进入维护模式。 - 扩容服务器或等待维护结束。

5、HTTPS 安全机制

机制 说明
加密流程 1. 非对称加密协商密钥(RSA/ECDHE)。 2. 对称加密传输数据(AES)。
SSL/TLS 实现 HTTPS 的核心协议,保障数据 机密性完整性身份认证
证书验证 - CA 机构签发证书,验证服务端身份。 - 防止中间人攻击。
HTTP vs HTTPS - HTTP 端口 80,HTTPS 端口 443。 - HTTPS = HTTP + SSL/TLS 加密。

6、常见 HTTP 头部字段

头部类型 常用字段 示例/作用
通用头部 Cache-Control Connection 控制缓存行为(max-age=3600)。
请求头部 User-Agent Authorization 客户端标识(浏览器类型)。
响应头部 Content-Type Set-Cookie 响应类型(text/html)。
实体头部 Content-Length Last-Modified 资源长度(字节)。

三、web服务的配置详解

1、使用 /bin/vmset.sh 脚本来快速设定IP地址

2、安装nginx,然后启动nginx

3、要让防火墙允许http协议的流量

4、知道nginx的默认发布目录以及默认发布文件的存在

5、了解nginx的主配置文件

下图为http块和http块中server块的默认配置。

6、web服务器的访问控制

1.基于IP地址的访问控制

1. location 块的作用

在 Nginx 的配置文件中,location 块用于匹配客户端请求的 URI(统一资源标识符)部分。例如,配置中的 location /lee/ 表示匹配所有以 /lee/ 开头的请求 URI。当客户端发起的请求 URI 符合这个匹配规则时,Nginx 就会应用该 location 块内的配置来处理这个请求。

2. root 指令的作用

root 指令用于指定请求文件查找的根目录。在你给出的例子中,root /usr/share/nginx/html; 意味着 Nginx 会将这个目录作为查找文件的起始点。

3. 结合 locationroot 定位文件

当客户端发起一个请求,比如 http://example.com/lee/index.html,Nginx 会按照以下步骤来确定要查找的文件的实际路径:

  • 匹配 location 块:Nginx 会检查请求的 URI /lee/index.html,发现它以 /lee/ 开头,因此匹配到了 location /lee/ 这个块。

  • 追加路径:一旦匹配成功,Nginx 会把请求 URI 中 /lee/ 之后的部分(即 index.html)追加到 root 指定的目录 /usr/share/nginx/html 后面。

  • 确定实际路径:经过追加后,最终得到的文件实际路径就是 /usr/share/nginx/html/lee/index.html。Nginx 会去这个路径下查找 index.html 文件,如果文件存在,就将其内容返回给客户端;如果文件不存在,Nginx 通常会返回一个 404 错误页面。

然后可以通过其它IP地址不为192.168.52.100的虚拟主机发现,只有IP地址为192.168.52.100的这一台主机可以访问此 /usr/share/nginx/html/lee/index.html 文件,而其它IP地址想要访问将会出现403 Forbidden的错误提示。

2.基于认证的访问控制

先在nginx的默认发布目录中创建一个测试文件test.html。

3.基于IP地址的虚拟主机

新增加了两个IP地址。

然后在windows系统的浏览器上检验,发现可以通过新的IP地址来访问新的nginx服务器,实验就成功了。

4.基于域名的虚拟主机

改写 /etc/nginx/conf.d/vhosts.conf 文件为下图这样子。

不过因为此时我们没有往dns解析文件中加入IP地址跟域名的对应关系,所以正常来说现在是访问不了的。

移动 include /etc/nginx/conf.d/*.conf; 这条命令行到server块下方,让Nginx 先解析主配置文件里的 server 块,接着再包含并解析 /etc/nginx/conf.d/ 目录下的以.conf结尾的配置文件。

然后改写 /etc/hosts文件为下图这样,/etc/hosts 是一个用于将主机名映射到 IP 地址的本地配置文件,在类 Unix 系统(如 Linux、macOS)中广泛使用。

下图中就是将 news.lcf.orgbbs.lcf.org 这两个主机名映射到IP地址192.168.52.100了。

重新加载nginx的配置文件之后再在Linux系统中的火狐浏览器进行检验,因为改写的 /etc/hosts文件是Linux系统的,对虚拟机外的windows系统不生效。

也可以使用curl命令进行检验。

最后发现基于域名已经可以访问到对应IP地址的nginx服务器,实验就成功了。

相关推荐
alden_ygq11 分钟前
/etc/kdump.conf 配置详解
服务器·网络·php
卡戎-caryon12 分钟前
【项目实践】boost 搜索引擎
linux·前端·网络·搜索引擎·boost·jieba·cpp-http
JANYI201831 分钟前
Linux 常用指令详解
linux·c语言·网络
清源妙木真菌42 分钟前
高并发内存池
linux·性能优化·内存管理
会飞的涂涂1 小时前
Linux中的粘滞位和开发工具和文本编辑器vim
linux·运维·服务器
别催小唐敲代码1 小时前
解决跨域的4种方法
java·服务器·前端·json
溪饱鱼1 小时前
Nuxt3还能用吗?
前端·个人开发·seo
用户呢称2 小时前
Linux | WEB服务器的部署及优化
运维·服务器
丨丨三戒丶2 小时前
layui轮播图根据设备宽度图片等比例,高度自适应
前端·javascript·layui
crabdave1233 小时前
Ubuntu K8S(1.28.2) 节点/etc/kubernetes/manifests 不存在
linux·ubuntu·kubernetes