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

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状态码:

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

当客户端发起一个请求,比如 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.org 和 bbs.lcf.org 这两个主机名映射到IP地址192.168.52.100了。

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

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

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

http://www.xdnf.cn/news/3962.html

相关文章:

  • 使用OpenCV 和 Dlib 实现疲劳检测
  • 【macOS常用快捷键】
  • Flink流水线任务在线演示
  • C++类和对象之默认成员函数
  • 基于 Spark 和 Hadoop 的空气质量数据分析与预测系统
  • 【AI提示词】AARRR 模型执行者
  • Google-chrome版本升级后sogou输入法不工作了
  • Cisco NDO - Nexus Dashboard Orchestrator
  • 202533 | SpringBoot集成RocketMQ
  • 2025 年 408 真题及答案
  • 深入探索Anthropic Claude与Spring AI的融合应用
  • 虚幻引擎5-Unreal Engine笔记之显卡环境设置使开发流畅
  • 【LaTeX+VSCode本地Win11编译教程】
  • Debezium TableSchemaBuilder详解
  • (一)Modular Monolith Architecture(项目结构/.net项目初始化/垂直切片架构)
  • 洛谷 P1440 求m区间内的最小值
  • 8.5/Q1,Charls高分经典文章解读
  • 【Web3】上市公司利用RWA模式融资和促进业务发展案例
  • Spring Boot多模块划分设计
  • C++访问MySQL
  • 《Python星球日记》第31天:Django 框架入门
  • opencv+opencv_contrib+cuda和VS2022编译
  • 202531 | RocketMQ 消息过滤 + 消息重试机制 + 死信消息 + 重复消费问题
  • zotero pdf中英翻译插件使用
  • epub格式转txt格式工具,txt批量转PDF
  • 设计模式(结构型)-组合模式
  • 【Java ee初阶】多线程(6)
  • item_get_app_pro - 获得淘宝app商品详情原数据操作流程
  • 使用 vllm 部署 Llama3-8b-Instruct
  • 【C++】grpc(一):安装