目录
一. Web服务简介
Web 服务是一种基于网络的软件系统,它通过标准的网络协议(通常是 HTTP 或 HTTPS)提供服务。这些服务可以是静态的,如提供静态网页或文件,也可以是动态的,如处理用户请求并生成动态内容。
以下是一些 Web 服务的基本概念和特征
HTTP 协议: Web 服务通常使用 HTTP(Hypertext Transfer Protocol)或其安全版本 HTTPS(HTTP Secure)作为通信协议。HTTP 定义了客户端和服务器之间的请求和响应格式,以及状态码和头部信息等规范。
RESTful API: REST(Representational State Transfer)是一种基于 HTTP 协议设计的软件架构风格,用于创建可扩展的 Web 服务。RESTful API 通过定义资源、HTTP 方法和状态码来实现对资源的操作,如 GET(获取)、POST(创建)、PUT(更新)和 DELETE(删除)等。
SOAP: SOAP(Simple Object Access Protocol)是另一种用于构建 Web 服务的协议,它使用 XML 格式来定义消息结构和通信协议。SOAP 比较复杂,通常用于企业级应用和基于 XML 的数据交换。
Web 服务器: Web 服务运行在 Web 服务器上,它可以是专用的服务器软件(如 Apache、Nginx、Microsoft IIS 等),也可以是集成在应用程序中的服务器组件(如 Node.js、Django、Flask 等)。
动态内容生成: Web 服务可以根据用户请求生成动态内容,通常使用服务器端脚本语言(如 PHP、Python、Ruby 等)处理请求并生成 HTML、JSON 或 XML 等格式的响应。
扩展性和可伸缩性: 良好设计的 Web 服务具有良好的扩展性和可伸缩性,能够处理大量的并发请求并在需要时进行水平或垂直扩展。
Web 服务在互联网应用开发中起着至关重要的作用,它为用户提供了访问和交互的渠道,并为开发人员提供了构建各种类型应用的基础设施。
以下是一些主流的 Web 服务器
Apache HTTP Server: 通常简称为 Apache,是最流行的开源 Web 服务器软件之一。它具有稳定性高、功能强大、模块化设计等特点,支持多种操作系统,如 Linux、Unix、Windows 等。
Nginx: Nginx 是一款高性能的开源 Web 服务器和反向代理服务器。它的设计目标是解决 C10k 问题(同时连接数超过 10000),具有低内存消耗、高并发处理能力、灵活的配置等优点,被广泛用于构建高性能的 Web 服务。
Microsoft IIS: Internet Information Services(IIS)是由 Microsoft 开发的 Web 服务器软件,用于在 Windows 环境下运行。它集成在 Windows Server 中,支持 ASP.NET、PHP、Node.js 等多种 Web 技术,并提供了强大的管理工具和安全功能。
LiteSpeed Web Server: LiteSpeed 是一款高性能的商业 Web 服务器软件,与 Apache 兼容,但通常比 Apache 更快更稳定。它支持 Apache 的配置文件和模块,提供了缓存、反向代理、负载均衡等功能。
Caddy: Caddy 是一款现代化的开源 Web 服务器,具有自动 HTTPS 部署、HTTP/2 支持、简单的配置等特点。它使用 Go 语言编写,易于部署和管理,适用于各种类型的 Web 应用。
Tomcat: Apache Tomcat 是一个开源的 Java Servlet 容器,用于运行 Java Web 应用。它是 Apache 软件基金会的一个项目,支持 Java Servlet、JavaServer Pages(JSP)等技术,并且可以与 Apache HTTP Server 或 Nginx 结合使用。
这些 Web 服务器各有特点,选择适合自己需求的服务器取决于项目的要求、性能需求、支持的技术栈以及个人偏好等因素。
WEB 服务协议
Web 服务协议是指在 Web 服务中用于通信和数据交换的协议。下面是一些常见的 Web 服务协议:
HTTP(Hypertext Transfer Protocol): HTTP 是 Web 服务中最常用的协议之一,它定义了客户端和服务器之间的通信规范。HTTP 使用请求-响应模型,客户端向服务器发送请求,并接收服务器返回的响应。HTTP 通常用于传输 HTML 页面、图片、样式表等静态资源,以及 JSON 或 XML 格式的数据。
HTTPS(HTTP Secure): HTTPS 是在 HTTP 协议基础上添加了加密和身份验证机制的安全通信协议。它通过使用 SSL/TLS 协议对通信进行加密,保护用户数据的安全性和隐私。HTTPS 在互联网上广泛用于安全性要求较高的网站和应用。
SOAP(Simple Object Access Protocol): SOAP 是一种基于 XML 的通信协议,用于在分布式环境中进行应用程序之间的通信。它定义了 XML 格式的消息结构和通信规范,支持复杂的数据类型和协议扩展。SOAP 主要用于构建企业级应用和 Web 服务。
REST(Representational State Transfer): REST 是一种基于 HTTP 协议设计的软件架构风格,用于构建可扩展的 Web 服务。RESTful API 使用 HTTP 方法(如 GET、POST、PUT、DELETE 等)对资源进行操作,并通过 URI 来唯一标识资源。RESTful API 通常使用 JSON 或 XML 格式来表示资源和交换数据。
GraphQL: GraphQL 是一种用于构建 API 的查询语言和运行时。与传统的 RESTful API 不同,GraphQL 允许客户端定义需要返回的数据结构,以减少网络请求次数和数据传输量。GraphQL 通常使用 HTTP 或 WebSocket 协议进行通信。
这些协议在不同的场景和需求中发挥着重要的作用,开发人员可以根据项目的需求和特点选择适合的协议来实现 Web 服务。
二. Apache 服务的搭建与配置
2.1 Apache 介绍
Apache 是一个开源的跨平台 Web 服务器软件,全称为 Apache HTTP Server。它是目前世界上最流行的 Web 服务器软件之一,由 Apache 软件基金会开发和维护。Apache 以其稳定性、可靠性、灵活性和强大的功能而闻名,被广泛用于搭建各种类型的网站和 Web 应用。
2.2 Apache安装
Apache的主程序名叫httpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y httpd
[root@localhost ~# systemctl start httpd
[root@localhost ~]# netstat -lntp | grep 80 #查看apache端口
tcp6 0 0 :::80 :::* LISTEN 2776/httpd
#端口80.可以改
启动
httpd -k start 或 systemctl start httpd
停止
httpd -k stop 或 systemctl stop httpd
重启
httpd -k restart 或 systemctl restart httpd
index.html:默认访问网站的主页名称
默认发布网站的目录:/var/www/html
2.3 Apache目录介绍
Apache的工作目录:
conf 存储配置文件
conf.d 存储配置子文件
logs 存储日志
modules 存储模块
run 存储Pid文件,存放的pid号码。是主进程号
认识主配置文件/etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd" #定义工作目录
Listen 80 #监听端口
Listen 192.168.2.8:80 指定监听的本地网卡 可以修改
User apache # 子进程的用户,有可能被人改称www账户
Group apache # 子进程的组
ServerAdmin root@localhost # 设置管理员邮件地址
DocumentRoot "/var/www/html" # 发布网站的默认目录,想改改这里。
IncludeOptional conf.d/*.conf # 包含conf.d目录下的所有*.conf配置文件
# 设置DocumentRoot指定目录的属性
<Directory "/var/www/html"> # 网站容器开始标识
Options Indexes FollowSymLinks # 找不到主页时,链接到网站目录以外,如测试页面
AllowOverride None # 对网站设置特殊属性:none不设置特殊属性,all允许
Require all granted # granted表示允许所有人访问,denied表示拒绝所有人访问
</Directory> # 容器结束
DirectoryIndex index.html # 定义主页文件,会自动访问该文件。
三. 访问控制
可以直接编辑apache主配置文件
修改如下代码,进行特定的访问控制:
#1.允许所有IP访问
#默认情况下不用任何修改就是所有人可以访问
<RequireAll>
Require all granted
</RequireAll>
#2.拒绝所有IP访问
<RequireAll>
Require all deined
</RequireAll>
#3.拒绝特定IP访问
<RequireAll>
Require not ip 192.168.226.129
Require all granted
</RequireAll>
#4.允许特定IP访问
<RequireAll>
Require ip 192.168.226.129
</RequireAll>
四. 修改默认网站发布目录
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
#在119行修改网站根目录为/www
DocumentRoot "/www"
#在131行把这个也对应的修改为/www
<Directory "/www">
[root@localhost ~]# mkdir /www #创建定义的网站发布目录
[root@localhost ~]# echo "这是新修改的网站根目录/www" > /www/index.html #创建测试页面
[root@localhost ~]# systemctl restart httpd #重启服务
五. 虚拟主机
虚拟主机是一种在单个物理服务器上托管多个域名或网站的技术。通过虚拟主机,可以在同一台服务器上运行多个独立的网站,并使它们彼此隔离,就像它们运行在不同的物理服务器上一样。这种技术可以最大程度地利用服务器资源,并提供更灵活和经济高效的解决方案。
5.1 基于域名的虚拟主机
[root@localhost ~]# cd /etc/httpd/conf.d/
#创建配置文件
[root@localhost conf.d]# vim test.conf
#修改配置文件为如下内容
# 定义第一个虚拟主机,监听所有地址的80端口
<VirtualHost *:80>
# 设置此虚拟主机的服务器名称为 www.ceshi.com
ServerName www.ceshi.com
# 设置此虚拟主机的文档根目录为 /var/www/ceshi
DocumentRoot /var/www/ceshi
# 配置对文档根目录的访问权限和指令覆盖
<Directory "/var/www/ceshi">
# 不允许 .htaccess 文件覆盖主配置文件中的指令
AllowOverride None
# 允许所有用户访问此目录
Require all granted
</Directory>
# 结束第一个虚拟主机的配置
</VirtualHost>
# 定义第二个虚拟主机,监听所有地址的80端口
<VirtualHost *:80>
# 设置此虚拟主机的服务器名称为 www.luzheng.com
ServerName www.luzheng.com
# 设置此虚拟主机的文档根目录为 /var/www/luzheng
DocumentRoot /var/www/luzheng
# 配置对文档根目录的访问权限和指令覆盖
<Directory "/var/www/luzheng">
# 不允许 .htaccess 文件覆盖主配置文件中的指令
AllowOverride None
# 允许所有用户访问此目录
Require all granted
</Directory>
# 结束第二个虚拟主机的配置
</VirtualHost>
#######################################################################
[root@qfedu.com conf.d]# mkdir /var/www/ceshi
[root@qfedu.com conf.d]# mkdir /var/www/luzheng
#创建测试页面
[root@localhost conf.d]# echo "这是个测试页面" > /var/www/ceshi/index.html
[root@localhost conf.d]# echo 'hello word!' > /var/www/luzheng/index.html
#重启服务
[root@localhost conf.d]# systemctl restart httpd
配置好apache配置文件,最后就要去windows中配置下域名拉
在windows电脑的C:\Windows\System32\drivers\etc这个目录下有个hosts的配置文件新增IP和对应的域名即可,一般要用管理员身份才可以进行编辑修改这个hosts文件。注意你添加的时候要把IP修改成你的电脑的IP。
192.168.226.100 www.ceshi.com
192.168.226.100 www.luzheng.com
注:如果配置都对的前提下打不开或者打开的不对,就用浏览器的无痕模式,或者切换浏览器尝试即可。
5.2 基于端口的虚拟主机
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf +43
#添加监听端口 如下图
[root@localhost ~]# cd /etc/httpd/conf.d/
#创建配置文件
[root@localhost conf.d]# vim test.conf
#修改配置文件为如下内容
<VirtualHost *:80>
ServerName www.ceshi.com
DocumentRoot /var/www/ceshi
<Directory "/var/www/ceshi">
AllowOverride All # 允许 .htaccess 文件中的指令覆盖主配置文件中的指令
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:81>
ServerName www.luzheng.com
DocumentRoot /var/www/luzheng
<Directory "/var/www/luzheng">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
[root@qfedu.com conf.d]# mkdir /var/www/ceshi
[root@qfedu.com conf.d]# mkdir /var/www/luzheng
#创建测试页面
[root@localhost conf.d]# echo "这是个测试页面" > /var/www/ceshi/index.html
[root@localhost conf.d]# echo 'hello word!' > /var/www/luzheng/index.html
#重启服务
[root@localhost conf.d]# systemctl restart httpd
5.3 基于 IP 地址的虚拟主机
使用ifconfig给一个网卡新增ip
ifconfig ens33:0 192.168.226.200
#这里的ens33:0是网络接口ens33的一个别名(也称为子接口)
#取消一个IP
ifconfig ens33:0 192.168.226.200 down
使用ip命令给一个网卡新增ip
ip a a 192.168.226.201/24 dev ens33
ip addr add 192.168.226.201/24 dev ens33 label ens33:1
#这里label ens33:0 是起得一个别名
#删除一个IP
ip addr del 192.168.226.201/24 dev ens33
[root@localhost ~]# vim /etc/httpd/conf.d/test.conf
<VirtualHost 192.168.226.200:80>
ServerName www.ceshi.com
DocumentRoot /var/www/ceshi
<Directory "/var/www/ceshi">
AllowOverride None # 不允许 .htaccess 文件覆盖主配置文件中的指令
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.226.201:81>
ServerName www.luzheng.com
DocumentRoot /var/www/luzheng
<Directory "/var/www/luzheng">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
[root@localhost ~]# systemctl restart httpd
可以配置域名解析,也可以不用配域名解析
如果用域名去访问,记得去windows中删除之前配置得域名,更新成新得IP,如图: