C言語でCGIできたよー

はい。

http://www.tomorinao.space/cgi-bin/hello_clang.cgi

どちゃくそはまった。

 

手順は、

ubuntuapacheCGIの許可の設定をして、apache再起動。

指定の場所(今回は/cgi-bin以下)にcgiを配置する。

 

ラズベリーパイ CGI言語 | 言語・開発 | ラズベリーパイ勉強室 | 株式会社アイネックス|Webシステム構築 | データ復旧サービス |ホームページ作成 | AS400ソリューション

1.CGIのリンクを有効にする
  sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

2.CGI を利用するため設定ファイルの変更
 /etc/apache2/mods-available/mime.conf  219行目のコメントアウトをはずす 
 219 # AddHandler cgi-script .cgi

 /etc/apache2/sites-available/000-default.conf  28行目のコメントアウトをはずす
 28 # Include conf-available/serve-cgi-bin.conf

書いてたら、これで良いのではという気がしてきた。

 

ubuntuapacheCGIの許可の設定は、

Ubuntu上のApacheでCGIを実行できるようにするメモ | 青竹雑記帖(新)

Ubuntu ServerでCGIプログラムを動作させる - サーバーでもUbuntuを使っています

より。

 

$ ls /etc/apache2/mods-available/

 でload可能なモジュール一覧があって、

$ ls /etc/apache2/mods-enabled/

 で、使用可能になっているモジュールが確認できる。

$ sudo vim conf-enabled/serve-cgi-bin.conf

 

CGI動作に必要そうな

$ sudo a2enmod cgi

$ sudo a2enmod cgid

(cgidだけで良いかも。

Apache 2.2 からは mod_cgi ではなく mod_cgid を使う

 をして、apache再起動。

$ sudo systemctl restart apache2

 

今回は/var/www/cgi-bin/を配置した。

ので、それの設定をしていく。

 

$ sudo vim /etc/apache2/conf-available/serve-cgi-bin.conf

10         <IfDefine ENABLE_USR_LIB_CGI_BIN>

#CGIディレクトリ:/var/www/cgi-bin/をURL:http://example.com/cgi-bin/に割り当てる

11                 ScriptAlias /cgi-bin/ /var/www/cgi-bin/

12                 #ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

#CGIディレクトリコンテナ

13                 <Directory "/var/www/cgi-bin">

14                 #<Directory "/usr/lib/cgi-bin">

15                         AllowOverride None

16                         Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

17                         Require all granted

18                         Allow from all

# cgi-scriptが拡張子.cgiを処理するように設定
# (拡張子.cgiCGIのファイルとする設定)

19                         AddHandler cgi-script .cgi

20                 </Directory>

21         </IfDefine>

 

  • mime.conf を編集して、.cgi の拡張子を持つファイルを cgi-script として処理するよう設定する。 

$ sudo vim /etc/apache2/mods-available/mime.conf 

219         AddHandler cgi-script .cgi

 

一応、/etc/apache2conf-available/serve-cgi-bin.confをincludeするようにしたけど、

上で/etc/apache2conf-enable/serve-cgi-bin.confを書き換えていて、同じ内容なので、これ必要ないですね。

UNIXユーザ奮戦記(ubuntu Apache2設定 CGI)の内容を、やっと理解した。

$ sudo vim /etc/apache2/sites-available/000-default.conf

28         Include conf-available/serve-cgi-bin.conf

 

いや違う?操作は再起動とa2ensite/a2sissiteコマンドで行って、

xxxx-available以下のファイルを書き換えた方が良さそうっぽい。

設定フォルダ 設定内容
/etc/apache2/site-available サイト設定を 000-default.confをもとに新規作成
/etc/apache2/conf-available 必要に応じてsecurity.confなどを修正
/etc/apache2/mods-available モジュール設定はここ
/etc/apache2/site-enabled a2ensite/a2dissiteで設定が反映/削除
/etc/apache2/conf-enabled a2enconf/a2disconfで設定が反映/削除
/etc/apache2/mods-enabled a2enmod/a2dismodで設定が反映/削除
/etc/apache2/port.conf port変更の設定はここ? ``(Listen 8080など)

とりあえずはapacheの設定は完了。

 

そして、SFTPでCGIの実行ファイルを配置場所に送っているのに動かない。

Internal Server Error乙った。

f:id:takuwz:20180621205105p:plain

サーバの設定を何回確認しても、あってそうだったので、

pythonで試したら動くああああああ。

http://www.tomorinao.space/cgi-bin/hello_python.cgi

 

ゆっくり考えてみたら、

Mac OS XからUbuntuにSFTPで実行ファイル送ってたので、

MacコンパイルしたexeはLinuxでは動かない。。。

試しにソースを送って、Ubuntuサーバ上でコンパイルしたら動いた。

当たり前といえば当たり前。チャンチャン。

 

これはC言語などのコンパイル言語の

webフレームワーク流行らないわけだわーコンパイルめんどくさいわー

と思ってたら、C++ web Frameworkあるみたいで。

www.treefrogframework.org

実行速度は速そうだし、Jenkinsとかでコンパイルを自動化したら使えるかなーという感じ。

 

 

参考:

C言語プログラマの為のCGI

CGI プログラムのはじめの一歩

ApacheのAddHandlerはセキュリティ上の懸念から使用すべきではない - Dマイナー志向

Ubuntu Linuxで、ApacheのモジュールとVirtualHostを追加する - CLOVER

Apache:CGIの利用設定をする

ubuntu16.04のApache2設定/cgi設定

Ubuntu版Apache2でmod_rewriteを有効にする

 

pythonの場合

文字列を表示する - Python CGIプログラミング入門

 

そーす。

C lang. and python hello world CGI