WEB服务的配置与使用 Apache HTTPD

2024-04-24 16:12

本文主要是介绍WEB服务的配置与使用 Apache HTTPD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务端:服务器将发送由状态代码和可选的响应正文组成的 响应 。状态代码指示请求是否成功,如果不成功,则指示存在哪种错误情况。这告诉客户端应该如何处理响应。较为流星的web服务器程序有: Apache HTTP Server Nginx
客户端:客户端(例如,Web 浏览器)使用指定的协议连接到服务器(例如,您的 Apache HTTP 服务器),并使用 URL 路径发出资源 请求。 一般来说,最常见的 web 客户端就是浏览器。
HTTP 协议 Web 客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫做 HTTP Hypertext Transfer Protocol ,超文本传输协议)。 HTTP 协议由两部分程序实现:一个客 户端程序和一个服务器程序,它们运行在不同的端系统当中,通过交换HTTP 报文进行会话。 HTTP 定义了这些报文的格式以及客户端和服务器是如何进行报文交换的。

Web 访问过程:

1. 浏览器发送 HTTP 请求:浏览器将用户输入的网址转换为一个 HTTP 请求。该请求包括请求的方法(如 GET、POST 等)以及要访问的资源的 URL。
2. 服务器处理请求:服务器接收到浏览器发送的请求后,根据请求的 URL 和其他信息,定位到相应的资源(例如 HTML 页面、图像、视频等)。
3. 服务器发送响应:一旦服务器找到了请求的资源,它会生成一个 HTTP 响应,并将资源的内容包含在响应中。这个响应包括状态码(如 200 表示成功、404 表示未找到资源等)和相应的内容。
4. 浏览器接收响应:浏览器接收到服务器发送的响应后,会解析响应并根据其中的内容执行相应的操作。如果是 HTML 页面,浏览器会解析其中的标记,并加载其中引用的其他资源,如图像、样式表和脚本。
5. 显示页面内容:一旦浏览器接收到页面的全部内容并解析完成,它会将页面的内容显示给用户。这包括文本、图像、视频和其他媒体内容。

HTTP请求报文(请求行、请求头、请求体)以及响应报文:

http://t.csdnimg.cn/GtEJwicon-default.png?t=N7T8http://t.csdnimg.cn/GtEJw

补充:

请求报文(请求方法)——HTTP请求方法是指客户端与服务器通信时,客户端所请求执行的动作。常见的HTTP请求方法包括:
GET:请求获取指定资源的表示形式。使用GET方法,客户端请求服务器发送某个资源。
POST:向指定资源提交数据,用于处理表单提交、文件上传等操作。
PUT:向指定资源位置上传其最新内容,用于更新资源。
DELETE:请求服务器删除指定资源。
HEAD:请求获取与实体相对应的头部信息,用于获取资源的元数据。
OPTIONS:请求查询服务器支持的HTTP方法。
TRACE:请求服务器回显收到的请求消息,用于测试或诊断。
响应状态码 :响应报文(响应状态码)——HTTP响应状态码是服务器向客户端返回的3位数字,用于表示对请求的处理结果。常见的HTTP响应状态码包括:
200 OK:请求成功。
301 Moved Permanently:永久重定向,请求的资源已经被分配了新的URL。
400 Bad Request:客户端发送的请求有错误,服务器无法理解。
401 Unauthorized:请求要求身份验证,需要提供有效的用户名和密码。
404 Not Found:服务器未找到请求的资源。
500 Internal Server Error:服务器内部错误,无法完成请求。
503 Service Unavailable:服务器暂时无法处理请求,通常是由于维护或过载。

Apache HTTPD服务器的安装与配置

安装:

[root@webserver ~]# yum -y install httpd
[root@webserver ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service →/usr/lib/systemd/system/httpd.service.
[root@webserver ~]# echo test for apache httpd > /var/www/html/index.html
[root@webserver ~]# cat /var/www/html/index.html
test for apache httpd
[root@webserver ~]# curl 127.0.0.1
test for apache httpd
[root@webserver ~]# curl -I 127.0.0.1
HTTP/1.1 200 OK     //状态码为 200 说明服务端 //为客户端的访问提供了响应代码为200的
响应
Date: Sun, 21 Apr 2024 08:49:55 GMT
Server: Apache/2.4.37 (Red Hat Enterprise Linux)
Last-Modified: Sun, 21 Apr 2024 08:49:23 GMT
ETag: "16-6169765c97f13"
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=UTF-8

 配置:

/etc/httpd/conf/httpd.conf
[root@webserver ~]# grep -v '#' /etc/httpd/conf/httpd.conf | grep -v '^$'
ServerRoot "/etc/httpd" # 使用相对路径引入文件到主配置文件时,相对路径+此处的路径
来形成一个从/开始的绝对路径
Listen 80                   # 监听TCP 80端口,可以使用Ip地址:端口的当时修改# 可以配置多个Listen监听多个不同的端口,但是重复的
Listen配置将导致HTTPD无法启动
Include conf.modules.d/*.conf# 所有/etc/httpd/conf.modules.d/目录下.conf结尾的文件都 # 导入到/etc/httpd/conf/httpd.conf
User apache                 # 程序用户为apache
Group apache                # 程序组账号为apache
ServerAdmin root@localhost # 服务器管理员邮箱
<Directory /> 
# <Directory>块设置指定目录以及所有后代目录的配置指令。
# <Directory>块中的常见指令包括以下几种:
# Allow0verride None:对于按目录的配置设置,将不会查阅
# .htaccess 文件。将其设置为任何其他设置都将导致
# 性能损失以及可能的安全后果。
# Require A11 Denied:httpd 将拒绝提供此目录的内容,
# 当客户端请求时,将返回HTTP/1.1403 Forbidden错误。
# Require A11 Granted:允许访问此目录。对普通内容树之
# 外的目录设置此选项可能会产生安全影响。
# 0ptions[[+|-]0PTIONS]...:为某个目录开启(或关闭)
# 特定选项。例如,如果请求了某个目录并且该目录中不存在
# index.htm1文件,则Indexes 选项将显示一个目录列表。
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"            #此设置确定 httpd 将搜索请求文件的位置。重要的一点是,# 此处指定的目录可以由httpd(常规权限和 SELinux)读取# ,并且对应的 <Directory>块已声明为允许访问。
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>                    # 仅当加载指定扩展模块时,此块才会应用其内容。在此情况下,# 会加载dir_module,因此DirectoryIndex 指令可用于# 指定在请求目录时应使用的文件。
DirectoryIndex index.html
</IfModule>
<Files ".ht*">                           # 类似于Directory,
Require all denied
</Files>
ErrorLog "logs/error_log"                # 错误日志
LogLevel warn
<IfModule log_config_module>             # 指定了几种日志格式,分别是combined、common、
combinedio;默认场景下均使用combined这种日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{UserAgent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8           # 此设置向 text/plain和 text/htm1 资源的# Content-Type 报头中添加 charset 部分。# 可以使用 AddDefaultCharset 0ff将其禁用
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on                 # 启用 EnableSendfile 以提高文件传输的性能和效率。
IncludeOptional conf.d/*.conf     # 所有/etc/httpd/conf.d/目录下.conf结尾的文件都# 导入到/etc/httpd/conf/httpd.conf
修改配置文件,改变 httpd 的一些默认配置:
监听的端口号
修改默认的首页文件保存目录
对于防火墙和 selinux 不熟悉的建议关闭防火墙和修改 SELinux 为宽容模式

 修改首页:

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf修改 Listen 80 一行 为 Listen 8080
修改 DocumentRoot “/var/www/html“一行为 DocumentRoot "/home/www“
修改<Directory “/var/www/html”> 一行为 <Directory "/home/www">
修改 <IfModule dir_module> 块 内 DirectoryIndex index.html 一行为 DirectoryIndex home.html

打开目录权限 :

 chmod 755 /home/wwwchmod 644 /home/www/home.html

 重启:

 systemctl restart httpd

配置基于端口的虚拟主机

要创建基于 8088 8089 两个不同端口号的虚拟主机,要求不同的虚拟主机对应的主目录不同,默认页面的内容也不同

创建目录、文件,并赋予权限755

 mkdir /home/www/8088mkdir /home/www/8089
# 8088 对应的页面echo "8088 test" >> /home/www/8088/index.html
# 8089 对应的页面echo "8089 test" >> /home/www/8089/index.htmlchmod 755   /home/www/8088
chmod 755   /home/www/8089

修改配置

恢复原来的主配置文件为默认,所有的虚拟主机配置,保存在专门的文件中
cp  /etc/httpd/conf/httpd.conf.bac  /etc/httpd/conf/httpd.conf
[root@nfs-server conf]# touch /etc/httpd/conf.d/myvhost.conf
[root@nfs-server conf]# cat /etc/httpd/conf.d/myvhost.conf # match a ServerName or ServerAlias in any <VirtualHost> block.
Listen 8088
<VirtualHost *:8088>
DocumentRoot "/home/www/8088"
ServerName localhost
ErrorLog "/var/log/httpd/host8088-error_log"
CustomLog "/var/log/httpd/host8088-access_log" combined
</VirtualHost>
<Directory "/home/www/8088">
AllowOverride None
Require all granted
</Directory>
Listen 8089
<VirtualHost *:8089>
DocumentRoot "/home/www/8089"
ServerName localhost
ErrorLog "/var/log/httpd/host8089-error_log"
CustomLog "/var/log/httpd/host8089-access_log" combined
</VirtualHost>
<Directory "/home/www/8089">
AllowOverride None
Require all granted
</Directory>

重启验证

[root@nfs-server conf]# systemctl restart httpd

基于主机名的虚拟主机配置

创建目录、文件,并赋予权限755

[root@nfs-server conf]# mkdir -p /vhost/server{a,b}
[root@nfs-server conf]# echo servera > /vhost/servera/index.html
[root@nfs-server conf]# echo serverb > /vhost/serverb/index.html
[root@nfs-server conf]# chmod 755 /vhost/servera
[root@nfs-server conf]# chmod 755 /vhost/serverb

配置主机名解析记录

[root@nfs-server conf]#  echo '192.168.68.10 servera.example.com servera' >>/etc/hosts
[root@nfs-server conf]#  echo '192.168.68.10 serverb.example.com serverb' >>/etc/hosts

修改配置文件

/etc/httpd/conf/httpd.conf 加一行
ServerName localhost
[root@nfs-server conf]#  cat /etc/httpd/conf.d/mhost.conf<VirtualHost *:80>
DocumentRoot "/vhost/servera"
ServerName servera.example.com 
ServerAlias servera 
ErrorLog "/var/log/httpd/servera-error_log"
CustomLog "/var/log/httpd/servera-access_log" combined
</VirtualHost><Directory "/vhost/servera">
AllowOverride None
Require all granted
</Directory><VirtualHost *:80>
DocumentRoot "/vhost/serverb"
ServerName serverb.example.com
ErrorLog "/var/log/httpd/serverb-error_log"
CustomLog "/var/log/httpd/serverb-access_log" combined
</VirtualHost><Directory "/vhost/serverb">
AllowOverride None
Require all granted
</Directory>

重启测试

systemctl restart httpd

这篇关于WEB服务的配置与使用 Apache HTTPD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932209

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华