Loading ...

Eseguire script Python in Apache

Eseguire script Python in Apache

Su un server con Debian, devo eseguire degli script in Python.

Non c'è la necessità di installare tutto un framework, ma mi basta richiamarli al volo.

Python rientra negli script CGI, e quindi va configurato.

Inoltre specifico Debian perchè le configurazioni di Apache variano tra sistemi operativi e distro Linux.

Prima di tutto abilitiamo un modulo apposito:

# a2enmod cgi
# service apache2 restart

Poi modifichiamo il file /etc/apache2/conf-enabled/serve-cgi-bin.conf:

<IfModule mod_alias.c>
	<IfModule mod_cgi.c>
		Define ENABLE_USR_LIB_CGI_BIN
	</IfModule>

	<IfModule mod_cgid.c>
		Define ENABLE_USR_LIB_CGI_BIN
	</IfModule>

	<IfDefine ENABLE_USR_LIB_CGI_BIN>
		#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
		<Directory "/usr/lib/cgi-bin">
			AllowOverride None
			Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
			Require all granted
		</Directory>

		<Directory "/var/www/html/cgi-bin">
			AllowOverride None
		        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		        Require all granted
	                AddHandler cgi-script .py
        	</Directory>
	</IfDefine>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Salviamo e riavviamo il servizio:

# service apache2 restart

A questo punto creiamo una cartella /var/www/html/cgi-bin, e mettiamoci dentro questo script Python (test.py):

#!/usr/bin/python3

import cgitb

cgitb.enable()
print("Content-Type: text/html;charset=utf-8\r\n")
print("Hello World!")

Alcune osservazioni:

  • ho scpecificato Python, ma in verità tutto ciò vale anche per altri linguaggi; va solo aggiunta l'estensione corretta in AddHandler
  • nello script, va impostato l'interprete da richiamare; sia in generale, che nello specifico la versione di Python (la versione di default varia da distro a distro)
  • il Content-Type deve terminare con i caratterei di nuona linea
  • la guida, con le dovute modifiche, vale anche per altri sistemi e distro

Enjoy!