利用しているサーバー
kagoya(カゴヤ)のクラウド/VPSサーバー
※月額がとても安価な上にセキュリティやメール大量送信にも適しているのでオススメです。
安価でサーバーを使いたい、初めてながらVPSの勉強もしたい人には特にうってつけです。
kagoyaVPSのFTPサーバーでCGIが動作せずに何ヶ月も葛藤しました。
テスト用のCGIにアクセスしても「ソースがそのまま表示されるだけ」でした。
CGIが許可されていないのだということでhttpd.confに
AddHandler cgi-script .cgi .pl
と書き加えても今度は403 Forbiddenになっていました。
エラーログを見るとパーミッションエラーだったので700,701,705,755,777などあらゆる番号を試しましましたがダメでした。
最終的な解決法となった結論から言うと
# yum install perl-CGIをインストールして
ファイルは755でディレクトリは全て777にしたらアクセスできるようになりました。
kagoyaVPSは公式ページ説明にもあるように/var/www/htmlであればCGIは動作するようになっています。
よってhttpd.confの内を以下のような形に書き換えました。
AllowOverride All
Options +ExecCGI
AddHandler cgi-script .pl .cgi
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCG MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# https://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
Options Indexes ExecCGI FollowSymLinks
アクセスさえできればCGIは使えるのでとりあえずはよかったかなと思います。
以下に試行錯誤した奮闘日記を載せますが、この中でも
Perlの場所確認
whereis perl
…で
/usr/bin/perl
などどこになっているかを確認すること、
しっかりアスキーモードでアップロードされていること、
それでもダメならsuexecの確認・変更・停止などを行うことなどが影響があったかなと思います。
以下、奮闘日記↓
___________________________________________________________
●試したこと1
【アップロードやパーティションの変更】(KAGOYAのサポートページを参考に)
KAGOYAの以下のサイトの手順にそって
カゴヤのサイトのCGIの設定方法を参考に
https://support.kagoya.jp/manual/cgi/cgi.html
FileZillaでアップロードし、TeraTermから操作しています。
しかし
で実行しても、「ブラウザにCGIファイルのソースのみが表示」されてしまいます。
/home/アカウント/public_html 以下にCGIファイルを設置し、
「テキストモード(アスキーモード)」でファイル類をアップロードしました。
(基本はアスキーモードでのアップロードでOKです)
ちなみに一度削除して、「バイナリモード」や「自動」でのアップロードも試しましたが変化ありませんでした。
Perlは設定通り
#!/usr/bin/perl
に合わせてあります。
CGI側の設定も同じです。
マニュアルには700推奨とありましたが、suexec下なのでパーミッションが変わるのでフォルダからCIGファイルまで755ですべて設定しても結果は同じでした。
ちなみにCGIのパーミッションは
700だとソースがそのまま表示
705や777だと「403 Forbidden」でした。
ファイルやディレクトリまで755などでいろいろ設定しましたが結果は同じくダメでした。
●試めしたこと2
【httpd.confにCGIの書き加え】
同じような事例が以下のサイトにあったので、
CGIを表示するとソースがそのまま表示される
https://centossrv.com/bbshtml/webpatio/2496.shtml
それにそってhttpd.confに
Options Includes ExecCGI FollowSymLinks
AllowOverride All
AddHandler cgi-script .cgi .pl←追記
を書き加えてみたのですが、Internal Server Errorになってしまいました。
(もちろんその後、httpdの再起動によるApacheの再起動しています)
そもそも
AddHandler cgi-script .cgiを有効にすると「403 Forbidden」になってしまいます。
(ソースが表示されることはなくなりますが・・)
パーミッションを700,701,705,755,777などに変えてアクセスしてもダメでした。
また上部にある
Options Includes ExecCGI FollowSymLinks
AllowOverride All
#Options +ExecCGI←コメントアウトしたり外したり
AddHandler cgi-script .pl .cgi←追記
や
下部にある
こうなってたのを
#Option ExecCGI
#AddHandler cgi-script .cgi .pl
↓
こうしました
Options +ExecCGI
AddHandler cgi-script .pl .cgi
Options Includes ExecCGI FollowSymLinks
など、いろいろ試行錯誤したのですが変化はありませんでした。
Options +ExecCGI
や
AddHandler cgi-script .pl .cgi
・・を書き込むと、「403 Forbidden」になってしまい、書き込まないとアクセスはできますがCGIのソースがそのまま表示されるだけになってしまいます。
カゴヤではなく、さくらサーバーでは同じような状況の場合.htaccessの最初のOptions -Indexes +ExecCGIに#を入れて再アップロードすると使えることもあるそうなので、試してみたのですが、やはりソースが表示されるだけで変化はありませんでした。
(もちろんその後、httpdの再起動によるApacheの再起動しています)
●試したこと3
上記を試した後、今度は
【suexecの確認・変更・停止】
を行いました。
○suexecの確認
suexecの以下↓も試して
Forbiddenが表示される、中身(ソース)が表示される
https://www.cside.jp/SP_pri/cgi/trouble/tro01.html
public_html下であること、フォルダ名がcgiやcgi-binなどで専門フォルダと重複してないこと、なども確認済みです。
ファイルの文字コードは「utf8」です。
vi /etc/httpd/conf/httpd.conf
/etc/rc.d/init.d/httpd restart
でhttpdの再起動によるApacheの再起動
chkconfig httpd on
までもちろん組み合わせて行いましたが、やはりCGIのソースがそのままブラウザに表示されてしまうだけでした。
○suexecの停止
suexecの実行ファイルをリネームして、apacheを再起動しました。
(1)
$ mv /usr/sbin/suexec /usr/sbin/suexec_back
$ /etc/init.d/httpd restart
これをやってリネームしました
今は停止させてる状態です。
(2)さらに以下を参考にこれを行いました。
(参考)
vi /etc/sysconfig/selinux
下記を記入し保存します。
SELINUX=disabled
再起動
もちろん:w、:qで更新保存するなど変更ごとに細かく確認しています。
これらを行っても尚、
テスト用のCGI(パーティション755)にアクセスしても「ソースがそのまま表示されるだけ」です。
httpd.confに
AddHandler cgi-script .cgi .pl
Options +ExecCGI
などと書き加えても今度は403 Forbiddenになってしまいました。
___________________________________________________________
何らかの参考になれば幸いです。