検討 CGIをどう動かすか
現在のサーバは nginx(軽量だがApacheに比べて機能は制限される)
fastcgi simplecgi などのメカニズムは用意されている。
ただし別途CGI起動サーバーを用意し起動する必要あり。
Apache を CGIだけの用途でインストールして使うという手もある(今回はこれでしのぐ)
Apache設定
下記のコマンドでプロンプトが ‘#’ のものは root(管理者)として起動したもの
インストール
yum search apache
yum list
未インストールならば、
yum install httpd
yum list httpd
# インストールできたことが確認できる
設定変更1
vi /etc/httpd/conf/httpd.conf
# これが apacheの設定ファイル
変更箇所:
#Listen 12.34.56.78:80
#### Listen 80
Listen localhost:10080
* bindするIPアドレスは localhost に限定する。外部からの直接アクセスを避けるため(安全のため)。
ポート番号は、すでに動作しているサーバ(nginx)との衝突を防ぐためデフォルトでない適当な番号に。
この設定ファイルに Document “/var/www/html”とある。ここにテスト用ページを1つ用意しておこう(内容は省略)。
vi /var/www/html/index.html
起動
状態表示
systemctl status httpd
これで未起動ならば以下で起動。(その後もう一度 status表示させてみよう)
systemctl start httpd
他の表示
netatat -an # ポート表示 10080に注目
ps aux | grep httpd # プロセス表示
curl http://localhost:10080/ # webアクセス(同一機械内)
設定変更2
vi /etc/httpd/conf.d/userdir.conf
# このファイルは前述のhttpd.conf経由で(最終行あたりで)読み込まれる
* この行を追加する
<Directory "/home/*/public_html/cgi-bin">
Options ExecCGI
SetHandler cgi-script
</Directory>
systemctl reload httpd
nginx からの転送設定
nginx の設定ファイル(ゼミのサーバでは /etc/nginx/conf.d/default.conf を使っている)を編集する
location ~ ^/~.+?/cgi-bin/.*?$ { # UserDirの設定よりも前に置く
proxy_pass http://localhost:10080; # そのまま Apacheに転送
}
# 以下は以前に設定した、各ユーザの public_html を扱うUserDir設定
location ~ ^/~(.+?)(/.*)?$ {
alias /home/$1/public_html$2;
}
nginx を再起動
systemctl reload nginx
必要に応じてログファイルをチェック
curl http://localhost/~yyyyy/cgi-bin/abc.rb # yyyyy の部分は適当なユーザ名
cd /var/log/nginx
tail -20 a*log
tail -20 e*log
cd /var/log/httpd
tail -20 a*log
tail -20 e*log