Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

apache2でcgi-binを使えるようにしてみる【Debian12】

参考ページ

www.server-world.info

sudo a2enmod cgid

# 再起動
sudo systemctl restart apache2

cgi-binで走るスクリプトをpythonのみに限定する

上記のサイトでは

/etc/apache2/conf-available/cgi-enabled.conf
にその設定を書き込むように書いてあるが、自分の環境では動かなかった・・・

代替手段としては

sudo emacs /etc/apache2/mods-available/cgid.conf

で下に、
AddHandler cgi-script .py
と追記する

これで行けるなら?
ということで、別の設定ファイルに追記してみた

sudo emacs /etc/apache2/conf-available/serve-cgi-bin.conf
    <IfDefine ENABLE_USR_LIB_CGI_BIN>
     ScriptAlias /cgi-bin/ /var/www/html/hogehoge/cgi-bin/
               <Directory "/var/www/html/hogehoge/cgi-bin/">
                      AllowOverride None
                      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                      AddHandler cgi-script .py
                      Require all granted
               </Directory>
     </IfDefine>

という行を下の方に追記した
hogehogeは自分の環境に合わせて変更してください

公開されるページは、 /var/www/html/hogehoge に下に書かれているhtmlなどなど

SymLinksIfOwnerMatch
は、そのディレクトリに置いてあるシンボリックリンクも遡って公開するか? という設定

ExecCGI
は、cgi-binを使うために必要だと思う

AddHandler cgi-script .py
がpythonの拡張子を持ったスクリプトのみ走るようにする制限

再起動

  • `systemctl reload apache2`

ありがちだった罠

今回はまだハマっていないけど、以前ありがちだった罠をメモしておきます

  • 走らせたいスクリプトの実行権限は755にしておく
  • `chmod 755 hoge.py`
  • 公開するディレクトリの所有者は特にいじらなくても良い
    • ただし cgi-bin の実行結果をどこかのディレクトリに格納したい場合は、そのディレクトリの所有者は、www-data にしておく必要がある
    • `sudo chown -R www-data:www-data ./`
  • 公開するディレクトリがシンボリックリンクの場合は上記の SymLinksIfOwnerMatch を忘れないようにする
  • スクリプトをcgi-bin経由で実行すると、コードがそのまま表示される
    • これは、そのスクリプトが実行できるスクリプトだと見なされていない時に起こるエラー
    • 上記の AddHandler cgi-script .py あたりがうまくいってなさそう

ランキング参加中です

↓クリックしていただけると嬉しいです〜