お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2011-08-31 00:24:27

to
メンバ
登録日: 2011-08-13

apache2.2.17でuser dirのアクセス方法

日本語desktop ubuntu11.04 を導入して、cgiを使用するためにapache2.2.17を導入しました。導入は正常に導入できてると思います。
http://127.0.0.1/で実効させると
「It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.」

が表示されました。
ホームフォルダの下にpublic_html のdirectoryを作成し、test_local.plの名前でfileを作成し
http://127.0.0.1/test_local.plを実効させると、
「Not Found

The requested URL /test_local.pl was not found on this server.
Apache/2.2.17 (Ubuntu) Server at 127.0.0.1 Port 80」
が表示され実行できません。
apacheのerror.logを見ると
[Tue Aug 30 23:30:36 2011] [error] [client 127.0.0.1] File does not exist: /var/www/test_local.plのerror msgが出ております。
apacheは/var/www/test_local.plを探すのですか?
public_htmlのdirとtest_local.pl fileを作成した後sudo a2enmod userdir を実行しsudo /etc/init.d/apache2 restartを実行すると、
sudo /etc/init.d/apache2 restartの時端末に

* Restarting web server apache2                                                           apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
                                                                                    [ OK ]

のmsgが出ました。
このerrorのために実行できないのかわからないのでubuntuをshut downしてrebootしなおしても結果は同じです。
/etc/apache2/mods-enabled/userdir.confはさわっておりません。
userdir.confの内容は以下です。
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

/etc/apache2/sites-enabled/000-defaultの内容は

VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

上記内容のDocumentRoot /var/wwwと<Directory /var/www/> を変更する必要がありますか ?
それから/usr/lib/cgi-binの下にtest_local.plを置きhttp://127.0.0.1/cgi-bin/test_local.plとするとアクセスは可能です。
質問は次の2つです。
1) public_html のしたのfileのアスセス方法の仕方
2) sudo /etc/init.d/apache2 restartが正常に作動しない件
  以上よろしくお願いいたします。

オフライン

 

#2 2011-08-31 02:38:32

zagan
メンバ
登録日: 2008-08-12

Re: apache2.2.17でuser dirのアクセス方法

apache2インストール直後の設定では、/var/www以下のディレクトリを見にゆきます。
これは、DocumentRootが/var/wwwと指定されているためです。
そこで指定されたファイル(index.html)が、「It Works!」と表示されてるわけです。
つまり、/var/www以下にhtmlファイルを置くと、そのファイルへhttpを使ったアクセスが可能になります。

で、答えを書かないのはちょっと意地悪かもしれませんが、このポイントから考えられる設定を行ってみてはいかがでしょう。
このフォーラムにも過去の例がありますし、Web上にも多くの情報が公開されています。

cgiの設定に関しては、ユーザーディレクトリで静的ページが公開できてから取り組んだ方が良いです。

オフライン

 

#3 2011-08-31 10:43:16

zagan
メンバ
登録日: 2008-08-12

Re: apache2.2.17でuser dirのアクセス方法

というだけではあまりにも不親切かもしれないと。。。追加情報です。

で、サーバーを立ち上げるとき、その基本計画をきめなければなりません。
#1の内容から外部公開用ではなく、cgi(perlですかね?)のファイル作成のためのものと考えました。
そうでなくとも、まずは以下の手順を践み、動作確認を行ってから公開に向けた設定をしてゆけばよいです。

1. DocumentRootの設定
  設定対象ファイル:/etc/apache2/sites-available/default  (これをリネームして保存したファイルに設定を加える)

2. 設定したファイルを有効化し、もとの設定を無効化する
  例えば新規に設定したファイルをexampleというファイル名にした場合

コード:

~$ sudo a2ensite example

とし、さらにデフォルトで有効になっている /etc/apache2/sites-enabled/000-defaultを無効化しておく

コード:

~$ sudo a2dissite 000-default

3. user_dirを有効化する・・・設定不要です。以下のコマンドを実行するだけです。

コード:

~$ sudo a2enmod userdir

4. apach2を再起動させ、設定を反映させる。

コード:

~$ sudo service apache2 restart

以降、CGIの設定・セキュリティ設定・ログ収集の設定などを行い、最終的にドメインを入手して公開という手順がよろしいかと。
また、より実際に近い感覚で構築したいとき(専用機が用意できないとき)は、VirtualBoxなどで仮想環境を構築し、そちらにサーバーを仕込むと良いです。さらに、VirtualBoxにUbuntuをインストールしてアップデートしたあと、「仮想アプライアンスのエクスポート」機能を使って、OSまるごとをバックアップ。設定がうまくゆかないとか、混乱して手順がわからなくなった時に削除して「仮想アプライアンスのインポート」機能をつかえば環境の再構築を簡単に行うことが可能です。

オフライン

 

#4 2011-08-31 11:34:42

zagan
メンバ
登録日: 2008-08-12

Re: apache2.2.17でuser dirのアクセス方法

わたし による投稿:

1. DocumentRootの設定
  設定対象ファイル:/etc/apache2/sites-available/default  (これをリネームして保存したファイルに設定を加える)

ここ、なにもしなくとも良いです。
<いいわけ>
しばらくuser_dirでの公開という構築をしてなかったので、usrdirの働きを見誤ってました。
</いいわけ>

良く見るとuserdir.confで基本設定できてるんでした。
つまり、
1. apache2のインストール
2. a2enmod userdir
これだけでログインユーザーのホームディレクトリにpublic_htmlというディレクトリを作成し、なにかhtmlファイルを置いてブラウザからアクセスすると動作します。

オフライン

 

#5 2011-08-31 22:14:12

to
メンバ
登録日: 2011-08-13

Re: apache2.2.17でuser dirのアクセス方法

ご返事ありがとうございます。
/etc/apache2/sites-enabled/000-default のDocumentRoot /var/wwwを変更しまして URL http://127.0.0.1/  は実行できました。
/etc/apache2/sites-enabled/000-defaultの内容は以下です。
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
# change to DocumentRoot comment 2011/08/31
#    DocumentRoot /var/www
# 下記の * はuser名を入れております。
    DocumentRoot /home/*/public_html

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>


# change to comment 2011/08/31
#    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#    <Directory "/usr/lib/cgi-bin">
# 下記の * はuser名を入れております。
  ScriptAlias /cgi-bin/ /home/*/public-html/
    <Directory "/home/*/public-html">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

perlのcgiのテストをするとcgiが実行できません。

/etc/apache2/sites-enabled/000-defaultは上記と同じものです。
/etc/apache2/mods-enabled/userdir.conf は下記の内容です。

<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options  ExecCGI MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# change Options to comment 2011/08/31
#               AddHandler cgi-script .cgi
#                SetHandler cgi-script
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

これでURL http://127.0.0.1/test.cgiを実行すると、

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
が表示されます。この内容はtest.cgiのscriptです。

#               AddHandler cgi-script .cgiと
#                SetHandler cgi-script のどちらかの#を取ると

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Apache/2.2.17 (Ubuntu) Server at 127.0.0.1 Port 80
error_logの内容は
[Wed Aug 31 21:42:01 2011] [error] (2)No such file or directory: exec of '/home/*/public_html/test.cgi' failed  *はuser名

[Wed Aug 31 21:42:01 2011] [error] [client 127.0.0.1] Premature end of script headers: test.cgi

のmsgになります。
今のところ何が悪いのかさっぱり分かりません。
Windows XPは問題なくcgiは動いております。 apacheのVersionは低いです。
Windows XPではcgiのscriptが表示されるようなことはなかったとおもいます。
何が悪いのかご指摘いただければ幸です。

オフライン

 

#6 2011-08-31 23:18:54

zagan
メンバ
登録日: 2008-08-12

Re: apache2.2.17でuser dirのアクセス方法

user_dirの設定ですが、デフォルトの000-defaultファイルのままで、a2enmod userdirを実行するとユーザーディレクトリのpublic_htmlが公開されます。
それは、userdir.confに設定されている内容が、コマンドを実行することで有功になるということです。

# とはいえ、とりあえずは次に進みましょうか。

さて、CGIでperlを使用するするためには、apache2上でperlが動作するよう設定しないといけません。

【1】/etc/apache2/mods-enabled/mime.conf の編集

#AddHandler cgi-script .cgi

をコメントアウトして .pl を追記します。

AddHandler cgi-script .cgi .pl

【2】/etc/apache2/conf.dに以下の内容のファイル(ファイル名 cgi.conf)をroot権限で作成します。

AddHandler cgi-script .pl

【3】ユーザーのホームディレクトリのpublic_htmlを公開する設定。

<Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>


<Directory /home/*/public_html/>
        Options ExecCGI Indexes FollowSymLinks MultiViews Includes
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

と書き換えます。

【4】ユーザーのcgi-binディレクトリにcgiファイルを格納し、動作するよう設定します。

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>


ScriptAlias /cgi-bin/ /home/*/cgi-bin/
    <Directory "/home/*/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

コード:

sudo apache2ctl configtest

として、文法の誤りが無いかチェックします。
エラー等でなければ、apache2を再起動させます。

コード:

sudo service apache2 restart

domain nameがなんとかといったエラーメッセージが出ますが、無視して構いません。

コード:

which perl

として、perlのインストール先を確認してperlファイルを作成します。

オフライン

 

#7 2011-09-01 01:11:36

to
メンバ
登録日: 2011-08-13

Re: apache2.2.17でuser dirのアクセス方法

追加情報
/etc/apache2/sites-enabled/000-defaultの
#   *はuser名を指定しております。
    ScriptAlias /cgi-bin/ /home/*/public_html/
    <Directory "/home/*/public_html">
の場所でpublic_htmlがpublic-htmlにしておりました。
正しくpublic_htmlに修正してtestしましたが結果は同じでした。
/etc/apache2/mods-enabled/mime.conf の
#AddHandler cgi-script .cgiの行の#は取っております。

オフライン

 

#8 2011-09-01 01:26:42

zagan
メンバ
登録日: 2008-08-12

Re: apache2.2.17でuser dirのアクセス方法

コード:

sukdo a2enmod userdir

としたのなら、

コード:

sudo a2dismod userdir

としてuserdir.confを読み込まないようにしてください。

#AddHandler cgi-script .cgi

は#を削除して .pl を追記してください。
編集を加えたらapache2を再起動させてください。

ではおやすみなさい。

オフライン

 

#9 2011-09-01 01:26:55

favicon.ico
メンバ
登録日: 2010-09-06

Re: apache2.2.17でuser dirのアクセス方法

こんにちわー

Ubuntu の Apache で各ユーザーの public_html ディレクトリを公開し CGI も動く設定

# インストール直後の状態から始めます
# "~/public_html" ディレクトリにコンテンツが在るものとします
# cgi スクリプトの拡張子は.cgi とし実行権限を付けておきます

cgi-script ハンドラの有効化

$ sudo nano /etc/apache2/mod-available/mime.conf

  修正して保存します

#AddHandler cgi-script .cgi
 ↓ # を取る
AddHandler cgi-script .cgi

public_html 以下で *.cgi が実行できるようにします

$ sudo nano /etc/apache2/mods-available/userdir.conf

  修正して保存します

Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
 ↓ ExecCGI を追加
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI

必要なモジュールの有効化

$ sudo a2enmod userdir cgi

Apache の再起動

$ sudo service apache2 restart

ブラウザで http://サーバー/~ユーザー名/スクリプト.cgi を表示します

では~~~

オフライン

 

#10 2011-09-01 11:02:15

to
メンバ
登録日: 2011-08-13

Re: apache2.2.17でuser dirのアクセス方法

おはようございます。
2人の方法をすべて試しました。
結果は同じです。
それでpublic_html/test.cgiを削除して
URL http://127.0.0.1/test.cgi を実行すると以下が表示されました。

Not Found

The requested URL /test.cgi was not found on this server.
Apache/2.2.17 (Ubuntu) Server at 127.0.0.1 Port 80

error_logには
[Thu Sep 01 10:18:56 2011] [error] [client 127.0.0.1] script not found or unable to stat: /home/*/public_html/test.cgi のmsgです。 *はuser name

public_html/test.cgiを作成し、実行すると

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Apache/2.2.17 (Ubuntu) Server at 127.0.0.1 Port 80

error_log には
[Thu Sep 01 10:30:41 2011] [error] (2)No such file or directory: exec of '/home/*/public_html/test.cgi' failed *はuser nameに置き換える
[Thu Sep 01 10:30:41 2011] [error] [client 127.0.0.1] Premature end of script headers: test.cgi   

のmsgです。
なぜ [error] (2)No such file or directory: exec of '/home/*/public_html/test.cgi' failed  になるのですか?

test.cgi の内容は

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
# print "Content-Type: text/html;\n\n<html><body>\n";
# print "Hello, World.";
# print "\n</body></html>\n";
です。
*以外はすべてcopyした内容です。
この内容からするとtest.cgiが悪いのではないかとおもいます。あるいはperlですか?
perlは最初からUbuntu 11.04に入っていたものです。
apacheは
sudo apt-get install apache2でinstallしました。
apache2のuninstallの方法がわかりません。
よければuninstallの方法も教えていただけませんか ?

オフライン

 

#11 2011-09-01 11:23:14

to
メンバ
登録日: 2011-08-13

Re: apache2.2.17でuser dirのアクセス方法

追加情報
public_html directoryはroot partition ではなく別のpartitionで/homeにmntしたdirectoryです。

オフライン

 

#12 2011-09-01 11:57:37

zagan
メンバ
登録日: 2008-08-12

Re: apache2.2.17でuser dirのアクセス方法

favicon.icoさんの方法でやった方が、間違いないですね。
なので、一度/etc/apache2/sites-available/defaultを初期状態に書き戻しましょう。

デフォルトのdefaultファイルの内容を参考にどうぞ。

以後、favicon.icoさんの投稿に従って操作されてください。
なお、必ずcgiファイルには実行権(「プログラムとして実行できる」)を与えておいてくださいね。

オフライン

 

#13 2011-09-01 12:58:58

to
メンバ
登録日: 2011-08-13

Re: apache2.2.17でuser dirのアクセス方法

追加情報
cgiは正常に動きました。
web を検索したところhttp://d.hatena.ne.jp/otn/20090818/p1を参考にして
test.cgiの内容を
#!/usr/bin/perl から #!/usr/bin/perl -- に変更すると正常に動きました。
私の使用しているtxt editorはgeditです。geditでは改行コードを表示できる方法を知りません。
cgiの設定について大変お世話になりました。

それから教えていただきたい事があります。

1) 改行コードを変更できるtxt editorがあれば教えていただけないですか ?
  現在windowsで使用しているcgi programをubuntuに移行させたいのです。

2) application programのuninstall 方法

3) 今回日本語入力するときに普通はローマジ変換で入力出きるのですがどうゆう時に起こるか分かりませんが、ローマ字でなくひらかなが入力されるときがあります。入力programはAnthyです。これはubuntu 11.04に最初から導入されておりました。
使いやすい入力programがあれば教えてください。
以上よろしくお願い致します。

オフライン

 

#14 2011-09-01 14:05:25

zagan
メンバ
登録日: 2008-08-12

Re: apache2.2.17でuser dirのアクセス方法

taさん による投稿:

それから教えていただきたい事があります。

新規に質問を起こしてください。
こちらの話題は終了したようなので。

オフライン

 

Board footer

Powered by FluxBB