如何configurationdocker文件像perl一样运行cgi-script

我有这个文件:

  • 的index.php
  • Dockerfile
  • /conf/myawesomesite.conf
  • 的cgi-bin / helloworld.pl

在/conf/myawesomesite.conf中:

<VirtualHost *:80> ServerAdmin webmaster@myawesomesite.com ServerName myawesomesite.com ServerAlias www.myawesomesite.com DocumentRoot /var/www/html/myawesomesite.com/httpdocs ErrorLog /var/www/myawesomesite.com/logs/error.log CustomLog /var/www/myawesomesite.com/logs/access.log combined Options ExecCGI AddHandler cgi-script .pl </VirtualHost> 

在Dockerfile中:

 FROM ubuntu:16.04 ## Install Base Packages RUN apt-get update && apt-get -y install \ apache2 \ make \ curl \ git \ gcc RUN a2enmod rewrite ## Install Perl RUN apt-get update && apt-get -y install \ libapache2-mod-perl2 \ perl RUN a2enmod perl ## Install PHP RUN apt-get update && apt-get -y install \ php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json \ php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-readline \ libapache2-mod-php7.0 RUN a2enmod rewrite EXPOSE 80 RUN mkdir -p /var/www/html/myawesomesite.com/httpdocs RUN mkdir -p /var/www/myawesomesite.com/logs/ COPY ./conf/myawesomesite.conf /etc/apache2/sites-available/ RUN a2ensite myawesomesite RUN a2dissite 000-default.conf CMD /usr/sbin/apache2ctl -D FOREGROUND 

build立和运行容器,index.php正在正确执行,但是当这个页面myawesomesite.com/cgi-bin/helloworld.pl脚本只是打印不执行。 结果如下:

 #!/usr/bin/perl print "Content-Type:text/html\n\n"; print "Hello World!"; 

我期待的结果是Hello World! 因为我在myawesomesite.conf文件中添加了这些指令。 但为什么?

Options ExecCGI AddHandler cgi-script .pl

尝试添加到您的Dockerfile中:

 RUN chmod +x cgi-bin/helloworld.pl 

CGI脚本必须设置可执行的位。

我不得不将RUN a2enmod cgid添加到Dockerfile和下面的块到conf(假设perl脚本被复制到/var/www/myawesomesite.com/www/cgi-bin/ ):

 <Directory "/var/www/myawesomesite.com/www/cgi-bin/"> Options +ExecCGI AddHandler cgi-script .pl </Directory>