Hatena::ブログ(Diary)

yummy-yummy このページをアンテナに追加 RSSフィード

2010-05-11

Apacheのエラー:Could not reliably determine the server’s fully qualified domain name〜とメッセージが出たときの対応

Apacheを起動(再起動)した際に、

httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

というエラーが出る場合がある。

これは、「ServerNameに127.0.0.1を使用した、FQDN(完全に適切なドメイン名)が確定できませんでした。」という意味だそうで、Apache自体は動くのだが、エラーをそのままにしておくのは気持ちが悪いし、あとあと問題を引き起こす可能性が高い。

このエラーは、「/etc/sysconfig/network」、 「/etc/hosts」 にlocalhost以外に自分で設定したホスト名が、Apacheの設定ファイルに定義されていないために発生する。

/etc/sysconfig/network例
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=hoge.altqua.com
/etc/hosts例
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               hoge.altqua.com localhost.localdomain localhost

と書いた場合、/etc/httpd/conf/httpd.conf のServerNameの設定にも次のように書いておく。

/etc/httpd/conf/httpd.conf
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If this is not set to valid DNS name for your host, server-generated
# redirections will not work.  See also the UseCanonicalName directive.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
# You will have to access it by its address anyway, and this will make
# redirections work in a sensible way.
#
#ServerName www.example.com:80
ServerName hoge.altqua.com:80

ソースからインストールしたApacheにモジュールを後から追加する方法

ソースからインストールしたApacheモジュール再起動無しで追加する方法です。

mod_soの確認

Apacheコンパイル時にDSO(mod_so)が組み込まれていないと、この方法では追加できないので、DSOが組み込まれているか以下のコマンドを実行し手確認します。

# /usr/local/apache2/bin/httpd -l

一覧に「mod_so.c」がある事を確認してください。

無い場合は組み込まれていないので、Apacheの再コンパイルが必要です。

インストールモジュールの追加)

>||

# cd /usr/local/src/httpd-2.2.15/src/modules/

||<

上記ディレクトリ内にApache標準モジュールのソースが保存されています。

rewrite module は httpd-2.2.15/modules/mappers にありましたので、その中に移動します。

>||

# cd /usr/local/src/httpd-2.2.15/src/modules/mappers

||<

# /usr/local/apache/bin/apxs -c mod_rewrite.c

インストールします。

# /usr/local/apache2/bin/apxs -ian rewrite mod_rewrite.la
設定

httpd.conf には自動で追加されるのですが、追加されて以内場合は手動で設定を追加します。

LoadModule rewrite_module modules/mod_rewrite.so
モジュールのリロード
# /usr/local/apache2/bin/apachectl graceful

とし、設定をリロードさせれば「mod_rewrite」が有効となります。

参考サイト

http://blog.enjoitech.jp/article/131

2009-05-09

PLESKを使ったレンタルサーバでmod_rewriteが効かない

JavaWebアプリケーション個人情報入力フォームなんかがあるページの場合は、大抵HTTPSプロトコルmod_rewriteを使ってリダイレクトさせているのだが、PLESKという管理ツール付きで申し込んだレンタルサーバ(マイティサーバー)でリライトが効かないという現象でかなりハマってしまった。

通常だったらhttpd.confに

<IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteLog  /var/log/httpd/rewrite_log
      RewriteLogLevel 3
      RewriteCond %{SERVER_PORT} !^443$
      RewriteRule ^/hoge/(.*)?$ https://%{HTTP_HOST}/hoge/$1 [L,R]
</IfModule>

って書いてたらもうばっちりHTTPSプロトコルへ飛ばしてくれて、ログもこれでもか!!ってくらい吐かれるんだが、今回は全くそんな挙動は見せてくれなかった。

んで、試行錯誤しつつ色々やって色々調べてみたらどうやらPLESKを使ってドメイン管理している場合は以下のパターン名パスに対象ドメインの設定ファイルやドキュメントルートが設定されるらしい。

/home/httpd/vhosts/<ドメイン名>/

じゃあ、リライトの設定はどこに書けばいいのかっていうと

/home/httpd/vhosts/<ドメイン名>/conf/httpd.include

に書けばよいらしいのです。

/home/httpd/vhosts/<ドメイン名>/conf/httpd.includeの内容
<VirtualHost 99.99.99.99:80> 
        ServerName   hoge.jp:80
        ServerAlias  www.hoge.jp
        UseCanonicalName Off
        DocumentRoot /home/httpd/vhosts/hoge.jp/httpdocs
        CustomLog  /home/httpd/vhosts/hoge.jp/statistics/logs/access_log plesklog
        ErrorLog  /home/httpd/vhosts/hoge.jp/statistics/logs/error_log
<IfModule mod_userdir.c>
        UserDir /home/httpd/vhosts/hoge.jp/web_users
</IfModule>
        <IfModule mod_ssl.c>
                SSLEngine off
        </IfModule>
        <Directory /home/httpd/vhosts/hoge.jp/httpdocs>
        <IfModule sapi_apache2.c>
                php_admin_flag engine off
        </IfModule>
        <IfModule mod_php5.c>
                php_admin_flag engine off
        </IfModule>
                Options -Includes -ExecCGI
        </Directory>
        <Directory /home/httpd/vhosts/hoge.jp/web_users>
        <IfModule sapi_apache2.c>
                php_admin_flag engine off
        </IfModule>
        <IfModule mod_php5.c>
                php_admin_flag engine off
        </IfModule>
        </Directory>

#↓以下リライト記述を追記↓
<IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteLog  /var/log/httpd/rewrite_log
      RewriteLogLevel 0
      RewriteCond %{SERVER_PORT} !^443$
      RewriteRule ^/hoge/(.*)?$ https://%{HTTP_HOST}/hoge/$1 [L,R]
</IfModule>
</VirtualHost>

設定ファイルを保存したらApache再起動後にばっちりHTTPSリライトされるようになりました〜

2008-11-12

UbuntuでApacheを設定する際のハマリどころ

Ubuntuを使う前はCentOSを使っていたので、Apacheの設定にちょっとハマりました。

ソースからインストールする場合は基本今までと同じなんですが、apt-getでインストールするとちょいとUbuntuアタマにする必要があります。

UbuntuでのApache設定は基本的にDebianを受け継いでいるので、モジュールやサイトの設定を

apache2.conf(httpd.conf)には書かずに細かく管理します。ここんところがRedHat系ユーザーのハマり所ですね。

(Apache2になってからは、設定ごとに〜.confファイルに記入しますが、Ubuntuは管理がさらに

細かいみたいです。)

設定ファイル

apache2.conf

httpd.confの代わりにapache2.confが読み込まれます。

ports.conf

通信ポートの設定です。デフォはもちろん80で。

Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>
sites-available/

仮想ホストの設定ファイルの置き場

mods-available/

モジュールの設定ファイルの置き場

conf.d/

その他上記以外の細かい設定はここにファイルを作る

起動スクリプト

/etc/init.d/apache2が起動スクリプト

/etc/init.d/apache2 force-reload ← 再起動コマンドはこんなん

サイト設定の切り替え

設定ファイルをmods-available 、sites-availavle 配置し、a2enmod や a2ensite コマンドで有効にすることによって、ファイルが mods-enabled や sites-enabled にリンクされて読み込まれます。

a2dismod

モジュール設定を無効にします。

a2enmod

モジュール設定を有効にします。

a2dissite

サイト設定を無効にします。

a2ensite

サイト設定を有効にします。

切り替え例

デフォルト設定の「default」をコピーしたhogeをカスタマイズし有効化。んでデフォの設定を無効にする例です。

cd /etc/apache2/sites-available/
sudo cp default hoge
sudo a2dissite default  ←defaultの設定を無効に
sudo a2ensite hoge      ←hogeの設定を有効に

参考サイト

Ubuntu/apache2 -- TOBY SOFT wiki --

2008-07-03

LinuxでTomcatとApacheの連携その2 Version2.2オーバー

先日LinuxでTomcatとApacheの連携をメモっていたんですが、Apache2.2以降だともっとあっさりできちゃうんです。ってのをさっき知りました〜

1.httpd.confの以下の行のコメントアウトをはずす
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
2.httpd.confにLocationディレクティブを追加

(applicationContextNameはTomcatにデプロイしたのアプリのコンテキスト名)

<Location /applicationContextName>
	ProxyPass ajp://localhost:8009/applicationContextName
</Location>
3.必要であればservlet.xmlの8080コネクターをコメントアウト
4.Tomcat、Apacheの順に起動

ううむ、こんな簡単な手順でできるとは。。。。