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 组成结构
格式:
<协议>://<用户>:<密码>@<主机>:<端口>/<路径>;<参数>?<查询>#<片段>
各字段详解:
-
协议(Scheme):访问资源的协议(如
http
、https
、ftp
)。 -
主机(Host):服务器的域名或 IP 地址(如
google.com
)。 -
端口(Port):服务监听的端口(默认端口可省略,如 HTTP 默认
80
)。 -
路径(Path):资源在服务器上的位置(如
/images/logo.png
)。 -
参数(Params):向服务器传递额外参数(分号分隔,如
;lang=en
)。 -
查询(Query):动态参数(问号后键值对,
&
分隔,如?q=apple&page=2
)。 -
片段(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. 结合 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服务器,实验就成功了。