奇怪的Apache配置CGI&解决提示500错误-Linux运维-学派吧

有需要服务器方面的需求和咨询,可以联系博主QQ 7271895(收费)

我擦!这两天可把我累的够呛,心累的那种,用python写了个API想放在Apache服务器上面利用CGI使用,但是整了两个晚上,经过无数次尝试和失败,最终终于搞定了,最终豁然开朗的感觉,才觉得这特么真是非常的坑。

先简单介绍一下Apache的CGI

Apache都不知道是啥的大兄弟就自己去百度吧。。CGI你可以理解为它的一个接口,利用CGI你可以实现各种脚本的运行,只要你的服务器可以运行的脚本都可以,通过服务器运行脚本,然后将允许结果最终以HTML的形式显示给浏览器。Apache根目录如下:

  • bin:Apache服务器软件所在地
  • cgi-bi:保存自己写的CGI脚本程序
  • conf:保存服务器设置的信息
  • error:网站发送错误的处理
  • htdcocs:保存HTML程序
  • icons:保存开发Apache程序用的图标
  • include:保存开发web程序用到的一些头文件
  • lib:保存的是开发web程序用到的一些库
  • logs:日志
  • manual:Apache服务器语言的设置
  • modlules:保存一些动态链接库

一般我们常用的文件夹就是上面标红的那两个。、

开始配置:

声明一下,一般Apache的默认配置CGI都是开启的,可以在服务器的Apache的配置文件中看到配置情况,这里以Ubuntu14.4的Apache2为例看一下。
先进入apache2的主目录并查看文件夹,默认的apache2的默认目录在/etc/apache2

奇怪的Apache配置CGI&解决提示500错误-Linux运维-学派吧

可以看到在这个目录下面有很多的文件夹和配置文件,Apache2其实是将各个模块的配置分文件夹保存了,这个CGI的配置文件在上图箭头指向的那个文件夹内,现在进入这个文件夹

奇怪的Apache配置CGI&解决提示500错误-Linux运维-学派吧

这个serve-cgi-bin.conf文件就是我们要找的文件,使用vim编辑器打开这个文件

奇怪的Apache配置CGI&解决提示500错误-Linux运维-学派吧

上图第一个箭头指向配置

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

这句话是用来设置别名的,就是说你在使用url访问的时候,当遇到/cgi-bin/这个目录的时候服务器会自动去/user/lib/cgi-bin/目录下面查找要访问的文件,这句话有时候可以不写,但前提是cgi的文件目录要在web的根目录下第二个箭头指向的配置

<Directory "/usr/lib/cgi-bin">
      AllowOverride None     #显示目录
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch    #可以运行的模块
      Require all granted   #允许所有的请求
</Directory>

注意上面标红的位置,/usr/lib/cgi-bin/要和上面的别名一致,这个地方是个可以改动的,你可以自己选定别的文件夹,当作CGI的根目录,只要设置好目录可以访问就好,然后+ExecCGI要有,这个是加载CGI模块的选项,没有是不行的。可以看到,我们并没有声明可以运行那些脚本,所以Apache会全面默认运行。只要在脚本中指定执行程序的路径即可。下面我们会讲到。好了,文件的配置完并保存之后重启服务器,然后就可以去测试一下了。

Apache2的重启命令:

sudo /etc/init.d/apache2  restart

Apche CGI 文件测试

根据上面配置的别名,我们在浏览器访问一下试试

奇怪的Apache配置CGI&解决提示500错误-Linux运维-学派吧

可以看到提示的是403然后说没有权限访问这个目录而不是404,说明找到了这个文件,只不过我们没有访问脚本文件,又不允许列出目录,所以提示403,下面我们编写一个CGI脚本测试一下,这里我使用Python来测试,代码如下:

#!/usr/bin/python           #CGI运行程序的目录
# -*- coding: UTF-8 -*-

print "Content-type:text/html"
print                               # 空行,告诉服务器结束头部,CGI必须的部分
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello Word - 我的第一个 CGI 程序!</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! 我是来自菜鸟教程的第一CGI程序</h2>'
print '</body>'
print '</html>'

上面的两个人注释的部分必须注意,规则不可以变。

写在python文件里面命令为t2.py,然后对文件进行权限的设置,让它具有可执行权限,注意,这一块很重要,要不然会提示500错误的

chmod  777 /usr/lib/t2.py

然后再浏览器中访问测试

奇怪的Apache配置CGI&解决提示500错误-Linux运维-学派吧

仍然是500错误,其实这个才是我这篇博文的重点,这个坑我觉得肯定是坑死过很多人,这个流程明明没有问题,怎么还会出现问题呢?经过我多次的尝试,多次的失败,多次的googl,多次的baidu,就特么差放弃了,我特么成功了。我觉得我的配置没有问题,那么问题肯定出在CGI文件上面,通过测试发现,有两个地方必须要注意:

注意1

# -*- coding: UTF-8 -*-
上面这句话是用来声明utf8编码的,若文件中存有中文必须声明utf8编码格式,但是在这,这句话似乎不管用了,必须使用’

#coding:utf8
用上面的生命替换以前的代码之后,重新访问浏览器,结果仍然是500。重点在下面

注意2

在linux中新建的文件和在windows上面新建的文件是不同的,在CGI中运行的文件必须是unix文件编码格式,所以会出现500错误的!对于这个问题我测试了很久,虽然说vim编辑器有将文件编码格式转换为unix命令:set ff = unix ,但是结果还是不行,依然是500错误!但是,在linux上面使用vim新建的文件却可以正常运行。具体这个问题到底是怎么回事我也没有具体搞清楚,但是最不会出错的方法就是在linxu上面直接新建和编辑文件,或者在linux上面新建文件之后拿到本地用IDE编辑,注意!最好不要使用记事本,在测试中发现有时候记事本的BOM头也会影响程序执行。

既然知道了问题的原因,那么我们在linux上面使用vim新建文件并将代码复制过去,然后运行测试。

奇怪的Apache配置CGI&解决提示500错误-Linux运维-学派吧

可以看到这样就成功了。两个晚上,闹心的,就是解决不了的问题,坑太多了,最终还好解决了,不然就要骂娘了。。!

如果有不懂的、欢迎加入我们学派吧。一起学习交流。右上角站长群

主题测试文章,只做测试使用。发布者:云大使,转转请注明出处:https://www.xp8.net/server/606.html

(0)
打赏 微信扫一扫 微信扫一扫
云大使的头像云大使
上一篇 2018年9月30日 下午2:01
下一篇 2018年9月30日 下午2:01

相关推荐

  • 如何在Linux(centos)中查找文件创建时间教程

    文件创建时间存储在ext4文件系统的inode中。早期版本的ext文件系统不支持文件创建时间。debugfs stat输出中有一个crtime(创建时间)时间戳。最后,ext4支持创建时间,就像在ntfs窗口中btime一样。 可以按照以下说明查找文件创建时间。选个例子,我使用的是一个现择现有文件或创建新文件进行测试。对于这有的文件。 步骤1:查找inode…

    2019年3月13日
    5.5K00
  • 腾讯云阿里云服务器centso使用mv命令移动文件夹及其下所有文件

    centos 系统现在用户已经慢慢普及、第三方面板也很多,碰到大量数据的目录转移  还是需要在命令界面操作 比较快 。 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令等同于DOS系统下的ren和move命令的组合。它的使用权限是所有用户。 格式: mv [选项(option)] 源文件或目录 目标文件或目录 使用命令: mv webda…

    2021年3月15日
    2.5K00
  • 🔥🔥🔥史诗级更新:轻量云OpenClaw(小龙虾)接入微信指南

    🔥🔥🔥重磅更新:微信支持接入云上OpenClaw!!! 本文主要介绍如何在腾讯云轻量应用服务器Lighthouse中部署完成OpenClaw后,如何配置接入微信ClawBot。 如果此时此刻您还不了解OpenClaw(中文名俗称”龙虾”),或是了解但还没有开始部署OpenClaw,建议您先参考云上OpenClaw(原Clawdbot)…

    2026年4月1日
    18700
  • python多环境管理工具virtualenv-Linux运维-学派吧

    有需要服务器方面的需求和咨询,可以联系博主QQ 7271895 系统环境 安装 使用示例 使用扩展包 系统环境 CentOS 7 安装 通过pip直接安装pip install virtualenv 使用示例 # 在/usr/local/下面创建一个virtualenv目录,作为多环境管理用目录 mkdir /usr/local/virtualenv # 进…

    服务器运维 2018年9月30日
    2.1K00
  • 阿里云腾讯云服务器linux硬盘挂载教程及宝塔安装

    前言 今天给大家带来一篇关于景安快云服务器的硬盘挂载及宝塔安装教程 准备工具 服务器一台  系统 centos7.2 64为例  shell工具服务器推荐代理商:www.hixinyun.com 价格优惠、 下面开始 我们是以安装宝塔为基础的、所以先挂载硬盘 先建立www名称 (宝塔安装默认在www目录下) mkdir -p /www 1、确认是否有没有分区…

    2019年1月18日
    12.4K10

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

工作时间:周一至周五,9:30-18:30,节假日休息

添加微信
添加微信
分享本页
返回顶部
---------官方优惠叠加渠道折扣:通过我们购买腾讯云/阿里云,价格更低,服务更优。更有专业配置指导与服务。微信同步:18838889666----