Linux——web动态内容和CGI

ops/2024/9/25 2:09:28/

一、动态内容

配置动态内容一般出于下面这几点的考虑:
1. 实时数据更新:动态站点可以根据用户的请求和操作实时生成内容,从而确保站点的数据和内容 始
终保持最新。这对于需要频繁更新或者与用户交互的网站非常重要,比如社交媒体、电子商务平台
等。
2. 个性化体验 :动态站点可以根据用户的个性化需求或者行为,动态生成适合用户的内容,从而提供
更好的用户体验。例如,根据用户的兴趣爱好推荐相关内容,或者根据用户的地理位置提供定制化
的信息。
3. 交互性 :动态站点可以通过用户的输入或者操作生成动态的响应,从而实现与用户的实时交互。这 种交互性对于用户参与性高、需要用户输入或者响应的网站非常重要,比如论坛、博客、在线调查 等。
4. 灵活性和可扩展性 :动态站点通常采用一些动态网页技术(如 PHP Python Node.js 等),这些 技术可以根据需求轻松地实现功能扩展和定制开发,使得网站更具灵活性和可扩展性。
5. 数据管理和维护 :动态站点通常使用数据库来存储和管理数据,这使得数据的管理和维护更加方便 和高效。通过数据库,网站管理员可以轻松地对数据进行增删改查,从而实现对站点内容的有效管 理。常见支持动态内容解析的 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 内容解析和渲染页面,呈现给用户。

二、CGL

CGI Common Gateway Interface ,通用网关接口)是一种标准的网络协议,用于在 Web 服务器和外部程序之间传递数据。它定义了一种通信协议,允许 Web 服务器调用外部程序来处理客户端的请求, 并将处理结果返回给客户端。
CGI 的作用主要包括以下几个方面:
1. 动态内容生成 CGI 允许 Web 服务器调用外部程序来生成动态内容,比如根据用户请求动态生成
HTML 页面、处理表单提交、执行数据库查询等。这使得 Web 页面可以根据用户的输入或者其他
条件来动态生成内容,实现个性化和交互性。
2. 与外部程序的交互 CGI 允许 Web 服务器与外部程序进行交互,从而实现一些复杂的业务逻辑。
通过调用外部程序, Web 服务器可以执行各种任务,比如文件操作、图像处理、数据处理等,从
而丰富了 Web 页面的功能和内容。
3. 与其他服务器的集成 CGI 允许不同的服务器之间进行通信和集成。通过 CGI Web 服务器可以
调用其他服务器上的程序来执行特定的任务,比如调用邮件服务器发送邮件、调用数据库服务器查
询数据等。
4. 实现网站功能扩展 CGI 提供了一种灵活的方式来扩展网站的功能。通过编写自定义的 CGI
序,开发者可以实现各种自定义的功能和服务,从而满足网站的特定需求和业务逻辑。

三、实验

1. 安装并启动所有的程序
2. 调试 web 服务器可以传递 PHP 脚本的运行结果给客户端
3. 配置一个可以连接数据库的数据库用户,并通过 PHP 语言编写连接数据库的测试脚本
4. 部署 Discuz (一个 PHP 语言编写的论坛网站)
# 阶段1
[root@webserver ~]# yum -y install httpd php php-fpm mariadb-server
[root@webserver ~]# systemctl start php-fpm mariadb httpd
[root@webserver ~]# systemctl enable php-fpm mariadb httpd
# 阶段2
# 因为使用YUM安装,其实不需要太多得配置,使用默认配置即可
# 主要会在HTTP的配置下增加一些新的配置文件
[root@webserver ~]# ll /etc/httpd/conf.d/php.conf
-rw-r--r--. 1 root root 1618 Nov 7 2019 /etc/httpd/conf.d/php.conf
# 主要生效内容如下:
[root@webserver ~]# grep -v '^$' /etc/httpd/conf.d/php.conf | grep -v '#'
<Files ".user.ini"> # 指定了针对名为 ".user.ini" 的文件进行的配置
Require all denied #拒绝所有用户对 ".user.ini" 文件的访问,一般.ini文件是PHP的配置文件
</Files>
AddType text/html .php # 将文件类型为 ".php" 的文件视为 text/html 类型,告诉服务器如何处理这种类型的文件,这也是必须添加的内容
DirectoryIndex index.php #设置默认的目录索引文件为 "index.php",即当访问一个目录时,如果没有指定具体文件名,服务器将尝试返回 "index.php",这是必须添加的内容
<IfModule !mod_php5.c> #如果 mod_php5 模块未加载,则执行以下配置
<IfModule !mod_php7.c> #如果 mod_php7 模块未加载,则执行以下配置。
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 #设置环境变量
HTTP_AUTHORIZATION,用于传递授权信息
<FilesMatch \.(php|phar)$> #对于以 ".php" 或 ".phar" 结尾的文件,执行以下配置
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" #设置处理这些文件的处理程为 FastCGI 代理,指向 PHP-FPM 的 Unix 套接字
</FilesMatch>
</IfModule> #结束对 mod_php7 模块是否加载的条件判
</IfModule> #结束对 mod_php5 模块是否加载的条件判断。
<IfModule mod_php7.c> #如果 mod_php7 模块已加载,则执行以下配置
<FilesMatch \.(php|phar)$> # 对于以 ".php" 或 ".phar" 结尾的文件,执行以下配置
SetHandler application/x-httpd-php #设置处理这些文件的处理程序为
mod_php7
</FilesMatch>
php_value session.save_handler "files" # 设置 PHP session 数据的保存路径为
"/var/lib/php/session"
php_value session.save_path "/var/lib/php/session" #设置 PHP
session 数据的保存路径为 "/var/lib/php/session"
php_value soap.wsdl_cache_dir "/var/lib/php/wsdlcache" #设置 SOAP 的
WSDL 缓存目录为 "/var/lib/php/wsdlcache"
</IfModule>
# 编写一个测试文件,在默认的主页目录下
[root@webserver ~]# vim /var/www/html/index.php
<?php
phpinfo();
?>
测试:
打开任意浏览器,输入 http://IP 地址 /index.php, 出现类似下面的图片说明配置成功。
继续在服务器上配置
配置数据库用户
[root@bogon keys]# mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.17-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
MariaDB [(none)]> create database webapp; # 创建数据库
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> grant all on webapp.* to appuser@'192.168.131.%'
identified by 'redhat'; # 创建用户并对数据库授权
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> exit
Bye
编写php脚本连接数据库
[root@webserver ~]# yum -y install php-mysqlnd
[root@webserver ~]# systemctl restart php-fpm
[root@webserver ~]# vim /var/www/html/db_con.php
<?php
// MySQL 服务器信息
$servername = "192.168.110.131";
$username = "appuser"; // 替换刚创建的数据库用户名
$password = "redhat"; // 替换为刚创建的数据库密码
$dbname = "webapp"; // 替换为刚创建的数据库名称
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检查连接是否成功
if (!$conn)
echo "failed \n";
else
echo "connect to db \n";
// 关闭连接
$conn->close();
?>

到这里就完成了架构的基本调试,下面来安装一个测试论坛应用
[root@webserver ~]# yum -y install git -core
[root@webserver ~]# git clone https://gitee.com/Discuz/DiscuzX.git
[root@webserver ~]# cp -rf DiscuzX/upload/ /var/www/html/luntan
[root@webserver ~]# chown -R apache /var/www/html/luntan/
在浏览器中输入下面的地址 http://192.168.110.131/luntan/install 进入下面这个界面

http://www.ppmy.cn/ops/25132.html

相关文章

vue3中的reactive、readonly和shallowReactive

在 Vue 3 中&#xff0c;reactive、readonly 和 shallowReactive 是用于创建响应式对象的函数&#xff0c;它们可以帮助管理组件状态和数据流。下面是它们的详细介绍以及相应的代码示例&#xff1a; reactive: reactive 函数用于创建一个完全响应式的对象&#xff0c;当对象的属…

# IntelliJ IDEA 中 springboot 启动类 SpringApplication.run 报红分析

IntelliJ IDEA 中 springboot 启动类 SpringApplication.run 报红分析 一、原因分析&#xff1a;通常 SpringApplication.run 报红&#xff0c;可能是由以下几种原因造成的&#xff1a; 1、项目的主配置文件中 pom.xml 可能没有导入相关依赖。 2、方法参数错误&#xff1a;S…

table表格导出为excel文件并设置样式

table表格导出为excel文件并设置样式 安装xlsx、xlsx-style-medalsoft 的 npm 包&#xff1a; npm i xlsx xlsx-style-medalsoft设置全局&#xff1a; Vue.prototype.$XLSX XLSX; // 设置全局 Vue.prototype.$XLSXStyle XLSXStyle; // 设置全局具体代码实现&#xff1a; …

利用Python开发一个上传文件的服务

准备工作&#xff1a; 1、安装uvicorn&#xff0c;利用其来作为web服务器 2、安装Starlette&#xff0c;利用其来作为web开发框架 3、安装python-multipart&#xff0c;让其支持form表达形式的文件上传 4、postman&#xff1a;文件上传的发起者&#xff0c;这样我们就不用写…

Visual Studio C++ 示例

Visual Studio C++ 示例 项目2023/06/163 个参与者反馈 本文内容 GitHub 上的存档 C++ 示例ATL 示例CLR 和语言示例 - Windows 窗体COM 事件示例显示另外 13 个 Visual Studio C++ 示例可在 Web 上找到。 Microsoft 已生成许多 C++ 示例,这些示例演示了跨多种技术的不同功能…

React、React Router 和 Redux 常用Hooks 总结,提升您的开发效率!

Hooks 是 React 16.8 中引入的一种新特性&#xff0c;它使得函数组件可以使用 state 和其他 React 特性&#xff0c;从而大大提高了函数组件的灵活性和功能性。下面分别总结React、React Router 、Redux中常用的Hooks。 常用Hooks速记 React Hooks useState&#xff1a;用于…

MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian)

MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian) clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;% 读取图像 image imread(lena.png); % 转换为灰度图像 gray_image rgb2gray(image); % 转换为double类型以进行计算…

ADB 命令获取Android 设备的屏幕分辨率和屏幕像素密度

1. 获取屏幕分辨率和像素密度 获取 Android 设备屏幕分辨率&#xff1a; adb shell wm size Physical size: 1440x3120 获取android设备屏幕密度(DPI)&#xff1a; adb shell wm density Physical density: 560 打印屏幕相关的详细信息&#xff1a; adb shell dumpsys wi…