Category Archives: Webサーバー

DebianとApache2でSSL通信

「mod_ssl」をつかってApache2を「https」で接続できるようにしようと思います。
まずは「mod_ssl」をインストールします。

<code>
$ su
# apt-get install libapache-mod-ssl
</code>

これから「/etc/apache2/ssl」に鍵などを作っていきます。

<code>
# cd /etc/apache2
/etc/apache2# mkdir ssl
/etc/apache2/ssl# cd ssl
/etc/apache2/ssl# cp /usr/lib/ssl/misc/CA.sh ./CA.sh
CA certificate filename (or enter to create)  (空欄のままEnter)
Enter PEM pass phrase:(パスフレーズを決める。一時的なものなので何でもよいが覚えておくこと)
Verifying - Enter PEM pass phrase:(もう一度パスフレーズ)
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kyoto(都道府県)
Locality Name (eg, city) []:Kyoto(市区町村)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Personal(個人なので)
Organizational Unit Name (eg, section) []:web(ここは組織単位らしい)
Common Name (eg, YOUR name) []:hogehoge(ニックネームでも入れましょう)
Email Address []:(メールアドレス)
A challenge password []:(空欄)
An optional company name []:(空欄)
Enter pass phrase for ./demoCA/private/./cakey.pem:(最初に決めたパスフレーズ)
</code>

これで認証局の証明書関係ができます。
続いて鍵の作成。

<code>
/etc/apache2/ssl# /usr/bin/openssl genrsa -rand /var/log/apache2/access.log -des3 -out ./serverkey.pem 1024
1407562 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
...++++++
.........++++++
e is 65537 (0x10001)
Enter pass phrase for ./serverkey.pem:(決めたパスフレーズ)
Verifying - Enter pass phrase for ./serverkey.pem:(もう一度)
</code>

以下のコマンドで作成した鍵のパスフレーズを削除します。

<code>
/usr/bin/openssl rsa -in ./serverkey.pem -out ./serverkey.pem
Enter pass phrase for ./serverkey.pem:(決めたパスフレーズ)

/usr/bin/openssl rsa -in ./demoCA/private/cakey.pem -out ./demoCA/private/cakey.pem
Enter pass phrase for ./demoCA/private/cakey.pem:(決めたパスフレーズ)
</code>

「writing RSA key」とでれば成功。
証明書を発行する為の申請書ファイル「CSR」の作成。質問は基本的に上と同じ。
コマンド中の365は有効日数。変更可能。

<code>
/usr/bin/openssl req -new -days 365 -key ./serverkey.pem -out ./csr.pem
Country Name (2 letter code) [AU]:JA
State or Province Name (full name) [Some-State]:Kyoto(都道府県)
Locality Name (eg, city) []:Kyoto(市区町村)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Personal(個人なので)
Organizational Unit Name (eg, section) []:web
Common Name (eg, YOUR name) []:(ニックネームでも)
Email Address []:(メールアドレス)
A challenge password []:(ここはちゃんとパスワードを決める)
An optional company name []:(空欄)
</code>

証明書を作成。

<code>
/usr/bin/openssl ca -in ./csr.pem -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out ./cert.pem
</code>

「/etc/apache2/ssl」に「cert.pem」ができてればOK。
(なぜか参考にしたページのような質問はなかった。)

続いてApache2の設定。
既に「/etc/apache2/sites-available」あるサイト設定(以下の例は(default))を「default-ssl」(ファイル名は使用するサイト設定にあわせてください)コピーします。SSLを有効にしたいサイトはすべて行ってください。
そのファイルを以下のように編集します。

<code>
NameVirtualHost * =&gt; NameVirtualHost *:443
virtualhost * =&gt; virtualhost *:443
ServerName(あるいはServerAliasも) hogehoge.com =&gt; ServerName hogehoge.com:443
</code>

以下を追加

<code>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/demoCA/cacert.pem
SSLCertificateKeyFile /etc/apache2/ssl/demoCA/private/cakey.pem
</code>

このサイト設定を有効にする為に(このコマンドは最近知った。自動でsites-enabledにシンボリックリンクを作成してくれる。)

<code>
#a2ensite default-ssl
</code>

さらにポート443からの接続を受けるために「/etc/apache2/ports.conf」に「Listen 443」を追加して保存。

そしてApache2の再起動

<code>
# /etc/init.d/apache2 restart
</code>

これで「https://」で接続できれば成功。この証明書は信頼されていませんとでますがこれはどうしようもありません、お金を払って「VeriSign」などから証明書をもらえばこの問題も解決します。
証明書のサンプル

ついでにphpMyAdminへの接続を「http」からは接続できないようにすることもできます。セキュリティーを考えていろいろ設定しましょう。基本的にSSLなしとSSLありの設定は別サイトとして扱われるので共通の編集はどちらにもしましょう。

今回参考にさせていただいたサイト。
mod_sslの設定
暗号化通信の有効化 [mod_ssl]

phpMyAdmin接続エラー

phpMyAdminを開くと「Internal Server Error」が表示されて接続できなくなっていました。
原因を探すために「/var/log/apache2/error.log」を確認すると以下のようなものがありました。
「/var/www/phpmyadmin/.htaccess: Option FollowSymLinks not allowed here」
「FollowSymLinksでは.htaccessは使用できないのに.htaccessがあるよ。(意訳)」ということなのでドキュメントルートにphpMyAdminのシンボリックリンクを作成する方法をやめサイト設定を編集し以下のようなものを追加しました。
以前の記事でBASIC認証をかけるために一部既に書いてあるので以下のようになるように修正したとするほうがいいでしょうか。「.htpasswd」のパスなどは環境に合わせてください。

<code>
        Alias /phpmyadmin/ /var/www/phpmyadmin/
        &lt;directory "/var/www/phpmyadmin"&gt;
                AuthType Basic
                AuthName "phpMyAdmin"
                AuthUserFile /var/.htpasswd
                Require user hogehoge
                AllowOverride All
        &lt;/directory&gt;
</code>

と編集しドキュメントルートにあるphpMyAdminへのシンボリックリンクは削除しておきましょう。
ちゃんとApache2は再起動しましょう。
これでちゃんと接続できるようになりました。
phpMyAdminログイン画面

P.S.
はやくApache2をSSL通信に対応させたいのですが、なかなかうまくいかなくて…
でき次第投稿します。

Moguraでアクセス解析

せっかくホームページを作ったのでどれぐらいの方が見に来てくれているのかわかるといいですよね。
ということで「Mogura」というツールを使ってアクセス解析をしようとおもいます。
公式ページはこちらです。
説明によるとMySQL + PEARが必要ですとあり、GDを使用する機能もあります。
PEAR以外はインストールしたので「PEAR」をインストールします。

<code>
$ su
# apt-get install php4-pear
# /etc/init.d/apache2 restart
</code>

次にMoguraをダウンロードし、説明通り/inc/config.phpの設定を編集します。
このときデータベースの名前を決めWordPressのインストール時のようにphpMyAdminからその名前のデータベースを作っておきます。
Moguraフォルダをドキュメントルートにコピーします。
ブラウザから「http://サーバーのアドレス/mogura/setup.php」にアクセスします。
セットアップが完了したら説明通りsetup.phpは削除しておきましょう。
「http://サーバーのアドレス/mogura/w3a.php」が今後アクセス解析を確認するページです。

次にログを取得するためのタグを追加しましょう。
Moguraのトップページの左のメニューの「コントロールパネル」をクリックし「ログ取得用」をクリックします。
Moguraログ管理
使うのは「WriteType:JavaScript and Image (拡張子がPHP以外のページ)」です。このタグをコピーしておきます。
これをテーマファイルの「header.php」の「div id=”left-col”」の行の下に貼付けて保存します。
これでOKです。

WordPress MEをインストールしよう

こりゃまた前後しますが、
ApacheやPHP MySQLなどの環境が整ったのでホームページを作ろうと思います。
しかし、一から作るのは管理などが大変なので、「WordPress ME」というブログソフトウエアを使用したいとおもいます。
これを使えばたくさんのテンプレートから見た目を選んだり、各種拡張機能がたくさんあるので手軽にきれいなサイトを作成することができます。
これを日本語にローカライズしたのが「WordPress ME(Multilingual Edition)」です。
まずはSQLに「WordPress用のユーザー」「WordPress用のデータベース」を「phpMyAdmin」を使って作成します。「phpMyAdmin」をつかって「root」にログインしておいてください。

まずはユーザーを作成します。
トップページの「特権」をクリックします。
pma-tokken

次に「ユーザを追加する」をクリック
pma-AddUser

ログイン情報を入力
pma-LoginInfo
ユーザー名に「wordpress」(自由に変更してください)
ホストをローカル/localhost
パスワードも決めて入力してください。
グローバル特権は「データ」と「構造」に関する権限にすべてチェックしてください。
pma-GlobalTokken
「実行する」ボタンをクリックしユーザー登録を完了します。

次にトップページから新しくデータベースを作成します。
pma-AddWordPress
データベース名を決めて「utf8_unicode_ci」を選択し作成します。

次に「WordPress」をダウンロードし、ドキュメントルートに配置します。
WordPress JapanのダウンロードからWordPress のversion2.0系列あるいは2.3系列の最新版のmultilingual-editionをダウンロードします。
今回は「wordpress-2.0.11-multilingual-edition」をダウンロードし、解凍しフォルダーを好きな名前に変更しておきます。今回は「wordpress」というフォルダ名にしドキュメントルート(以下の例では/home/www/chibiegg/)にフォルダーごとコピーしました。
そしてこのフォルダー以下のパーミッションを777に変更します。

<code>
$ su
# chmod -R 777 /home/www/chibiegg/wordpress/
</code>

次にブラウザからインストール作業を行うため
「http://サーバーのIPアドレス/さっき決めたフォルダ名/」を開きます。先ほどのフォルダ名「wordpress」にすると「http://サーバーのIPアドレス/wordpress/」を開くことになります。以下のページが出ます。
WordPress ME セットアップトップ
「ウィザード」をクリック
WordPress ME セットアップ2
「こちらをクリック」をクリック

設定画面が出るので
データベース名を先ほど作った「wordpress」
ユーザー名も先ほど作った「wordpress」
パスワードはそのときのSQLのパスワード
ホスト名とテーブル接頭語はそのまま
ブログの文字エンコードは「UTF-8」
にして「submit」ボタンをクリックします。

「インストール」をクリック
次に「First Step »」をクリック。文字化けしている場合はブラウザのエンコードを「UTF-8」にする。
First Stepでブログ名とメールアドレスの設定
Second Stepに進むとユーザー名とパスワードが発行されるのでメモしておきます。
ログインして「マイアカウント」メニューからパスワードを好きなものに変更しておきましょう。
最後にパーミッションを755にします。

<code>
$ su
# chmod -R 755 /home/www/chibiegg/wordpress/
</code>

これでWordPressのインストールは終了です。

Apache2に新しいサイトを登録

Apache2を使えば一つのサーバーで複数サイトの運営ができます。
例えば「http://hogehoge.com/」と「http://foobar.com/」といったページを一つのサーバーで管理し、全く違う内容にするということです。
それぞれのサイトの設定は「/etc/apache2/sites-available」に存在し、有効にするためには「/etc/apache2/sites-enabled」にそのサイトの設定のシンボリックリンクを作成することによってApacheに読み込ませることができます。

現在のデフォルトの状態では「/etc/apache2/sites-available」に「default」というサイト設定が。有効にするために「/etc/apache2/sites-enabled」に「000-default」という「default」のシンボリックリンクが作成されており、有効になっています。
では新しく「http://chibiegg.homeip.net/」というサイトを作ってみましょう。
しかしここで注意です。「chibiegg.homeip.net」という名前を自分のサーバーにただ登録すればそのアドレスが使えるようになる訳ではありません。
どこかのサービスを利用して(例:http://www.dyndns.com/http://ddo.jp/)DDNSサービスやDNSサービスに登録する必要があります。
これについては今度言及しようと思いますので、googleなどで検索してみてください。「ddo.jp」は日本語なのでおすすめです。今回は「dyndns」で「chibiegg.homeip.net」を取得したとします。

それでは新しいサイト情報を「chibiegg-homeip」として作りましょう。このファイル名やアドレスは今後各自の情報にあわせてください。
このサイトのドキュメントルートは「/home/www/chibiegg」とします。このフォルダーも自由に変えていただいて構いません。

<code>
$ su
# mkdir /home/www/chibegg/
# cd /etc/apache2/sites-available
# vi chibiegg-homeip
</code>

とし新規作成します。
そして以下のように書きます。

<code>
NameVirtualHost *
&lt;VirtualHost *&gt;
	ServerAdmin webmaster@chibiegg.homeip.net
	DocumentRoot /home/www/chibiegg
	ServerAlias chibiegg.homeip.net
	&lt;Directory /&gt;
		Options -Indexes FollowSymLinks
		AllowOverride None
	&lt;/Directory&gt;
	&lt;Directory /home/www/chibiegg/&gt;
		Options -Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		Allow from all
	&lt;/Directory&gt;
	ErrorLog /var/log/apache2/error.log
	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn
	CustomLog /var/log/apache2/access.log combined
	ServerSignature On
&lt;/VirtualHost&gt;
</code>

「ServerAdmin」にメールアドレス
「ServerAlias」に取得したドメイン
「DocumentRoot」にドキュメントルート
2つめの「Directory」にドキュメントルート
にするということです。
さらにこのアドレスからも「phpMyAdmin」に接続したければ以前の記事をもとにドキュメントルートに「phpMyAdmin」のシンボリックリンクを作成し、必要であればこのサイト設定にもBASIC認証の設定をつけてください。

続いてこの作成したサイト設定のシンボリックリンクを「/etc/apache2/sites-enabled」に「001-chibiegg-homeip」という名前で作成し、最後にapache2を再起動します。

<code>
# cd /etc/apache2/sites-enabled
# ln -s /etc/apache2/sites-available/chibiegg-homeip ./001-chibiegg-homeip
# /etc/init.d/apache2 restart
</code>

確認するために新しいサイトのドキュメントルートに以下のような「index.htm」をつくります。

<code>
  &lt;html&gt;
    &lt;body&gt;
      &lt;h1&gt;It works! on chibiegg.homeip.net&lt;/h1&gt;
    &lt;/body&gt;
  &lt;/html&gt;
</code>

確認のために「http://chibeigg.homeip.net/index.htm」(取得したドメイン)でブラウザから接続しましょう。

It works! on chibiegg.homeip.net

と出ればOK

MySQLの確認とphpMyAdminのインストール

すいません順番が前後していますが、

今回は「MySQL」の確認のついでに「phpMyAdmin」をインストールします。
phpMyAdminはブラウザ経由で「MySQL」の管理ができるツールです。
まずは「phpMyAdmin」をインストールします。

<code>
$ su
# apt-get install phpmyadmin
</code>

phpMyAdminは「/usr/share/phpmyadmin」にインストールされるのでこのフォルダーをApache2でブラウザ経由でみれるようにしましょう。
今回は「/usr/share/phpmyadmin」へのシンボリックリンクを「/var/www」に作成することで実現したいと思います。

<code>
# cd /var/www
/var/www# ln -s /usr/share/phpmyadmin ./
</code>

では、ブラウザから「http://サーバーのIPアドレス/phpmyadmin」を開いてみましょう。以下のような画面がでれば「phpMyAdmin」のインストールは成功です。
phpMyAdminログイン画面
ユーザー名は「root」
パスワードは前回設定したMySQLのrootのパスワード
を入力しログインします。
ここでエラーがなくログインできれば「MySQL」のインストールも成功です。
このままでは「phpMyAdmin」のログイン画面まで誰でも開くことができてしまいます。これを防ぐためにログイン前にもパスワードを設定しましょう。以下のようなWebサーバーのBASIC認証を使用します。
BASIC認証の例
まずはBASIC認証に必要なユーザー名とパスワードのリスト(.htpasswd)を「/var」(どこでも構いません)に作ります。以下の例では新しく.htpasswdを作成しhogehogeというユーザーを作るということです。

<code>
# cd /ver
/var# htpasswd -c .htpasswd hogehoge
New password: ここにパスワードを入力(実際は表示されない)
Re-type new password: もう一度入力(実際は表示されない)
</code>

「New password」「Re-type new password」を入力するときはキーを押しても表示されませんが入力されていますので注意。
二回目以降ユーザーを登録する場合は[-c]オプションを外して以下のように。

<code>
# cd /ver
/var# htpasswd .htpasswd hogehoge2
New password: ここにパスワードを入力(実際は表示されない)
Re-type new password: もう一度入力(実際は表示されない)
</code>

次にこのパスワードを使って「phpMyAdmin」のアドレスに「BASIC認証」をかけましょう。そのためにはApache2のサイト設定を変更します。
「/etc/apache2/sites-available/default」を編集します。

<code>
# vi /etc/apache2/sites-available/default
</code>

以下のものをどこかの「」の後にでも追記します。

<code>
        &lt;Directory "/var/www/phpmyadmin"&gt;
                AuthType Basic
                AuthName "phpMyAdmin"
                AuthUserFile /var/.htpasswd
                Require user hogehoge
        &lt;/Directory&gt;
</code>

「/var/.htpasswd」と「hogehoge」のところは適時変更してください。
これによって

実ディレクトリの「/var/www/phpmyadmin」への接続には「BASIC認証」が必要で「/var/.htpasswd」のユーザー「hogehoge」がログインできます。

ということになります。

複数のユーザー名でログインできるようにするには
「Require user hogehoge hogehoge2」のようにスペースでユーザーを区切ってください。

さらに設定を有効にするためにApache2を再起動します。

<code>
# /etc/init.d/apache2 restart
</code>

もう一度phpMyAdminを開くと
BASIC認証の例
のように認証を求められログインできれば成功です。

WordPressでサムネイル作成の有効化とサイズ変更

WordPressには標準で画像をアップデートするときにサムネイルを作成してくれますがなぜか「GD」という画像編集機能がインストールされていなかったのでインストールします。

<code>
$ su
# apt-get install php4-gd
# /etc/init.d/apache2 restart
</code>

これで投稿画面にあるアップロードから画像をアップロードするとサムネイルが作成されるようになりました。

次にサムネイルのサイズを変更しようともいます。
標準では128×96のうち小さい方にあわせられるようになっているが、ちょっと小さいので400×300にしようとおもいます。これはソースの関係上4:3がいいです。
編集するファイルは「WordPressフォルダ/wp_admin/inline-uploading.php」です。
90行目ぐらいに以下のような記述があります。

<code>
	if ( $imagedata['width'] * $imagedata['height'] &lt; 3 * 1024 * 1024 ) {
		if ( $imagedata['width'] &gt; 128 &amp;&amp; $imagedata['width'] &gt;= $imagedata['height'] * 4 / 3 )
			$thumb = wp_create_thumbnail($file, 128);
		elseif ( $imagedata['height'] &gt; 96 )
			$thumb = wp_create_thumbnail($file, 96);

		if ( @file_exists($thumb) ) {
			$newdata = $imagedata;
			$newdata['thumb'] = basename($thumb);
			update_post_meta($id, '_wp_attachment_metadata', $newdata, $imagedata);
		} else {
			$error = $thumb;
		}
	}
</code>

この中の「128」と「96」をすべて以下のように「400」と「300」に変更しましょう。

<code>
	if ( $imagedata['width'] * $imagedata['height'] &lt; 3 * 1024 * 1024 ) {
		if ( $imagedata['width'] &gt; 400 &amp;&amp; $imagedata['width'] &gt;= $imagedata['height'] * 4 / 3 )
			$thumb = wp_create_thumbnail($file, 400);
		elseif ( $imagedata['height'] &gt; 300 )
			$thumb = wp_create_thumbnail($file, 300);

		if ( @file_exists($thumb) ) {
			$newdata = $imagedata;
			$newdata['thumb'] = basename($thumb);
			update_post_meta($id, '_wp_attachment_metadata', $newdata, $imagedata);
		} else {
			$error = $thumb;
		}
	}
</code>

これでサムネイルのサイズも変更できます。

Apache2 + PHP + MySQLのインストール

今回はサーバらしくWebサーバーのインストールをしたいとおもいます。
今回は「apache2」とよく使う「PHP4」「MySQL」もインストールします。

まずは「Apache2」から

<code>
$ su
# apt-get install apache2
</code>

続いて「PHP4」「MySQLServer」

<code>
# apt-get install php4 php4-dev
# apt-get install mysql-server
# apt-get install libapache2-mod-php4
</code>

これでインストールは完了。
このままでは「MySQL」 のrootパスワードが空なのでrootパスワードを設定します。この「root」ユーザーはDebianの「root」ユーザーとは関係ありません。(同じパスワードにしてもいいですが。)

<code>
# /usr/bin/mysqladmin -u root password '設定するパスワード'
</code>

としておきましょう。

ではそれぞれ確認をしていきます。
サーバー自身なら「http://localhost/」あるいはLANにつながっているコンピューターのブラウザから「http://サーバーのIPアドレス/」
に繋いでみましょう。
自動的に「http://サーバーのIPアドレス/apache2-default/」にリダイレクトされて

It works!

と出れば「Apache2」のインストールは成功しています。

次に「PHP4」の確認をしましょう。
Apache2では標準で「/var/www」をドキュメントルートとしています。
ドキュメントルートとは「http://サーバーのIPアドレス/」と接続されたときにこのフォルダーを示すということです。
つまり「http://サーバーのIPアドレス/index.htm」は「/var/www/index.htm」を示すということです。
「PHP4」の確認をするために実際に何か「php」のスクリプトを「/var/www」に作ってみましょう。

<code>
# vi /var/www/test.php
</code>

として新しく「test.php」を作成し

<code>
  &lt;html&gt;
  &lt;head&gt;
  &lt;title&gt;php information&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;?php phpinfo(); ?&gt;
  &lt;/body&gt;
  &lt;/html&gt;
</code>

と記述して保存します。
先ほどと同じようにブラウザから「http://サーバーのIPアドレス/test.php」へ接続し、PHPの情報が表示されれば成功です。
phpinfoの一例

では「MySQL」の確認は「phpMyAdmin」のインストールとともに次回にしたいと思います。