• 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服务器的安装与配置

    安装:

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

     配置:

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

     修改首页:

    1. [root@localhost ~]# vim /etc/httpd/conf/httpd.conf
    2. 修改 Listen 80 一行 为 Listen 8080
    3. 修改 DocumentRoot “/var/www/html“一行为 DocumentRoot "/home/www“
    4. 修改 一行为 /home/www">
    5. 修改 块 内 DirectoryIndex index.html 一行为 DirectoryIndex home.html

    打开目录权限 :

    1. chmod 755 /home/www
    2. chmod 644 /home/www/home.html

     重启:

     systemctl restart httpd
    

    配置基于端口的虚拟主机

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

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

    1. mkdir /home/www/8088
    2. mkdir /home/www/8089
    3. # 8088 对应的页面
    4. echo "8088 test" >> /home/www/8088/index.html
    5. # 8089 对应的页面
    6. echo "8089 test" >> /home/www/8089/index.html
    7. chmod 755 /home/www/8088
    8. chmod 755 /home/www/8089

    修改配置

    1. 恢复原来的主配置文件为默认,所有的虚拟主机配置,保存在专门的文件中
    2. cp /etc/httpd/conf/httpd.conf.bac /etc/httpd/conf/httpd.conf
    1. [root@nfs-server conf]# touch /etc/httpd/conf.d/myvhost.conf
    2. [root@nfs-server conf]# cat /etc/httpd/conf.d/myvhost.conf
    3. # match a ServerName or ServerAlias in any <VirtualHost> block.
    4. Listen 8088
    5. <VirtualHost *:8088>
    6. DocumentRoot "/home/www/8088"
    7. ServerName localhost
    8. ErrorLog "/var/log/httpd/host8088-error_log"
    9. CustomLog "/var/log/httpd/host8088-access_log" combined
    10. </VirtualHost>
    11. <Directory "/home/www/8088">
    12. AllowOverride None
    13. Require all granted
    14. </Directory>
    15. Listen 8089
    16. <VirtualHost *:8089>
    17. DocumentRoot "/home/www/8089"
    18. ServerName localhost
    19. ErrorLog "/var/log/httpd/host8089-error_log"
    20. CustomLog "/var/log/httpd/host8089-access_log" combined
    21. </VirtualHost>
    22. <Directory "/home/www/8089">
    23. AllowOverride None
    24. Require all granted
    25. </Directory>

    重启验证

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

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

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

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

    配置主机名解析记录

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

    修改配置文件

    /etc/httpd/conf/httpd.conf 加一行
    ServerName localhost
    1. [root@nfs-server conf]# cat /etc/httpd/conf.d/mhost.conf
    2. <VirtualHost *:80>
    3. DocumentRoot "/vhost/servera"
    4. ServerName servera.example.com
    5. ServerAlias servera
    6. ErrorLog "/var/log/httpd/servera-error_log"
    7. CustomLog "/var/log/httpd/servera-access_log" combined
    8. </VirtualHost>
    9. <Directory "/vhost/servera">
    10. AllowOverride None
    11. Require all granted
    12. </Directory>
    13. <VirtualHost *:80>
    14. DocumentRoot "/vhost/serverb"
    15. ServerName serverb.example.com
    16. ErrorLog "/var/log/httpd/serverb-error_log"
    17. CustomLog "/var/log/httpd/serverb-access_log" combined
    18. </VirtualHost>
    19. <Directory "/vhost/serverb">
    20. AllowOverride None
    21. Require all granted
    22. </Directory>

    重启测试

    systemctl restart httpd

    动态内容和CGI

    常见支持动态内容解析的 Web 架构通常包括以下组件:

    1. Web 服务器:负责接收客户端的请求并返回响应,通常使用 Apache、Nginx 等流行的 Web 服务 器。

    2. 应用服务器:负责处理动态内容生成的逻辑,执行程序代码,并生成最终的 HTML 页面或其他格 式的响应。常见的应用服务器包括: PHP:PHP 是一种广泛使用的服务器端脚本语言,通常与 Apache 或 Nginx 搭配使用,通过 解释 PHP 脚本来生成动态内容。 Python:Python 也是一种常用的服务器端脚本语言,常用的 Web 框架如 Django、Flask 等 可以用来处理动态内容。 Node.js:Node.js 是基于 JavaScript 的服务器端运行环境,可以用于构建高性能的动态内容 应用程序。 Java:Java 可以通过 Java Servlet、JSP 等技术来处理动态内容生成。

    3. 数据库:用于存储和管理动态内容所需的数据,常见的数据库包括: MySQL:MySQL 是一种流行的关系型数据库管理系统,常用于存储和管理网站的数据。 PostgreSQL:PostgreSQL 是另一种开源的关系型数据库管理系统,具有更强大的功能和扩 展性。 MongoDB:MongoDB 是一种非关系型数据库,适用于存储和处理非结构化或半结构化的数 据。

    处理过程:

    1. 用户发送 HTTP 请求: 用户在浏览器中输入 URL 或者点击链接,向 Web 服务器发送 HTTP 请 求。

    2. Apache 接收请求: Apache Web 服务器接收到用户的 HTTP 请求。

    3. 请求路由: Apache 根据请求的 URL 路径和配置的虚拟主机配置,将请求路由到相应的网站根目 录或者指定的目录。

    4. 处理静态资源: 如果请求的是静态资源(如 HTML、CSS、JavaScript、图片等),Apache 直接 从文件系统中读取并返回给客户端。

    5. 动态内容请求: 如果请求的是动态内容(如 PHP 脚本),Apache 将请求转发给 PHP 解释器。

    6. PHP 解释器处理请求: PHP 解释器接收到请求后,会执行相应的 PHP 脚本,根据脚本中的逻辑 生成动态的 HTML 内容。

    7. 与数据库交互: 如果 PHP 脚本需要从数据库中读取或者写入数据,它会通过 MySQL(或 MariaDB)客户端库与 MySQL 数据库服务器建立连接,并执行相应的 SQL 查询或者操作。

    8. 生成响应: PHP 脚本执行完毕后,将生成的 HTML 内容以及其他资源(如图片、CSS、JavaScript 等)返回给 Apache。

    9. Apache 返回响应: Apache 将 PHP 脚本生成的 HTML 内容以及其他资源打包成 HTTP 响应,并 发送给客户端浏览器。

    10. 浏览器渲染页面: 客户端浏览器接收到 HTTP 响应后,根据 HTML 内容解析和渲染页面,呈现给 用户。

    安装并启动所有的程序

    1. [root@webserver ~]# yum -y install httpd php php-fpm mariadb-server
    2. [root@webserver ~]# systemctl start php-fpm mariadb httpd
    3. [root@webserver ~]# systemctl enable php-fpm mariadb httpd

    调试web服务器可以传递PHP脚本的运行结果给客户端

    1. # 编写一个测试文件,在默认的主页目录下
    2. [root@webserver ~]# vim /var/www/html/index.php
    3. phpinfo();
    4. ?>

     

    配置一个可以连接数据库的数据库用户,并通过PHP语言编写连接数据库的测试脚本

    部署Discuz(一个PHP语言编写的论坛网站)

  • 相关阅读:
    FS4067 SOP8 5V输入两节锂电池升压型充电管理芯片
    Javascript方法call、apply、bind的解析与实现
    【计算机网络】初识网络
    鸿蒙即将抛弃Android,你还不来学习一下?
    【计算机网络】学习指南及导论
    QTabWidget 类 (选项卡部件)
    print() 函数
    【Java程序员面试专栏 算法训练篇】二叉树高频面试算法题
    小红书发布2022年美妆用户洞察报告,近八成用户选它
    LeetCode Cookbook 数组习题(5)
  • 原文地址:https://blog.csdn.net/weixin_55731208/article/details/138132902