さて、今回は、apacheのインストール手順です。
これができれば、Wordpress,Joomla!などphp + mysqlの組み合わせのCMSは、ほとんどインストールできるようになります。
では、早速、インストールしてみましょう。
- 目次
- 履歴
2010年7月17日 初版
apacheのバージョンを選択する
まずは、バージョンを選択しなければなりません。 FeeBSD 8.0では、以下のapacheのバージョンがports対応しているようです。
- apache1.3系
portsディレクトリ
- /usr/ports/www/apache13
— apache1.3系本体
- /usr/ports/www/apache13+ipv6
— apache1.3系本体+ipv6対応
- /usr/ports/www/apache13-modperl
— apache1.3系本体+modperl対応
- /usr/ports/www/apache13-modssl
— apache1.3系本体+modssl対応
- /usr/ports/www/apache13-modssl+ipv6
— apache1.3系本体+modssl,ipv6対応
- /usr/ports/www/apache13-ssl
— apache1.3系本体+ssl対応
- /usr/ports/www/apache13
- apache2.0系
portsディレクトリ
- /usr/ports/www/apache20
— apache2.0系本体
- /usr/ports/www/apache20
- apache2.2系
portsディレクトリ
- /usr/ports/www/apache22
— apache2.2系本体
- /usr/ports/www/apache22-peruser-mpm
— apache2.2系 ユーザ毎
- /usr/ports/www/apache22
ここでは、apache2.2系の安定版である標準をインスールしてみましょう。 もし、どのバージョンが良いか迷ったら、apache2.2系で良いと思います。 apache1.3系は、セキュリティの面から対応されなくなりつつあります。
apacheをインストールする
先で決めたバージョンを、FreeBSDでは、おなじみのportsでインストールします。 ここでは、apache2.2系をインストールします。
- apache2.2系のportsディレクトリへ切り替える
$ cd /usr/ports/www/apache22 $
- apache2.2系をインストールする
$ make BATCH=yes WITH_SUEXEC=yes SUEXEC_DOCROOT=/home WITHOUT_IPV6=yes install clean ...
ここで指定すべきは、WITH_SUEXECぐらいです。suEXEC をサポートするかどうかです。 suEXEC とは、Apache ユーザは Web サーバを実行しているユーザ ID とは 異なるユーザ ID で CGI プログラムや SSI プログラムを実行することができる機能です。 あまり詳しくない方は、設定しなくても良いと思います。
apacheのバージョンによっては、うまくコンパイルができないことがあります。 特に、新しい目(FreeBSDのバージョンで標準にリリースしているものでないもの)は、うまくいかないことがあります。 筆者も、例にもれず、多いに苦しみました。 まあ、これが技術力を磨いてくれるんですけどね。でも、苦しんでいる本人にとっては、「藁をもすがる」思いですよね。 筆者の場合は、Apacheの2.2系の最新へアップデートしようとして多いに苦しみました。
/usr/local/build-1/libtool: not found
こんなエラーが出力されて・・・。わけがわからん?
いろいろ調べてみると、どうもaprが何やらアンマッチを起こしているらしく、aprをリメイクしてげるとうまくいきました。
関連するperl5.8,libiconv,python25も同時にリメイクしてみました。 同じバージョンが入っていれば、リメイクの必要はありません。 やる前に、aprがどんなものが入っているかを確認した方が良いかもしれません。 筆者は、これでうまくいきました。 やる前は、$ cd /usr/ports/lang/perl5.8 $ make WITHOUT_USE_PERL=yes install clean ... $ cd /usr/ports/converters/libiconv $ make -DBATCH WITH_EXTRA_PATCHES=yes install clean ... $ cd /usr/ports/lang/python25 $ make -DBATCH WITHOUT_IPV6=yes install clean ... $ cd /usr/ports/devel/apr $ make -DBATCH APR_UTIL_WITH_BERKELEY_DB=yes APR_UTIL_WITH_LDAP=yes install clean ...
と出力されていたので、まず、このパッケージを削除しました。$ pkg_which /usr/local/lib/libaprutil-1.so.3 apr-devrandom-gdbm-db42-1.4.2.1.3.9_1 $ pkg_delete apr-devrandom-gdbm-db42-1.4.2.1.3.9_1 $
以下のように変わりました。$ pkg_which /usr/local/lib/libaprutil-1.so.3 apr-devrandom-gdbm-db42-1.4.2.1.3.9_1
$ pkg_which /usr/local/lib/libaprutil-1.so.3 apr-ipv6-gdbm-db42-1.3.8.1.3.9
- http.confを編集する
ウェブサーバー(httpd)の基本設定を編集します。
$ cp /usr/local/etc/apache22/httpd.conf /usr/local/etc/apache22/httpd.conf.org $ vi /usr/local/etc/apache22/httpd.conf ...
デフォルトのhttp.confをコピーして、バックアップしておきます。
その後、編集を開始します。
編集内容は、下記のとおりです。
例では、ドメイン名をaaa.comとして設定しています。
... # ウェブマスター(管理者)のメールアドレスを指定する ServerAdmin postmaster@aaa.com ... # ウェブサーバー名を指定する ServerName www.aaa.com:80 ... # ウェブディレクトリのルートを指定する # "/home/www/public_html"は、事前に作成しておく DocumentRoot "/home/www/public_html" ... # ウェブディレクトリの設定を行う # "/home/www/public_html"は、事前に作成しておく <Directory "/home/www/public_html"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # ... Options Includes ExecCGI FollowSymLinks ... AllowOverride All ... # # Controls who can get stuff from this server. # Order allow,deny Allow from all ... </Directory> # ウェブディレクトリのデフォルトインデックスにphpも含めるように設定する <IfModule dir_module> DirectoryIndex index.html index.htm index.php index.cgi </IfModule> ... # エラーログファイルを設定する ErrorLog /var/log/httpd/aaa_com-error.log ... # アクセスログファイルの書き込み条件を設定する <IfModule log_config_module> SetEnvIf Request_URI "default\.ida" nolog SetEnvIf Request_URI "cmd\.exe" nolog SetEnvIf Request_URI "root\.exe" nolog SetEnvIf Request_URI "Admin\.dll" nolog SetEnvIf Request_URI "NULL\.IDA" nolog SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(css)$" nolog CustomLog /var/log/httpd/aaa_com-access.log combined env=!nolog </IfModule> ... # 拡張子 phpのmimeを設定する <IfModule mime_module> AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-httpd-php .php AddHandler cgi-script .cgi .pl </IfModule> ... # 言語設定ファイルを有効にする Include etc/apache22/extra/httpd-languages.conf ... # ユーザディレクトリ設定ファイルを有効にする Include etc/apache22/extra/httpd-userdir.conf ... # バーチャルホスト設定ファイルを有効にする # サブドメインやマルチドメインを使う場合は、以下のファイルを編集する Include etc/apache22/extra/httpd-vhosts.conf ... # デフォルト設定ファイルを有効にする Include etc/apache22/extra/httpd-default.conf ... # SSL設定ファイルを有効にする(SSLを使わない人は、コメントのままで可) Include etc/apache22/extra/httpd-ssl.conf ...
編集を終えたら、保存して終了です。
- http-languages.confを編集する
ウェブサーバー(httpd)の言語設定を編集します。
$ vi /usr/local/etc/apache22/extra/httpd-languages.conf ...
編集を開始します。
編集内容は、下記のとおりです。
例では、日本語を最優先で使用するように設定しています。
... # AddLanguageを設定している先頭に追加する AddLanguage ja .ja ... # 日本語をLanguagePriority のパラメータの先頭へ移動する LanguagePriority ja en ca ..... ...
編集を終えたら、保存して終了です。
- http-userdir.confを編集する
ウェブサーバー(httpd)のユーザ設定を編集します。
$ vi /usr/local/etc/apache22/extra/httpd-userdir.conf ...
編集を開始します。
編集内容は、下記のとおりです。
例では、ユーザディレクトリでの.htaccessの許可とCGI,SSIを許可しています。
<Directory "/home/*/public_html"> ... # .htaccess許可 AllowOverride All ... # CGI,SSIを許可。ファイル一覧表示禁止 Options Includes ExecCGI FollowSymLinks ... </Directory>
編集を終えたら、保存して終了です。
- http-vhosts.confを編集する
ウェブサーバー(httpd)のバーチャルホスト設定を編集します。
$ mv /usr/local/etc/apache22/extra/httpd-vhosts.conf /usr/local/etc/apache22/extra/httpd-vhosts.conf.org $ vi /usr/local/etc/apache22/extra/httpd-vhosts.conf ...
デフォルトのhttpd-vhosts.confは、ファイル名を変更して保存しておきます。
編集を開始します。
編集内容は、下記のとおりです。
例では、www.aaa.comのサイトと、デフォルトのサイトを設定しています。
NameVirtualHost *:80 <VirtualHost *:80> ServerName any DocumentRoot /tmp </VirtualHost> <VirtualHost *:80> ServerName www.aaa.com ServerAlias aaa.com ServerAdmin postmaster@aaa.com DocumentRoot /home/www/public_html SuexecUserGroup webact www ErrorLog /var/log/httpd/aaa_com-error.log CustomLog /var/log/httpd/aaa_com-access.log combined env=!nolog </VirtualHost>
ここで注意すべきは、SuexecUserGroupです。 ここで指定したユーザ名、グループ名で、cgiやphpのスクリプト、実行ファイルは起動されるため、権限を与えすぎるとセキュリティ面が弱くなります。
ここでは、 ユーザ名:webact グループ名:www と指定しています。
十分、考慮の上、指定しましょう。
先頭に指定されているVirtualHostが、デフォルトのサーバーとなります。
例えば、変なURL(IPアドレスなど)でサイトへアクセスした場合、このデフォルトのサーバーとなります。
DocumentRoot /tmp で設置しているHTMLファイルなどが表示されることに注意しなければなりません。
この設定は、ちゃんとしておかないと、訪問者が意図したページじゃないサイトがアクセスされたりするので、スパムや怪しいサイトのように誤解されるかもしれませんから、ちゃんと、エラー表示するなり、アクセス方法は間違っていることを通知するのが良いと思います。
編集を終えたら、保存して終了です。
- http-default.confを編集する
ウェブサーバー(httpd)のデフォルト情報設定を編集します。
$ vi /usr/local/etc/apache22/extra/httpd-default.conf ...
編集を開始します。
編集内容は、下記のとおりです。
例では、Apacheの情報を消すように設定しています。
... # サーバーの情報を隠す ServerTokens Prod ... # Apacheのバージョン情報を隠す ServerSignature Off ...
サーバーの情報を非公開にすることでアタック(不正アクセス)を回避したいのでしょうが、これが、どれほどの意味があるかは微妙なところです。
やらないより、やっといた方が、まだましかなぁ。。。ぐらいです。残念ながら。
アタック(不正アクセス)しようとする人は、ハッカーと呼ばれる非常にサーバーを含めたコンピュータに長けた人も多いです。 そういう人にとって、このウェブサーバーが何を使っているかぐらいは、すぐに引き出せるんじゃないかと・・・思うんですけどね。
さっきも言いましたが、やらないより、やっといた方が、まだましかなぁ。。。ぐらいです。
編集を終えたら、保存して終了です。
- mod_deflateを編集する
mod_deflateは、ウェブサーバー(httpd)のデータ転送方法を規定できます。 データ転送方法と言っても、圧縮でデータを送信するかどうかです。 つまり、伝送データを圧縮して送れば、伝送速度がひ弱なADSLでもサーバーとして成り立つ訳です。 回線の弱い部分をサーバーのCPU速度で補うようなやり方ですね。
合わせて、ページの賞味期限を設定するmod_expireを設定することもありますが、 最近では、あまり使われなくなっているみたいです。
まあ、mod_expireもサーバーへの負荷を減らすための手法ではありますが、ここでは、特に説明しません。 興味のある方は、Googleで検索すれば、出てきます。
$ vi /usr/local/etc/apache22/Includes/deflate.conf ...
編集を開始します。
編集内容は、下記のとおりです。
例では、各ブラウザ毎に圧縮の有効無効を設定しています。
<Location /> # Insert filter SetOutputFilter DEFLATE # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48 # the above regex won't work. You can use the following # workaround to get the desired effect: BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # Don't compress images SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png|ico|z|taz|t?gz|t?bz2?|zip|lzh|sit|rar|pdf|mp3|ogg|wma|rm|wmv|mov|mpe?g)$ \ no-gzip dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary </Location>
各パラメータの意味は、以下のとおりです。
no-gzip : 圧縮なし
gzip-only-text/html : HTMLのみ圧縮あり
SetEnvIfNoCaseで設定しているものは、既に圧縮されているファイル形式を指定していて、ここで指定されているファイル形式は、圧縮しないというものです。
編集を終えたら、保存して終了です。
- http-ssl.confを編集する
ウェブサーバー(httpd)のSSLバーチャルホスト設定を編集します。
基本的に、バーチャルホスト設定の設定と代わりません。格安レンタルサーバーでも、独自SSLを使いたい方には、必見かもしれません。
SSL証明書の作り方をここでは、説明しますが、認証会社からSSL証明書を購入する際には、ここでいうCSRファイルが必要になります。
この流れを理解しているとSSLの導入も楽に行えるかもしれません。
参考記事:
独自SSLを使いたい方やSSL証明書持込みたい方へのおすすめは…
共有SSLを使いたい方へのおすすめは…
SSLとは…
SSL証明書とは…
共有SSLと独自SSLの違いは…
CSRとは…
EV-SSL証明書とは…
$ mv /usr/local/etc/apache22/extra/httpd-ssl.conf /usr/local/etc/apache22/extra/httpd-ssl.conf.org $ vi /usr/local/etc/apache22/extra/httpd-ssl.conf ...
デフォルトのhttpd-ssl.confは、ファイル名を変更して保存しておきます。
編集を開始します。
編集内容は、下記のとおりです。
例では、www.aaa.comのサイトと、デフォルトのサイトを設定しています。
AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache "shmcb:/var/run/ssl_scache(512000)" SSLSessionCacheTimeout 300 SSLMutex "file:/var/run/ssl_mutex" NameVirtualHost *:443 <VirtualHost *:443> ServerName any DocumentRoot /tmp </VirtualHost> <VirtualHost *:443> ServerName www.aaa.com ServerAlias aaa.com ServerAdmin postmaster@aaa.com DocumentRoot /home/www/public_html SuexecUserGroup webact www ErrorLog /var/log/httpd/aaa_com-error.log CustomLog /var/log/httpd/aaa_com-access.log combined env=!nolog TransferLog /var/log/httpd/aaa_com-transfer.log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile "/usr/local/etc/apache22/ssl.crt/server.crt" SSLCertificateKeyFile "/usr/local/etc/apache22/ssl.key/server.key" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/usr/local/www/apache22/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost>
ここで注意すべきは、SSLCertificateFile、SSLCertificateKeyFileです。 それぞれ認証用のファイルですので、自分で作成する必要があります。
ここで、指定している /usr/local/etc/apache22/ssl.key/、/usr/local/etc/apache22/ssl.crt/ にそれぞれサーバーの秘密鍵ファイルと、証明書ファイルを作成する必要があります。
以下の手順でファイルを作成します。
- 各認証ファイル設置用のディレクトリを作成
$ cd /usr/local/etc/apache2/ $ mkdir -m 0700 ssl.{key,crt} $
この中に入るファイルを他人にのぞかれないよう、あらかじめディレクトリのパーミッションを設定しておきます。
- 秘密鍵ファイルを作成
$ cd ssl.key/ $ openssl genrsa -out server.key 1024 $
opensslで簡単に作成完了です。
- CSRファイル(認証ファイル)を作成
$ openssl req -new -key server.key -out server.csr Country Name (2 letter code) [AU]:国名 State or Province Name (full name) [Queensland]:都道府県名 Locality Name (eg, city) []:市区町村名 Organization Name (eg, company) [Mincom Pty Ltd]:会社名 Organizational Unit Name (eg, section) [MTR]:部署名 Common Name (eg, YOUR name) []:ドメイン名 Email Address []:メールアドレス Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:パスワード(通常はなし) An optional company name []:別の会社名(通常はなし) $
先に作成した秘密鍵ファイルから認証ファイルを作成します。
対話形式で、上記の項目を設定する必要があります。
このファイルから、第3者の認証局(機関)から認証してもらう必要がありますが、これが年間数万円必要で、ちょっと、「お試しで」というわけにもいきませんね。 そこで、ここでは、単純に自画自賛?で自分で認証しておきましょう。ここでは、技術の習得がメインですから。
- 自己認証する
$ openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 $ mv server.csr ../ssl.crt/. $ cd ../ssl.crt/
daysオプションは、この証明書の有効期限を指定します。
ここでは、365日としています。
作成した認証ファイルを、ssl.crt/へ移動して完了です。
この自己認証のファイルでは、SSLでアクセスすると、通常、以下のような警告メッセージがブラウザに表示されます。
いくらセキュリティ面で強化されても、このような画面が表示されたら、ちょっと引いちゃいますよね・・・。
そのためにも第3者の認証局(機関)から認証してもらう必要があるんですね。認証局(機関)から認証されている場合、ほとんどのブラウザ(一般的に98%程度に対応している言われています)では、このような警告メッセージは表示されません。
よくできた天下り先・・・あっ、言っちゃった。
まあ、でも、こういうのも必要なくらい怪しいサイトも多いということですね。
認証局(機関)から認証してもらうのも、実在する法人・個人であるか確認されます。書類確認、電話確認等々で毎年行われますから、実在していることは確かですが、安全な会社、人物を保障するものではありません。
最低限の認証ですね。また、この認証で、履歴から、問題があった場合に法人・個人を特定できる仕組みを提供しているんですね。
それでも、個人的には、高い・・・と思いますけどね。 ・・・あっ、言っちゃった。
編集を終えたら、保存して終了です。
- 各認証ファイル設置用のディレクトリを作成
- apacheのログディレクトリを作成
$ mkdir /var/log/httpd $ chown www: /var/log/httpd
ログディレクトリとオーナーを設定しています。
ログのファイル名や条件などは、各バーチャルホストの設定でバーチャルホスト毎にhttpd-vhosts.confで設定します。
また、SSLバーチャルホストは、同様にhttpd-ssl.confで設定します。
ErrorLog, CustomLog, TransferLog で設定しているのがそれぞれログファイルです。
- ログファイルのローテーションを設定
$ vi /usr/local/etc/logrotate.d/apache22 ...
apache用のログローテーション設定ファイルを編集します。
/var/log/httpd/*log { daily rotate 4 create nocompress missingok sharedscripts postrotate /usr/local/sbin/apachectl -k graceful endscript }
ログローテーションがインストールされていない場合は、インストールから始めます。
FreeBSDでlogrotateをインストール を参照してください。
- apacheをリブートしても起動するように設定
$ vi /etc/rc.conf ...
# apache22を有効にします。 apache22_enable="YES" # apache22SSLを有効にします。 apache22ssl_enable="YES"
- 最後に、apacheを起動します。
$ /usr/local/etc/rc.d/apache22 start ...
|
いやや、やっとです。ほんとにやっとです。
ウェブサーバーが立ち上がり、サイトの構築へ一歩踏み出せました。
長すぎです・・・。
まあ、格安レンタルサーバーにはない充実感はありますね。
でも、やっぱり、好きじゃないとなかなか難しい・・・・とあらためて思う筆者でした。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
2011年7月24日, 10:13 PM
[…] 設定についてはFreeBSDでapacheをインストール参照。 カテゴリー: コンピューター タグ: UNIX/Linux コメント (0) トラックバック (0) コメントをどうぞ トラックバックURL […]
2012年1月21日, 10:56 AM
[…] FreeBSDでapacheをインストール – 設定が詳しい […]