当前位置: 首页 > news >正文

Linux系统:配置Apache支持CGI(Ubuntu)

在这里插入图片描述

配置Apache支持CGI

根据以下步骤配置,实现Apache支持CGI

  1. 安装Apache:
    可参照文章: Ubuntu安装Apache教程。
  2. 执行以下命令,修改Apache2配置文件000-default.conf:
sudo vim /etc/apache2/sites-enabled/000-default.conf,

在这里插入图片描述
将标注行取消注释,并更新保存

  1. 执行以下命令,修改Apache2配置文件serve-cgi-bin.conf:
sudo vim /etc/apache2/conf-available/serve-cgi-bin.conf

在这里插入图片描述

<IfModule mod_alias.c><IfModule mod_cgi.c>Define ENABLE_USR_LIB_CGI_BIN</IfModule><IfModule mod_cgid.c>Define ENABLE_USR_LIB_CGI_BIN</IfModule><IfDefine ENABLE_USR_LIB_CGI_BIN>##ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/  (注释掉默认的)ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/##<Directory "/usr/lib/cgi-bin"> (注释掉默认的)<Directory "/var/www/html/cgi-bin/">AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatchRequire all grantedAddHandler cgi-script cgi</Directory></IfDefine>
</IfModule>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 替换成ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/
/usr/lib/cgi-bin 替换成/var/www/html/cgi-bin/
并在</Directory >中添加AddHandler cgi-script cgi

并更新保存。

  1. 执行以下命令,修改Apache2配置文件cgid.load:
sudo vim /etc/apache2/mods-available/cgid.load

在这里插入图片描述

AddHandler cgi-script .cgi .pl .py .sh

插入红色标注代码 AddHandler cgi-script .cgi .pl .py .sh

并更新保存

  1. 执行以下命令,创建一个cgid.load的链接文件:
sudo ln -s /etc/apache2/mods-available/cgid.load /etc/apache2/mods-enabled/cgid.load
  1. 执行以下命令,重启Apache服务:
sudo /etc/init.d/apache2 restart
  1. 执行以下命令,新建cgi-bin文件夹:
sudo mkdir /var/www/html/cgi-bin/
  1. 进行/var/www/html/cgi-bin/ 目录下 创建CGI测试程序,测试CGI程序运行环境:
    (1)新建一个文件 helloworld.c , 并输入下述内容
    在这里插入图片描述
#include<stdio.h>
int main(){printf("Content-Type: text/html\n\n");printf("hello world");printf("第一个apache2配置下的cgi运行程序");return 0;}

(2)执行以下命令,编译源文件:

sudo gcc /var/www/html/cgi-bin/helloworld.c -o /var/www/html/cgi-bin/hello2.cgi

注意:执行这一步需要安装gcc依赖包。
执行成功后 在当前目录下生成一个hello2.cgi的目标文件。
/var/www/html/cgi-bin/hello2.cgi其中hello2.cgi为生产目标文件名,可以带后缀,可以不带后缀,带后缀作以提示功能,告诉使用者这是一个编译后的cgi文件。

(3)执行以下命令,修改文件权限:(如果可以直接执行第四步 并成功输出结果,可以说明文件权限是默认配置好的,可以不进行其他配置)(为什么设置文件权限,和Linux的权限管理有关,可查看下方链接)

sudo chmod 755 /var/www/html/cgi-bin/hello2.cgi

(4)在/var/www/html/cgi-bin/目录下执行以下命令,编译源文件:

./hello2.cgi

终端输出打印结果
在这里插入图片描述

  1. 页面测试:
    浏览器输入网址:http://localhost/cgi-bin/hello2.cgi ,(localhost可替换成服务器的IP) 在页面可以看到如下内容,表明CGI环境配置成功。

在这里插入图片描述

因为字符集问题,所以中文变成了乱码,但是只要页面加载成功,说明我们CGI环境配置成功。

  1. 注意:如果通过非root用户启动apache2, 执行 /var/www/html/cgi-bin 目录下的sh文件失败,则修改 envvars 文件,执行命令:sudo vim /etc/apache2/envvars, 将原标记处 www-data 修改为当前执行的用户及其对应的用户组,保存后,执行命令:/etc/init.d/apache2 restart , 重启apache2。重启成功后,再去浏览器输入地址访问即可。
    在这里插入图片描述

envvars文件默认配置如上图所示,如果 1-9步骤 均无 报错。则可忽略第十步骤。

相关链接:

1.Linux系统:Linux中ln命令用法
2.Ubuntu安装Apache教程
3.GCC编译器介绍
4.为什么CGI程序的权限必须是755

相关文章:

Linux系统:配置Apache支持CGI(Ubuntu)

配置Apache支持CGI 根据以下步骤配置&#xff0c;实现Apache支持CGI 安装Apache&#xff1a; 可参照文章&#xff1a; Ubuntu安装Apache教程。执行以下命令&#xff0c;修改Apache2配置文件000-default.conf&#xff1a; sudo vim /etc/apache2/sites-enabled/000-default.con…...

qt 序列化和反序列化

序列化&#xff1a;QByteArray buffer; QBuffer bufferDevice(&buffer); bufferDevice.open(QIODevice::WriteOnly); QDataStream out(&bufferDevice); out.setVersion(QDataStream::Qt_5_13); 反序列化&#xff1a; void deserialize(const QByteArray &buffer) {…...

java实现文件变动监听

在文件的内容发生变动时&#xff0c;应用可以感知这种变种&#xff0c;并重新加载文件内容&#xff0c;更新应用内部缓存 实现 轮询&#xff1a;定时器Timer&#xff0c;ScheduledExecutorService 判断文件修改&#xff1a;根据java.io.File#lastModified获取文件的上次修改时…...

Maven的使用

1. Maven 简介 https://maven.apache.org/ Maven 是一个强大的项目管理和构建工具&#xff0c;广泛应用于 Java 项目中&#xff0c;旨在简化项目的依赖管理、构建、测试、部署等工作。Maven 主要通过定义 pom.xml&#xff08;Project Object Model 文件&#xff09;来管理项…...

C++开发进阶1:C++编程命名规范

进行C开发时最基础且最重要的是命名规范&#xff0c;掌握良好的命名规范能增加代码的可读性。 认识文件&#xff1a; .cpp&#xff1a;C 源文件. .h或.hpp&#xff1a;C 头文件 .tpp模板实现文件&#xff08;如果模板定义和实现分开&#xff09; .inl内联文件&#xff0c;…...

Android 图片相识度比较(pHash)

概述 在 Android 中&#xff0c;要比对两张 Bitmap 图片的相似度&#xff0c;常见的方法有基于像素差异、直方图比较、或者使用一些更高级的算法如 SSIM&#xff08;结构相似性&#xff09;和感知哈希&#xff08;pHash&#xff09;。 1. 基于像素的差异比较 可以逐像素比较…...

Gitlab 完全卸载–亲测可行

1、停止gitlab gitlab-ctl stop2.卸载gitlab&#xff08;注意这里写的是gitlab-ce&#xff09; rpm -e gitlab-ce 3、查看gitlab进程 ps aux | grep gitlab 4、杀掉第一个进程&#xff08;就是带有好多.............的进程&#xff09; 5、删除所有包含gitlab文件 find / …...

gitlab操作和管理

详细的说明下这几条指令&#xff1a; Git global setup git config --global user.name “” git config --global user.email “” Create a new repository git clone ssh://git12/letect.git cd vlm-event-secondary-detect git switch -c main touch README.md git add RE…...

ctfshow-web入门-反序列化(web254-web258)

目录 1、web254 2、web255 3、web256 4、web257 5、web258 1、web254 传入符合要求的用户名和密码即可&#xff1a; ?usernamexxxxxx&passwordxxxxxx 拿到 flag&#xff1a;ctfshow{e4795ccd-6bff-44b6-a15c-6c679d802e61} 2、web255 整体逻辑代码和上一道差不多 新…...

repo 命令大全详解(第十一篇 repo init)

repo forall 命令用于在指定的项目上执行给定的命令&#xff0c;非常适合批量操作。 参数分类及解释 基本参数 [<project>...]: 可选&#xff0c;指定要操作的项目。如果不指定&#xff0c;则对所有项目执行命令。 示例: repo forall my_project -c "git status&q…...

ComfyUI | 全新ComfyUI前端操作指南:提升你的工作速度!

随着WebUI基本停更&#xff0c;越来越多的AI创作者转向了ComfyUI。 ComfyUI最大的优势是简洁、高效、占用显存低&#xff0c;工作流模式虽然有一点入门难度&#xff0c;但一旦上手&#xff0c;操作非常舒适。 由于原Stable Diffusion团队的参与&#xff0c;ComfyUI的易用度也…...

nginx解决非人类使用http打开的443,解决网安漏扫时误扫443端口带来的问题

一、问题描述 正常访问https的站点时&#xff0c;使用网址https://www.baidu.com&#xff0c;但会有一种错误的访问请求http://www.baidu.com:443&#xff0c;一般都是非人类所为&#xff0c;如漏洞扫描工具&#xff0c;那么请求以后带来的后果是个错误页面 400 Bad Request T…...

黑马 | Reids | 基础篇

黑马reids基础篇 文章目录 黑马reids基础篇一.初始Redis1.1SQL 和 NoSql的区别1.1.1结构化和非结构化1.1.2关联和非关联1.1.3查询方式1.1.4 事务1.1.5总结 1.2 认识Redis1.3 Redis安装启动默认启动&#xff1a;后台启动&#xff1a;开机自启 1.4 Redis客户端1.4.1.Redis命令行客…...

SAP-换登录界面图片

SMW0 二、SM30 &#xff08;将value值删除&#xff0c;登录图片恢复默认&#xff09; 重新登录&#xff0c;更改成功。...

移动 Web核心笔记(二)

空间转换 空间&#xff1a;是从坐标轴角度定义的 X 、Y 和 Z 三条坐标轴构成了一个立体空间&#xff0c;Z 轴位置与视线方向相同。 空间转换也叫 3D转换 属性&#xff1a;transform 平移 /*单独设置 z轴效果不明显*/ transform: translate3d(x, y, z); transform: translateX(…...

MySQL创建和管理表

1. 基础知识 存储数据是处理数据的第一步&#xff0c;只有正确地把数据存储起来&#xff0c;才能进行有效的处理和分析。 在 MySQL 中&#xff0c;一个完整的数据存储过程总共有 4 步&#xff0c;分别是创建数据库、确认字段、创建数据表、插入数据。 从系统架构的层次上看…...

【从零开始的LeetCode-算法】910. 最小差值 II

给你一个整数数组 nums&#xff0c;和一个整数 k 。 对于每个下标 i&#xff08;0 < i < nums.length&#xff09;&#xff0c;将 nums[i] 变成 nums[i] k 或 nums[i] - k 。 nums 的 分数 是 nums 中最大元素和最小元素的差值。 在更改每个下标对应的值之后&#xf…...

周报 | 24.10.14-24.10.20文章汇总

为了更好地整理文章和发表接下来的文章&#xff0c;以后每周都汇总一份周报。 周报 | 24.10.7-24.10.13文章汇总-CSDN博客 OpenCV与AI深度学习 | T-Rex Label &#xff01;超震撼 AI 自动标注工具&#xff0c;开箱即用、检测一切-CSDN博客 计算机视觉与机器学习 | 目标检测 …...

Codeforce 980 Div2 A-D 题解

A. Profitable Interest Rate 原题 A. Profitable Interest Rate 思路 易推出公式 2 * a - b 代码 #include <bits/stdc.h> //#define int long long#define F(i, a, b) for (int i (a); i < (b); i) #define dF(i, a, b) for (int i (a); i > (b); i--)usi…...

一次代码优化的过程

场景说明&#xff1a; wpf项目&#xff0c;有4个不同的页面&#xff0c;共用一个next按钮&#xff0c;实现点击后跳转到下一个页面。 第一个页面是导入文件&#xff0c;当有2个及以上文件时&#xff0c;会弹窗提示。如下图所示&#xff1a; 之前和之后的代码对比&#xff1a; 之…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...