本文將採用docker建立一個apache http伺服器, 並且透過此伺服器運行CGI程式。
配置apache
找到對應的image並且pull
sudo docker search apache
sudo docker pull httpd
httpd.conf
取得預設的httpd.conf
sudo docker create --name temp httpd
sudo docker cp temp:/usr/local/apache2/conf/httpd.conf httpd.conf
sudo docker rm temp
修改cgi的部份
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
修改成
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options ExecCGI
SetHandler cgi-script
Require all granted
</Directory>
取消mod_cgid.so
註解
LoadModule cgid_module modules/mod_cgid.so
Build Dockerfile
建立Dockerfile
FROM httpd
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
build image
sudo docker build -t my-httpd .
使用當前目錄作為cgi-bin
sudo docker run -p 8080:80 -v "$PWD":/usr/local/apache2/cgi-bin/ my-httpd
測試配置結果
編寫測試CGI,假設名稱為cgi
#!/bin/sh
echo Content-Type: text; charset=utf-8
echo
echo cgi working
連上http://localhost:8080/cgi-bin/cgi 可以看到CGI正常運作。
GET method
將下列程式取名為cgi-get
#!/bin/sh
echo Content-Type: text; charset=utf-8
echo
echo $QUERY_STRING
連上 http://localhost:8080/cgi-bin/cgi-get?foo=a&bar=123
POST method
將下列程式取名為cgi-post
#!/bin/sh
echo Content-Type: text; charset=utf-8
echo
a=$(cat)
echo $a
透過firefox連上http://localhost:8080/cgi-bin/cgi-post 此時應該可以看到一個空白頁
透過內建的開發人員工具,在HTTP Header的地方補上
Content-Length: 15
並且在Request Body填上
foo=aaa&bar=bbb
透過POST發送應該可以看見Request Body顯示在頁面上
HTTP Web Docker Apache