奇怪的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

相关推荐

  • 挂载磁盘的问题(/dev/sdb1 is apparently in use by the system; will not make a 解决方法

    最近碰到一个挂载的问题、研究了一会才整明白。现在整理发布下。如果您有服务器咨询问题、购买问题、可以联系我们客服 690624商祺云-阿里代理、景安代理、西部代理 用fdisk给新磁盘分区后。然后要创建文件系统 [root@cuizhipeng ~]# mkfs.ext4 /dev/sdb1mke2fs 1.41.12 (17-May-2010)/dev/sd…

    2019年3月10日
    9.4K00
  • centOS安装宝塔提示报错

    安装宝塔提示这个错误、一般是DNS问题、或者更换个安装节点 P root@localhost:~ root0104.223.166.114’s password: I Last failed login: Tue Jul 17 02:32:19 EDT 2018 from 112.85.42.197 on. ssh :notty IThere were 78…

    服务器运维 2018年7月17日
    4.7K00
  • linux/centos中chmod命令怎么用?(详解)

    在linux中chmod命令允许用户更改文件和文件夹的访问权限;与其他命令一样,chmod命令可以通过命令行或脚本文件执行来执行。 chmod命令语法 这是使用chmod命令时的正确语法: chmod [options] mode [,mode] file1 [file2 …] 以下是chmod使用的一些常用选项: ● -f, – silen…

    服务器运维 2019年5月7日
    7.2K10
  • Linux(centos)重启命令是什么及详解

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 Linux 有五个重启命令 1、shutdown shutd…

    2019年3月13日
    4.8K00
  • Nginx和Apache如何设置ajax跨域-Linux运维-学派吧

    有需要服务器方面的需求和咨询,可以联系博主QQ 7271895(收费) 关于ajax跨域的就不过多的介绍,可以参考改文章http://www.qqdeveloper.com/a/75.html 方式一:在被请求的应用程序中添加一个允许请求跨域 1.apache 1.在httpd.conf文件中加载 LoadModule headers_module modu…

    服务器运维 2018年9月30日
    4.4K00

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

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

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