2008.05.20 Tue

SSIを有効にしてみる

apache の設定ファイルにて

<Directory />
Options Includes
AllowOverride ALL
</Directory>

のように設定。

IncludesをOptionsに設定することでSSIが使用可能になります。

参考サイト

2008.05.02 Fri

htaccessでphp_valueの設定をするとエラーになったときの対応

htaccess で php_valueを設定してみたところ以下のようなエラーがでました。

php_value not allowed here

このディレクトリでは許可されていないということらしいので、

<Directory /home/hogehoge>
AllowOverride All
</Directory>

とすることで、hogehoge ディレクトリで動作できるようになりました。

参考サイト

2008.02.28 Thu

htaccess を使わないでベーシック認証

htaccess を使わないでベーシック認証

ベーシック認証を設定するときは決まってhtaccessを使って制限をかけていたのですが、apacheでもできるのでは?とうことでapacheの設定ファイルに記述してベーシック認証を行います。

# vi /usr/local/apache/conf/httpd.conf

<Directory "/home/htdocs/public_html/admin">
AuthUserFile /home/htdocs/public_html/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Please Enter Your Password"
AuthType Basic
Require valid-user
</Directory>

htpasswd は
http://www.chama.ne.jp/access/index.htm
を使用してパスワード文字列を作成し記述しました。

2008.02.26 Tue

URLの最後にスラッシュをつけないでもページを表示させる

ディレクトリは存在するのにURLの最後にスラッシュを付けなければアクセスエラーになってしまう時の対応。

スラッシュを付けなくてもディレクトリ内の index.html index.htm などにアクセスできるようにするには

apacheの設定ファイル

UseCanonicalName On

UseCanonicalName Off

にしapacheを再起動してください。

これで http://example.com/aaa でも http://example.com/aaa/ でも同じページが表示されるようになります。

参考サイト

2008.01.09 Wed

特定のサイトにアクセスした場合 強制リダイレクト

システムの変更、サイトの削除など現在公開しているアドレスへのアクセスをほかのサイトにすべて転送する設定

http://test.com/* へのアクセスをすべて http://example.com/ にリダイレクトする設定

apacheの設定で転送

URLをリダイレクトするにはRedirectMatchを使用します。
※正規表現使用可能

#すべてのリクエストをリダイレクトします。
RedirectMatch (.*) http://example.com

2008.01.04 Fri

特定のユーザーディレクトリを非表示にする Apache2

ユーザーディレクトリを使用する時に特定のユーザーは非表示(ユーザーディレクトリを表示させない)にしたい場合の設定
管理者ユーザーなどは非表示設定にしておいたほうがいいようです。

<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root admin
</IfModule>


参考サイト

2008.01.03 Thu

直リンクの制限で携帯でのアクセスには制限を行わない方法

リファラーを使って画像などの直リンクを禁止することがありますが、リファラーを取得できない携帯からのアクセスができなくなってしまいます。
そこでPCからはリファラーを使って直リンクを制限し、携帯からのアクセスはすべて許可する設定を紹介。

画像の直リンク制限設定

.htaccess または httpd.confに記述します。

SetEnvIf Referer example.com authoritative_site
<FilesMatch "\.(jpg|png|gif)$">
order deny,allow
Deny from all
Allow from env=authoritative_site

## DoCoMo
Allow from 210.153.84.0/24
Allow from 210.136.161.0/24
Allow from 210.153.86.0/24
Allow from 210.153.87.0/24

## SoftBank
Allow from 123.108.236.0/24
Allow from 123.108.237.0/27
Allow from 202.179.204.0/24
Allow from 202.253.96.224/27

</FilesMatch>

携帯キャリアごとの帯域をAllowしてやることで制限の対象外とすることができます。

関連エントリー

参考サイト

2007.12.24 Mon

CGIが動かない時の確認項目 改行コードが原因かも?

レンタルサーバー、自宅サーバー共通の話ですが、CGIを有効にしているにもかかわらずCGIが実行できないことがあります。
CGIが動かなくて困った、という場合は下記の点をご確認ください。

確認項目

  1. CGIが動作するディレクトリを確認。public_html/cgi-bin の下で動作可能な場合はpublic_html/cgi-bin に置いてください。
  2. perlのパスの確認 サーバー環境によって /usr/local/bin/perl であったり /usr/bin/perl の場合があります。
  3. CGIを転送するときにbinaryモードを利用ようして転送したか?サーバー環境によっては改行コードがLFでなければ動作しない場合があります。CGIプログラムの改行コードを CR-LF , CR の場合は LF に変更してください。
  4. CGIのパーミッションの設定。(パーミッションはディレクトリも含めて設定が必要です)
  5. apacheの設定で、<Direcotry>のOptionsにExecCGIを追加しているか確認



この中でも一番よく聞くのが改行コードが原因でCGIが実行ができないという状態です。改行コード自体はスクリプトと違いツールで確認しなければ、コードの違いがわかりません。CGIの改行コードを調べるにはフリーソフトでも簡単に調べることができるので、確認してみてはどうでしょうか?

参考サイト

2007.12.19 Wed

Apache バーチャルホストで自動サブドメイン作成

最近のブログではサブドメインを使ったユーザーディレクトリの公開が一般的となっています。ただ、ユーザーが追加されるたびにサブドメインをDNS Apacheに設定して設定を反映させるといった方法でもできなくはありませんが、自動サブドメインでユーザーディレクトリにアクセスするための方法を覚書。

Apacheのバーチャルドメイン機能を設定

# vi /etc/html/httpd.conf

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin info@example.com
VirtualDocumentRoot /home/%1/public_html
ServerName example.com
ServerAlias *.example.com
</VirtualHost>

設定の反映

# /etc/rc.d/init.d/httpd restart

DNSの設定

a * グローバルIPアドレス

*を指定することで、サブドメインからのアクセスすべてが指定したグローバルIPへアクセスするようになります。

これでユーザーディレクトリのpublic_htmlへのアクセスがサブドメインで自動的にできるようになります。

参考サイト

2007.12.19 Wed

特定のディレクトリだけ文字コードをかえる

apacheのレスポンスヘッダの文字コードを Shift-jis に設定していると mrtg など euc で記述されているファイルを参照すると文字化けが発生してしまいます。

そこで特定のディレクトリだけ表示するレスポンスヘッダー文字コードを指定できないかな?ということでやってみた結果が以下の設定です。

<Directory "/var/www/mrtg">
AddType "text/html; charset=euc-jp" html
</Directory>

上記の設定を httpd.conf に設定することで /var/www/mrtg ディレクトリを参照したときは euc-jp で出力されるようになります。

参考サイト

2007.12.15 Sat

Apache 画像直リンクに制限をかける

ウェブ上に画像を掲載していると他のユーザーがその画像を直接他のサイトで表示させてしまうことがあります。折角公開している画像を他のサイトで勝手に使われないようにするために、直リンクの制限の設定をします。
※ダウンロード制限は今回はかけていないので、ダウンロードされた場合はどうしようもありません。

画像の直リンク制限設定

.htaccess または httpd.confに記述します。

SetEnvIf Referer example.com authoritative_site
<FilesMatch "\.(jpg|png|gif)$">
order deny,allow
Deny from all
Allow from env=authoritative_site
</FilesMatch>


動作確認

直リンクを記述したHTMLファイルを他のサーバーにアップロードし、アクセスしてみてください。画像が表示されない場合は、正常に機能しています。

参考サイト

2007.12.12 Wed

Apache 2.2.6 に mod_layout 5 を導入

mod_layoutとはホームページのヘッダーとフッターにHTMLを表示させるプログラムです。用途としてはレンタルサーバーの広告、サイトの下の署名、サイトデザインのテンプレートなどで使うと非常に便利です。

Apacheをパッケージインストール済みの状態でmod_layout5を導入しています。

導入環境

CentOS 5
Apache 2.2.6 パッケージインストール版

#yum -y install httpd
#yum -y install httpd-devel


mod_layout 5.0のインストール

# wget http://download.tangent.org/mod_layout-5.0.tar.gz
# tar xvfz mod_layout-5.0.tar.gz
# vi Makefile

APXS=apxs
APACHECTL=apachectl

APXS=/usr/sbin/apxs
APACHECTL=/etc/rc.d/init.d/httpd

# make
# make install

# /etc/rc.d/init.d/httpd restart

mod_layoutの設定

vi /etc/httpd/conf/httpd.conf

以下を最終行に追加
※記述する場所によっては指定したディレクトリでのみ有効にすることが可能です。

AddOutputFilter LAYOUT html
LayoutHeader /header.html
LayoutFooter /footer.html

動作確認

ウェブにアクセスし、header.html footer.html の内容が表示されているか確認する。

LayoutHeader に /var/www/html/header.htmlのように絶対パスで指定することも出来ますが、その場合はHTML(動的なスクリプト)として表示されるのではなくただのテキストファイルとして、ウェブ上に内容が表示されます。

参考サイト

2007.12.12 Wed

Apache 1.3.37 インストール Centos 5

Apache 1.3系のインストールログ
DSOをサポートさせmod_rewriteモジュールを導入しています。

Apache 1.3.37のインストール

# cd /usr/local/src
# wget http://archive.apache.org/dist/httpd/apache_1.3.37.tar.gz
# tar zxvf apache_1.3.37.tar.gz
# cd apache_1.3.37/
# ./configure --enable-module=so --enable-module=rewrite --enable-shared=rewrite --enable-rule=SHARED_CORE
# make
# make install

Apache の設定 ( httpd.conf )

# vi /usr/local/apache/conf/httpd.conf

LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c

2行が記述されていることを確認する。その他の設定は各自の環境に合わせて行ってください。

Apache の起動・停止

# /usr/local/apache/bin/apachectl start
# /usr/local/apache/bin/apachectl stop

動作確認

http://ウェブサーバーIP/ でページが表示されることを確認する

参考サイト

2007.12.09 Sun

CentOS5 apache2.2 + mod_layout 導入

ホームページのヘッダーフッターを表示させるための、モジュールをapache2.2に導入したときのログ。思わぬ落とし穴にはまりました・・・。

導入環境

Centos 5
apache 2.2 (パッケージインストール版)
mod_layout 5

mod_layout導入手順

# wget http://download.tangent.org/mod_layout-5.0.tar.gz
# tar xvfz mod_layout-5.0.tar.gz
# make
# make install

# service httpd restart

mod_layoutの設定

ヘッダーフッターを挿入したいページと同じディレクトリに.htaccessを作成し以下の内容を記述

# vi .htaccess

AddOutputFilter LAYOUT html htm cgi php
LayoutHeader /var/www/html/header.html
LayoutFooter /var/www/html/footer.html

はまった内容

インストールは問題なくできたのに、表示されない状態になってしまいました。再インストールを行ったり、設定をいろいろ変えてみたりしていていたのですが、ようやく原因がわかりました。

mod_deflate と mod_layout は共存ができません・・・

mod_deflateを無効にしてみたところ正常に表示されるようになりました。

設定参考サイト

2007.12.04 Tue

Apache ~(チルダ)なしでユーザーディレクトリのページを表示

Apache のユーザーディレクトリ機能を初期設定のまま有効にするとユーザーのページを表示させるには、

http://サイトアドレス/~user/

となります。

~を使わずユーザーディレクトリにアクセスする方法について

# vi /etc/httpd/conf/httpd.conf

AliasMatch ^/([^/]+)/(.*) /home/$1/public_html/$2
# 表示 : http://サイトアドレス/user/

または

AliasMatch ^/userdir/([^/]+)/(.*) /home/$1/public_html/$2
# 表示 : http://サイトアドレス/userdir/user/

設定を反映

service httpd restart


^/([^/]+)/(.*)を設定したときの警告について

[warn] The Alias directive in /etc/httpd/conf/httpd.conf at line 566 will probably never match because it overlaps an earlier AliasMatch.
[warn] The ScriptAlias directive in /etc/httpd/conf/httpd.conf at line 591 will probably never match because it overlaps an earlier AliasMatch.
[warn] The Alias directive in /etc/httpd/conf/httpd.conf at line 866 will probably never match because it overlaps an earlier AliasMatch.

上記警告が出る場合は、

Alias /icons/ "/var/www/icons/"
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
Alias /error/ "/var/www/error/"

で設定がかぶっているために警告がでています。このままでも正常に動作することは可能です。ただ、 icons cgi-bin error を aliasする必要が無い場合は、コメントアウトすることで、警告文がでなくなります。

注意点

ルートディレクトリ直下のディレクトリ名と同じユーザーは作成しないようにしてください。ユーザーを作成し、ディレクトリ名がかぶってしまった場合は、ユーザーディレクトリを参照するようになってしまいます。

参考サイト

2007.11.28 Wed

Apache DocumentRoot を /home/ドメイン に変更

パッケージでインストールした場合、DocumentRootは/var/www/html/になっています。このままでは使い勝手が悪いので、/home/example_com に変更します。
example_com のようにサイトアドレスで作成しておけば、後でバーチャルホストで複数ドメインを使う場合も非常にわかりやすくなります。

example.com というアドレスでウェブにアクセスするサイトの場合の設定方法を記述しておきます。

DocumentRoot変更手順

ログイン不可のexample_comユーザを作成

# useradd -s /sbin/nologin example_com
# chmod 777 /home/example_com

Apache設定ファイルの編集

# vi /etc/httpd/conf/httpd.conf
DocumentRoot を /home/example_com に変更

<Directory "/var/www/html">

<Directory "/home/example_com">

設定を保存しApacheの再起動

# service httpd restart

これでDocumentRootの変更が終わりました。
ブラウザから正常にアクセスできることを確認してみてください。

作業途中で発生したエラー

client denied by server configuration:

<Directory "/home/example_com"> の設定を変更していなかったため、アクセスできないというエラーでした。

参考サイト

2007.11.24 Sat

Apacheから送信するファイルを圧縮して3倍高速化

Apacheから送信するファイルを圧縮して3倍高速化

Apache 2.0でコンテンツの圧縮転送を行うとどの程度パフォーマンスがアップするのかを実際に計測してみました。

設定環境

  • Apache 2.2 パッケージインストール版
  • PHP 5

Apache 設定ファイルの編集

不要な圧縮は省くようにし、圧縮転送の機能を有効にします。

vi /etc/httpd/conf.d/deflate.conf

<Location />

# 圧縮転送の有効化
AddOutputFilterByType DEFLATE text/html text/plain text/xml

# Netscape 4.xの場合はtext/htmlのみ圧縮
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08の場合は圧縮しない
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIEの場合は全て圧縮
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しない
Header append Vary User-Agent env=!dont-vary

</Location>

設定の反映

# service httpd reload

有効後の結果

全てのページでというわけではありませんが、3分の1から2分の1程度のファイルサイズで表示できるようになり、体感できるほどの表示速度のアップになりました。

圧縮転送の計測に使ったサイト

今回圧縮転送の計測に使ったサイト

URLを入力し、計測結果を確認します。
Compression statusの項目で

Compressed(gzip)

と表示されていれば、圧縮転送が正常に行えています。その下は転送結果なので、成果を確認することができます。

設定参考サイト

2007.11.10 Sat

Apacheのエラーログについて

ふとApacheのエラーログを見てみるとfavicon.icoとrobots.txtが見つからないというエラーが大量にでているのを発見!

もちろん設定していないので、見つかるわけもありませんが、無駄なログなので、favicon.icoとrobots.txtを所定の位置に設定するかログを出力しない設定に変えましょう。


拡張子.icoのアクセスをエラーに出力しないようにするには、Apacheのhttpd.confに、

SetEnvIf Request_URI "\.(gif)|(jpeg)|(jpg)|(png)|(ico)$" no_log
CustomLog logs/error_log common env=!no_log

上記のようにicoファイルを出力しないよう指定する

参考サイト

2007.11.08 Thu

特定のファイル以外にベーシック認証をかける方法

.htaccessファイルに以下を記述

特定のファイル以外にベーシック認証をかける方法

AuthUserFile /絶対パス/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require valid-user
<Files "sample.html">
Satisfy Any
</Files>


参考サイト

システム構築に関する覚書トップページへ