如何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>