ApacheでCGIが動かない原因と対策

このQ&Aのポイント
  • Apacheをインストールし設定を行っていますが、CGIが動かない問題について考えてみましょう。
  • 具体的な設定方法として、<Directory>内にOptions +ExecCGIとAddHandler cgi-script .cgi .plを追加する方法がありますが、動かない場合は何か根本的に間違っている可能性があります。
  • また、CGIが動かない原因としてはsuexecの設定やコンパイル設定なども関係しているかもしれません。エラーログやソースコードの返り値を確認して、問題を特定しましょう。
回答を見る
  • ベストアンサー

apacheでcgiが動きません

apacheをインストールし設定を行っていますがCGIが動いてくれません。 具体的にはCGIのソースがそのまま表示されてしまいます。 ネットを調べてみても <Directory /home/ultra/public_html> Options +ExecCGI AddHandler cgi-script .cgi .pl </Directory> を追加すれば動くような事が書いてありますがこの設定では動いてくれないようです。 何か根本的に間違っていることをしているのでしょうか。 アパッチのバージョンは以下のとおりです。 Server version: Apache/2.4.3 (Unix) suexecで動かしたくsuexecの設定もしていますが、 ログにsuexecのログが生成されないのでその前の段階かと思うのですが・・。 エラーログなどは特に表示されません。cgiのソースが20xで返されているので 当たり前かもしれませんが .コンパイル前の /configreは以下のように設定しました。 ./configure --enable-mbstring \ --enable-mbstr-enc-trans \ --enable-mbregex \ --enable-i18n \ --with-xml \ --with-mysql=/usr/local/mysql \ --with-pgsql=/usr/local/pgsql \ --enable-track-vars \ --enable-discard-path \ --with-gd \ --enable-gd-native-ttf \ --with-zlib-dir=/usr/local \ --with-pdflib=/usr/local \ --enable-shared-pdflib \ --enable-exif \ --disable-debug \ --enable-debug=no \ --enable-debugger=yes \ --enable-memory-limit=yes \ --enable-magic-quotes=yes \ --with-exec-dir=/usr/bin \ --without-system-regex \ --with-dbase=yes \ --enable-bcmath=yes \ --enable-ftp \ --enable-sockets \ --disable-posix-threads \ --enable-xsl \ --enable-xslt \ --with-xslt-sablot \ --with-xsl=/usr/local \ --with-dom=/usr/local \ --with-dom-xslt=/usr/local \ --enable-soap \ --enable-simplexml \ --with-gettext=/usr/local \ --enable-sqlite-utf8 \ --with-pdo-mysql=/usr/local/mysql \ --with-pdo-pgsql=/usr/local/pgsql \ --with-pdo-sqlite=/usr/local \ --with-curl=/usr/local/lib \ --with-openssl=/usr/local/openssl \ --with-mcrypt=/usr/local \ --with-iconv=/usr/local \ --with-xmlrpc \ --enable-safe-mode \ --enable-ssl \ --enable-dav \ --enable-so \ --enable-suexec \ --with-suexec-caller=apache \ --with-suexec-userdir=public_html \ --with-suexec-docroot=/home \ --with-suexec-logfile=/usr/local/apache2/logs/suexec_log \ --with-suexec-uidmin=500 \ --with-suexec-gidmin=100 ご回答よろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • localica
  • ベストアンサー率52% (202/385)
回答No.1

原因となる可能性はいろいろありますが、ソースからコンパイルする人のよくあるミスは、別の設定ファイルを編集したりします。 複数アプリを入れる場合は、きちんとパスを確認する必要があります。 前提条件として、コンパイルがきちんと通り、モジュールが組み込まれ、設定変更後のプロセス再起動は確認済みですよね。

4gb_sdcard
質問者

お礼

貴重なお時間をお使いいただき、ご回答ありがとうございます。 コンパイルはエラーなく通っています。設定ファイルは起動前にエラーでてLoadNoduleを追加しないと動かなかった事から違うファイルを編集しているという事はありません。モジュールを組み込むのは起動時エラーが出なくなるまで組み込んでいます。プロセスの再起動は/etc/rc.d/init.d/apached restartで行っています。この際エラーはでません。 細かいところを書いていなかったためお手数をおかけして申し訳ありません。引き続きよろしくお願いいたします。

4gb_sdcard
質問者

補足

パスの確認方法は分かりませんがLoadModuleを追加する事でエラーだったものがエラーがなくなったので/usr/local/apache2/conf/httpd.conf(たしか)であってるとおもいます。postfixのcyrus-saslでも設定ファイルの場所が分からなくて苦労しましたが何か設定ファイルやその他のファイルのパスの簡単な確認方法ってあるんでしょうか。 必要なモジュールが組み込まれているかは起動時のエラーで判定してしまってよいのでしょうか。すみませんがよろしくお願いいたします。

関連するQ&A

  • PHPのCGIモードとについて

    PHPのCGIモードとについて PHPのCGIモードというのがよく分かりません。 自分はcentOSにソースコードからPHPを入れております。 で、主にApacheと連携させています。 ただ、最近は #!/usr/local/bin/php -q などを最初に書いてコマンドラインからの使用が多くなっております。 自分は ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-freetype-dir=/usr/local/lib --with-gd --with-mysqli=/usr/local/mysql5.5/bin/mysql_config --with-pdo-mysql=/usr/local/mysql5.5 --with-mysql-sock=/var/lib/mysql/mysql.sock --with-zlib --with-xsl=/usr/lib --enable-mbregex --enable-mbstring --enable-bcmath --with-mcrypt --disable-posix-threads --enable-bcmath --with-readline --with-curl=/usr/local/curl --with-curlwrappers --with-openssl --with-openssl-dir=/usr/lib64/openssl --enable-pcntl のようにしているのですが、これでCGIモードにはなっているのでしょうか? いまいち概念が掴めないでおります。 具体的な事例や、CGIモードでない場合との違いなどを教えていただけないでしょうか? また、CGIモードにするために何かphp.ini等で設定をするような事があるのであれば、 どのようにしてCGIモードとして使えるようになるのかをアドバイスいただきたいと思います。

    • ベストアンサー
    • PHP
  • Apache OpenSSL PHP でエラー

    CentOS 5.1にOpenSSL-0.9.8g、httpd-2.0.61、Postgres8.1.10、php-5.2.5でWEBサーバを作っているのですが、不思議なエラーが出てうまくいきません。 現象としては以下の通りです。 htdocs_http = httpコンテンツ htdocs = httpsコンテンツ apacheをstartsslで起動して、htdocsにphpinfoを 出力するプログラムを作成した後アクセスすると コンテンツのTOPに Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html ae03 などのメッセージが出力されます。 Apacheとphpを何度も再インストールしたのですが解決できません。 誰か似たような現象を起こった方や、 解決策を知っている方教えていただけませんか。 インストールした順は以下の通りです。 1. OpenSSL 2. httpd 3. Postgres 4. php インストールしたオプション 1. OpenSSL # ./config -fPIC shared 参考にしたサイト http://uguisu.skr.jp/Windows/apache2.html 2. Apache # ./configure \ # --enable-so --enable-ssl --with-ssl=/usr/local/ssl 3. Postgres # ./configure のみのオプションなし。 4. php # ./configure \ # --enable-mbstring=all --enable-mbregex \ # --enable-sockets --enable-ftp \ # --with-apxs2=/usr/local/apache2/bin/apxs \ # --with-pgsql=/usr/local/pgsql --without-mysql \ # --with-gd --enable-gd-native-ttf \ # --with-freetype-dir=/usr --with-jpeg-dir=/usr \ # --with-zlib=/usr --with-png-dir=/usr \ # --with-imap=/usr --with-kerberos=/usr \ # --with-imap-ssl --with-pdo-pgsql=/usr/local/pgsql \ # --with-mcrypt=/usr/local

    • 締切済み
    • PHP
  • お使いの PHP MySQL ライブラリのバージョン 4.1.22 が

    お使いの PHP MySQL ライブラリのバージョン 4.1.22 が MySQL サーバのバージョン 5.1.48 と異なります。これは予期しない不具合を起こす可能性があります。 お世話になります。 RHLE4でPHP4 から PHP5.2.9へのアップグレードが完了しMySQLのバージョンも5.1.48にアップグレードしました。 インストールは問題なく終了しPHPからMySQLのアクセスも可能となっております。 しかし、phpMyAdminからMySQLにアクセスしようとすると、 【お使いの PHP MySQL ライブラリのバージョン 4.1.22 が MySQL サーバのバージョン 5.1.48 と異なります。これは予期しない不具合を起こす可能性があります。】 と表示されてしまいます。 PHPのライブラリバージョンを上げれば問題ないと思うのですが、 どうしてもバージョンがアップできません。 参考になるサイトややり方がわかる方がいたら教えていただけますでしょうか。 ■PHPのコンパイルオプション ./configure \ --prefix=/usr/local/php5 \ --with-config-file-path=/usr/local/php5/lib \ --enable-sigchild \ --enable-mbstring \ --enable-mbregex \ --enable-force-cgi-redirect \ --enable-zend-multibyte \ --with-gd \ --with-jpeg-dir=/usr \ --with-png-dir=/usr \ --with-zlib \ --with-zlib-dir=/usr \ --with-openssl \ --enable-ftp \ --with-curl \ --with-mysql=/usr/local/mysql5 \ --with-pdo-mysql=/usr/local/mysql5 \ --with-pgsql=/var/lib/pgsql ■MySQLのコンパイルオプション ./configure --prefix=/usr/local/mysql5 \ --localstatedir=/usr/local/mysql5/data \ --enable-assembler \ --with-client-ldflags=-all-static \ --with-mysqld-ldflags=-all-static \ --with-charset=utf8 \ --with-extra-charsets=all \ --with-tcp-port=3308 \ --with-unix-socket-path=/tmp/mysql5.sock \ --with-plugins=innobase

    • 締切済み
    • PHP
  • PHPのconfigureのオプションにつきまして

    日頃WindowsメインでLinuxをあまり使わない者です。 今回、とある理由でCentOS5.5にPHP5.2とMySQL4.0の環境を作る必要が出てきました。それで、それらをソースからコンパイルしてインストールしてみたのですが、PHPのmysql_connect()で以下のようなエラーが出て、原因がわからず困っています。 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) PHPもMySQLも単体では正常に動いているようです。データベースも作れました。 それで色々調べていたのですが、/tmp/mysql.sockのアクセス権限を777にしたり、 PHPとMySQLが/tmp/mysql.sockを介する設定になっているかを確認しましたが、いずれも問題無さそうです。 それで、phpinfo()の結果をさくらサーバーのそれと比べてみたところ、 Configure Commandのところが全然違うことがわかりました。 今回構築した環境では、 './configure' '--with-apxs2=/usr/sbin/apxs' '--with-mysql=/usr/local/mysql' ですが、 さくらサーバーは、 './configure' '--prefix=/usr/local/php/5.2' '--with-config-file-path=${prefix}/etc' '--with-config-file-scan-dir=${prefix}/etc/conf.d' '--enable-force-cgi-redirect' '--with-openssl=/usr/local/ssl' '--with-zlib=/usr' '--with-curl' '--enable-exif' '--with-pcre-dir=/usr/local' '--with-gd' '--with-jpeg-dir=/usr/local' '--with-png-dir=/usr/local' '--with-ttf' '--with-freetype-dir=/usr/local' '--with-gettext=/usr/local' '--with-gmp=/usr/local' '--with-iconv=/usr/local' '--enable-mbstring' '--with-mcrypt' '--with-mysql=/usr/local' '--with-mysqli=/usr/local/bin/mysql_config' '--with-pdo-mysql=/usr/local' '--with-snmp=/usr/local' '--enable-soap' '--with-xsl=/usr/local' '--enable-zip' と非常に多いです。 これらは関係あるでしょうか。初歩的な質問で恐縮ですが、ご存知の方がいらっしゃいましたら、ご教示いただけましたら助かります。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの4.4.9と5.2.13の共存について。

    PHPの4.4.9と5.2.13の共存について。 OSはRHLE4で既存で動いているPHP4のプログラムがあります。 今回、開発してもらったPHP5のプログラムを同じサーバで動作させようと思っております。 既にPHP5.2.9が入っておりましたが、オプションでMySQLがなかったため、 PHP5をアンインストールして、ソースからコンパイルしてインストールしhttpdを再起動しました。 しかし、phpinfo()で確認したところ、PHPのVersionが5.2.9のまま変化ありません。 ソースからのインストールが初心者なもので大変申し訳御座いませんが、 PHP4と5の共存とソースからインストールした際のアンインストール方法を教えていただけますでしょうか? インストール方法は下記サイトを参考にPHP5バージョンで行ないました。 http://d.hatena.ne.jp/shogo0809/20100714/1279110673 ./configureオプションは下記です。 --prefix=/usr/local/php5 \ --with-config-file-path=/usr/local/php5/lib \ --with-sqlite \ --with-mysql=/usr/local/mysql5 \ --enable-sigchild \ --enable-mbstring \ --enable-mbregex \ --enable-force-cgi-redirect \ --enable-zend-multibyte \ --with-gd \ --with-jpeg-dir=/usr \ --with-png-dir=/usr \ --with-zlib \ --with-zlib-dir=/usr \ --with-openssl \ --enable-ftp \ --with-curl \ --with-pgsql=/var/lib/pgsql

    • ベストアンサー
    • PHP
  • Apache+SuexecでForbidden

    Apache 2.4.18 + PHP 5.6.18 で Suexec VirtualHost & Suexecを用いて、PHPの実行権を 各VirtualHostで異なるようにしたいのですが gdtest.php を /usr/local/apache2/htdocs に置いて http://172.16.72.152/gdtest.php では正常動作しますが gdtest.php を /home/user1/public_html に置いて http://dummy-host1.XXXXXXX.jp/gdtest.php では Forbidden You don't have permission to access /php-user1/php_user-cgi/gdtest.php on this server と表示されます。 以下に当方の情報をお示しますので、どこが間違っているのか ご指摘いだだけますようお願いいたします。 1.Apache config ./configure --prefix=/usr/local/apache2 \ --with-apr=/usr/local/apr/apr-1.5.2 \ --with-apr-util=/usr/local/apr-util/apr-util-1.5.4 \ --with-pcre=/usr/local/pcre/pcre-8.38 \ --with-mpm=prefork \ --with-suexec-userdir=public_html \ --with-suexec-docroot=/home \ --with-suexec-caller=daemon \ --enable-suexec apache は User daemon, Group daemon で動作する 2.PHP config phpinfo()で確認 Configure Command : './configure' '--enable-mbstring=ja' '--enable-bcmath' '--with-gd' '--with-freetype-dir=/usr/include/' '--with-png-dir=/usr/include' '--with-jpeg-dir=/usr/include' Server API : CGI/FastCGI Virtual Directory Support : disabled Loaded Configuration File : /usr/local/lib/php.ini : 3.Virtual Hostは正常動作 /usr/local/apache2/conf/extra/httpd-vhosts.conf # 1st priority <VirtualHost 172.16.72.152:80> ServerAdmin root@172.16.72.152 DocumentRoot "/usr/local/apache2/htdocs" ServerName 172.16.72.152:80 ErrorLog "logs/error_log" CustomLog "logs/access_log" common ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" <Directory "/usr/local/apache2/htdocs"> Options Indexes FollowSymLinks AllowOverride All Action php56 /cgi-bin/php56-cgi AddHandler php56 .php Require all granted </Directory> </VirtualHost> # 2nd priority <VirtualHost 172.16.72.152:80> ServerAdmin root@172.16.72.152 DocumentRoot "/home/user1/public_html" ServerName dummy-host1.XXXXXXX.jp ErrorLog "logs/dummy-host1-error_log" CustomLog "logs/dummy-host1-access_log" common SuexecUserGroup user1 user1 ScriptAlias /cgi-bin/ "/home/user1/cgi-bin/" Action php_user1 /cgi-bin/php_user1-cgi AddHandler php_user1 .php <Directory "/home/user1/public_html"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost> 4.suexec -V -D AP_DOC_ROOT="/home" -D AP_GID_MIN=100 -D AP_HTTPD_USER="daemon" -D AP_LOG_EXEC="/usr/local/apache2/logs/suexec_log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html" 5. httpd -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_prefork_module (static) authn_file_module (shared) authn_core_module (shared) authz_host_module (shared) authz_groupfile_module (shared) authz_user_module (shared) authz_core_module (shared) access_compat_module (shared) auth_basic_module (shared) reqtimeout_module (shared) filter_module (shared) mime_module (shared) log_config_module (shared) env_module (shared) headers_module (shared) setenvif_module (shared) version_module (shared) unixd_module (shared) status_module (shared) autoindex_module (shared) suexec_module (shared) cgid_module (shared) vhost_alias_module (shared) dir_module (shared) actions_module (shared) userdir_module (shared) alias_module (shared) 6. directory, file関係 755 user1 user1 /home/user1/cgi-bin <-- daemon でも変わらない 755 user1 user1 /home/user1/cgi-bin/php_user1-cgi cgi版phpである /usr/local/apache2/cgi-bin/pgp56-cgi を php_user1-cgi としてコピー 755 user1 user1 /home/user1/public_html/gdtest.php /home, /home/user1 もパーミッションは 755 7. log messages 172.16.72.152 - - [09/Feb/2016:15:13:30 +0900] "GET /gdtest.php HTTP/1.1" 403 241 [/usr/local/apache2/logs/dummy-host1-error_log] [Tue Feb 09 15:13:] [authz_core:error] [pid 4905] [client 172.16.72.152:43902] AH01630: client denied by server configuration: /home/user1/cgi-bin/php_user1-cgi

  • Linux PHPからSQLServerに接続できない

    Linuxにphpをインストールしたのですが別のWindowsServerのSQLServerに接続することができません。 LinuxにインストールしたMySQLのデータは参照できています。 なにかモジュールやドライバーなどが必要なのでしょうか? ちなみに別のWindowsから該当のSQLServerは接続できているのでホスト名、DB名、User名、Passwordは 正しいと思います。 以下は環境とphpインストール時のオプションです。 もし、不足しているものがあれば教えてください。よろしくお願いします。 ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --enable-mbregex --enable-trans-sid --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql Red Hat Linux 8.0 Apache 2.0.55 php-5.1.2

    • 締切済み
    • PHP
  • phpのConfigure Commandについて

    ocnのサーバーにphpをvinstallでインストールしたのですが ocn標準で用意されているのは、データベースへアクセスする言語としてのみ利用できる内容になっているようです。 その後のカスタマイズは可能なので、機能を増やしたいのです。 参考になるか分かりませんが、 phpinfo()で表示させると、configure commandの内容が ./configure' '--with-apxs=/usr/local/apache/bin/apxs' '--with-config-file-path=/usr/local/lib' '--disable-debug' '--enable-memory-limit' '--enable-zend-multibyte' '--with-regex=system' '--enable-mbstring=all' '--enable-mbregex' '--enable-dio' '--enable-calendar' '--enable-versioning' '--with-bz2=shared,/usr' '--enable-sockets=shared' '--with-pcre-regex=/usr/local' '--with-iconv=shared,/usr/local' '--with-gdbm=shared' '--with-db3=shared,/usr/local' '--with-gettext=/usr/local' '--with-curl=shared,/usr/local' '--with-openssl=shared,/usr' '--with-pgsql=shared,/usr/local' '--with-openssl=/usr' '--with-gd=shared' '--enable-gd-native-ttf=shared' '--with-freetype-dir=shared,/usr/local' '--with-ttf=shared,/usr/local' '--with-xpm-dir=/usr/X11R6' '--with-jpeg-dir=shared,/usr/local' '--with-png-dir=shared,/usr/local' '--with-t1lib=shared,/usr/local' '--with-zlib=/usr' こんな感じになっています。 この内容で分かりますか? どなたかご教授宜しくお願いいたします。

  • apacheのCGI設定

     pc9821にFreeBSD(98)をいれapache1.3を起動させています。cgiはlight.cgiというソフトをつかっています。なかなかcgiがうまくいきません。参考ページには public_html / index.html (トップページ) | +-- bbs / light.cgi [755] | admin.cgi [755] ・・・・(省略) +-- lock [777] / | +-- past [777] / 0001.cgi [666] とかかれていますが、実際に私のサーバーにはpublic_htmlというフォルダは存在していなくて /usr/local/www/cgi-binにbbsというフォルダをつくり あとは上のようにしています。またindex.htmlは/usr/local/www/dataのなかにいれて表示してWebサーバーとしてはたらいています。またapacheの/usr/local/etc/apacheのhttpd.confは 関係ありそうな行だけあげると ServerRoot "/usr/local" DocumentRoot "/usr/local/www/cgi-bin" <Directory "/usr/local/www/cgi-bin/bbs"> Options Indexes FollowSymLinks MultiViews <location "/cgi-bin/"> Options ExecCGI AllowOverride AuthConfig Limit Order allow ,deny Allow from all </Location> <IfModule mod_mime.c> TypesConfig /usr/local/etc/apache/mime.types ADDHandler cgi-script .cgi </IfModule> ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/" <Directory "/usr/local/www/cgi-bin/bbs"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi どこがおかしいのかおしえていただけないでしょうか?

    • ベストアンサー
    • CGI
  • PHP PDO設定

    PDOでDB接続をしたいのですが、うまくいかず困っていて質問します。 OS Linux  apache 2.0.×(ソースでインストール) PHP5(ソースでインストール) DB MYSQL5(パッケージでインストール) 現状なのですが、PHPを下記の設定でインストールしました。 ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --enable-zend-multibyte --with-mysql --with-pdo-mysql=shared そのあとPHP.iniに記述してapache再起動 extension=pdo.so extension=pdo_mysql.so phpinfo()でみるとPDOの欄には下記しか表示されていません。 PDO drivers sqlite2, sqlite 試しにPHPで接続したのですが、 could not find driver と出ます。 そこで下記のようにインストールしてみたのですが phpinfoも上記と変わりません。 pecl install pdo_mysql ここまでが現状なのですが、 よくわかっていない部分もありわかりずらい かとは思いますが、参考意見の方を頂けますでしょうか。

    • ベストアンサー
    • PHP