SSIを有効にしてみる
apache の設定ファイルにて
<Directory />
Options Includes
AllowOverride ALL
</Directory>
のように設定。
IncludesをOptionsに設定することでSSIが使用可能になります。
apache の設定ファイルにて
<Directory />
Options Includes
AllowOverride ALL
</Directory>
のように設定。
IncludesをOptionsに設定することでSSIが使用可能になります。
htaccess で php_valueを設定してみたところ以下のようなエラーがでました。
php_value not allowed here
このディレクトリでは許可されていないということらしいので、
<Directory /home/hogehoge>
AllowOverride All
</Directory>
とすることで、hogehoge ディレクトリで動作できるようになりました。
ベーシック認証を設定するときは決まって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
を使用してパスワード文字列を作成し記述しました。
ディレクトリは存在するのにURLの最後にスラッシュを付けなければアクセスエラーになってしまう時の対応。
スラッシュを付けなくてもディレクトリ内の index.html index.htm などにアクセスできるようにするには
apacheの設定ファイル
UseCanonicalName On
↓
UseCanonicalName Off
にしapacheを再起動してください。
これで http://example.com/aaa でも http://example.com/aaa/ でも同じページが表示されるようになります。
システムの変更、サイトの削除など現在公開しているアドレスへのアクセスをほかのサイトにすべて転送する設定
http://test.com/* へのアクセスをすべて http://example.com/ にリダイレクトする設定
URLをリダイレクトするにはRedirectMatchを使用します。
※正規表現使用可能
#すべてのリクエストをリダイレクトします。
RedirectMatch (.*) http://example.com
ユーザーディレクトリを使用する時に特定のユーザーは非表示(ユーザーディレクトリを表示させない)にしたい場合の設定
管理者ユーザーなどは非表示設定にしておいたほうがいいようです。
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root admin
</IfModule>
リファラーを使って画像などの直リンクを禁止することがありますが、リファラーを取得できない携帯からのアクセスができなくなってしまいます。
そこで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してやることで制限の対象外とすることができます。
レンタルサーバー、自宅サーバー共通の話ですが、CGIを有効にしているにもかかわらずCGIが実行できないことがあります。
CGIが動かなくて困った、という場合は下記の点をご確認ください。
この中でも一番よく聞くのが改行コードが原因でCGIが実行ができないという状態です。改行コード自体はスクリプトと違いツールで確認しなければ、コードの違いがわかりません。CGIの改行コードを調べるにはフリーソフトでも簡単に調べることができるので、確認してみてはどうでしょうか?
最近のブログではサブドメインを使ったユーザーディレクトリの公開が一般的となっています。ただ、ユーザーが追加されるたびにサブドメインをDNS 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
a * グローバルIPアドレス
*を指定することで、サブドメインからのアクセスすべてが指定したグローバルIPへアクセスするようになります。
これでユーザーディレクトリのpublic_htmlへのアクセスがサブドメインで自動的にできるようになります。
apacheのレスポンスヘッダの文字コードを Shift-jis に設定していると mrtg など euc で記述されているファイルを参照すると文字化けが発生してしまいます。
そこで特定のディレクトリだけ表示するレスポンスヘッダー文字コードを指定できないかな?ということでやってみた結果が以下の設定です。
<Directory "/var/www/mrtg">
AddType "text/html; charset=euc-jp" html
</Directory>
上記の設定を httpd.conf に設定することで /var/www/mrtg ディレクトリを参照したときは euc-jp で出力されるようになります。
ウェブ上に画像を掲載していると他のユーザーがその画像を直接他のサイトで表示させてしまうことがあります。折角公開している画像を他のサイトで勝手に使われないようにするために、直リンクの制限の設定をします。
※ダウンロード制限は今回はかけていないので、ダウンロードされた場合はどうしようもありません。
.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ファイルを他のサーバーにアップロードし、アクセスしてみてください。画像が表示されない場合は、正常に機能しています。
mod_layoutとはホームページのヘッダーとフッターにHTMLを表示させるプログラムです。用途としてはレンタルサーバーの広告、サイトの下の署名、サイトデザインのテンプレートなどで使うと非常に便利です。
Apacheをパッケージインストール済みの状態でmod_layout5を導入しています。
CentOS 5
Apache 2.2.6 パッケージインストール版
#yum -y install httpd
#yum -y install httpd-devel
# 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
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(動的なスクリプト)として表示されるのではなくただのテキストファイルとして、ウェブ上に内容が表示されます。
Apache 1.3系のインストールログ
DSOをサポートさせmod_rewriteモジュールを導入しています。
# 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
# vi /usr/local/apache/conf/httpd.conf
LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c
2行が記述されていることを確認する。その他の設定は各自の環境に合わせて行ってください。
# /usr/local/apache/bin/apachectl start
# /usr/local/apache/bin/apachectl stop
http://ウェブサーバーIP/ でページが表示されることを確認する
ホームページのヘッダーフッターを表示させるための、モジュールをapache2.2に導入したときのログ。思わぬ落とし穴にはまりました・・・。
Centos 5
apache 2.2 (パッケージインストール版)
mod_layout 5
# 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
ヘッダーフッターを挿入したいページと同じディレクトリに.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を無効にしてみたところ正常に表示されるようになりました。
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する必要が無い場合は、コメントアウトすることで、警告文がでなくなります。
ルートディレクトリ直下のディレクトリ名と同じユーザーは作成しないようにしてください。ユーザーを作成し、ディレクトリ名がかぶってしまった場合は、ユーザーディレクトリを参照するようになってしまいます。
パッケージでインストールした場合、DocumentRootは/var/www/html/になっています。このままでは使い勝手が悪いので、/home/example_com に変更します。
example_com のようにサイトアドレスで作成しておけば、後でバーチャルホストで複数ドメインを使う場合も非常にわかりやすくなります。
example.com というアドレスでウェブにアクセスするサイトの場合の設定方法を記述しておきます。
ログイン不可の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"> の設定を変更していなかったため、アクセスできないというエラーでした。
Apache 2.0でコンテンツの圧縮転送を行うとどの程度パフォーマンスがアップするのかを実際に計測してみました。
不要な圧縮は省くようにし、圧縮転送の機能を有効にします。
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)
と表示されていれば、圧縮転送が正常に行えています。その下は転送結果なので、成果を確認することができます。
ふと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ファイルを出力しないよう指定する
.htaccessファイルに以下を記述
AuthUserFile /絶対パス/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require valid-user
<Files "sample.html">
Satisfy Any
</Files>
SSIを有効にしてみる ( 05.20 )
qmail のエラー対応 ( 05.19 )
mysqlhotcopy でのエラー対応 ( 05.11 )
htaccessでphp_valueの設定をするとエラーになったときの対応 ( 05.02 )
ホームページのデバックを行わないようにするには ( 05.02 )
LogWatchメールのProFTPD TimeOut Logを通知しないようにする ( 05.01 )
Zend Frameworkをインストール PHP ( 03.24 )
OSの再インストールに伴うNortonの再インストール方法 ( 03.23 )
クリックボート管理ソフト CLCL ( 03.19 )
日付の整合性チェック checkdate PHP ( 03.19 )
APC製 UPS ( 4 )
CSS ・ HTML ・ Javascript ( 3 )
ソフト・ツール ( 18 )
PHP関連 ( 22 )
面白動画(YouTube) ( 1 )
MySQL関連 ( 12 )
Apacheについて ( 19 )
サーバー設定 ( 29 )
日々の出来事 ( 24 )