Я пытаюсь следовать этому уроку и запускать пример скрипта под cgi.
Ниже приведены шаги, которые я сделал:
1) Сделал пример скрипта
$ cat > test.pl <<EOF
> #!/usr/bin/perl
> print "Content-type: text/html\n\n";
> print "Hello, World.";
EOF
2) запустить контейнер Docker httpd и смонтировать созданный скрипт как том в каталоге cgi-bin:
$ docker run --name cgi_test --rm -p 3000:80 -v $(pwd)/test.pl:/usr/local/apache2/cgi-bin/test.pl httpd
3) проверить, включен ли модуль CGI:
$ docker exec -it cgi_test cat /usr/local/apache2/conf/httpd.conf | grep modules/mod_cgid.so
#LoadModule cgi_module modules/mod_cgid.so
*Модуль 1015 * CGI был включен, поэтому я включил его:
$ docker exec -it cgi_test sed -i 's,#\(LoadModule cgid_module modules/mod_cgid.so\),\1,g' /usr/local/apache2/conf/httpd.conf
4) Проверен ScriptAlias
директива и включение alias_module
:
$ docker exec -it cgi_test cat /usr/local/apache2/conf/httpd.conf | grep "ScriptAlias /cgi-bin/"
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
$ docker exec -it cgi_test httpd -M | grep -e cgid -e alias
cgid_module (shared)
alias_module (shared)
Все было нормально
5) Проверено разрешение exec:
$ docker exec -it cgi_test ls -la /usr/local/apache2/cgi-bin/test.pl
-rwxr-xr-x 1 1000 1000 76 Mar 20 12:41 /usr/local/apache2/cgi-bin/test.pl
Все было в порядке
6) Перезапустил httpd в контейнере Docker:
$ docker kill --signal="USR1" cgi_test
Но когда я к http://localhost:3000/cgi-bin/test.pl Я вижу 503 Service Unavailable
и эту ошибку в журнале:
[Wed Mar 20 19:03:02.323430 2019] [cgid:error] [pid 1446:tid 139952364902144] (22)Invalid argument: [client 172.17.0.1:34328] AH01257: unable to connect to cgi daemon after multiple tries: /usr/local/apache2/cgi-bin/test.pl
Что еще мне нужно сделать, чтобы запустить скрипт?