FreeBSDにApacheをインストールするメモ。
httpとhttpsをnamebased virtual hostで動作させてみます。
Apacheはportsからインストール(現在のバージョンは2.2.16の模様)
portinstall -f www/apache22
ちなみにコンパイルオプションはこんな感じに。
インストール終了後、Apacheの設定ファイルを修正。
portsのapahce22をインストールすると、設定ファイル関連は/usr/local/etc/apache22に置かれる。
- /usr/local/etc/apache22/httpd.confの修正
httpd.confはapacheの基本設定を行うファイル。ホスト毎の設定は別にファイルを作ってインクルードするので、修正は最小限にとどめる。- 待ち受けポートを80番に指定(3行目)
- Server管理者をwebmaster@hogehoge.jpに(68行目)
- サーバ名をwww.hogehoge.jpに(70行目)
- ディレクトリインデックスにindex.shtml・index.cgi・index.phpを追加(88行目)
- mime関連見直し(125~140行目)
- バーチャルホスト設定ファイルインクルード(161行目)
- SSL/TLS設定ファイルインクルード(173行目)
57行目にあるようにphp5_moduleの設定は、ports経由でphp5をインストールすると自動で定義されるので、手動追加しない。
[sourcecode lang=”text”]
ServerRoot <"/usr/local">Listen 80
LoadModule authn_file_module libexec/apache22/mod_authn_file.so
LoadModule authn_dbm_module libexec/apache22/mod_authn_dbm.so
LoadModule authn_anon_module libexec/apache22/mod_authn_anon.so
LoadModule authn_default_module libexec/apache22/mod_authn_default.so
LoadModule authn_alias_module libexec/apache22/mod_authn_alias.so
LoadModule authz_host_module libexec/apache22/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache22/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache22/mod_authz_user.so
LoadModule authz_dbm_module libexec/apache22/mod_authz_dbm.so
LoadModule authz_owner_module libexec/apache22/mod_authz_owner.so
LoadModule authz_default_module libexec/apache22/mod_authz_default.so
LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so
LoadModule auth_digest_module libexec/apache22/mod_auth_digest.so
LoadModule file_cache_module libexec/apache22/mod_file_cache.so
LoadModule cache_module libexec/apache22/mod_cache.so
LoadModule disk_cache_module libexec/apache22/mod_disk_cache.so
LoadModule dumpio_module libexec/apache22/mod_dumpio.so
LoadModule reqtimeout_module libexec/apache22/mod_reqtimeout.so
LoadModule include_module libexec/apache22/mod_include.so
LoadModule filter_module libexec/apache22/mod_filter.so
LoadModule charset_lite_module libexec/apache22/mod_charset_lite.so
LoadModule deflate_module libexec/apache22/mod_deflate.so
LoadModule log_config_module libexec/apache22/mod_log_config.so
LoadModule logio_module libexec/apache22/mod_logio.so
LoadModule env_module libexec/apache22/mod_env.so
LoadModule mime_magic_module libexec/apache22/mod_mime_magic.so
LoadModule cern_meta_module libexec/apache22/mod_cern_meta.so
LoadModule expires_module libexec/apache22/mod_expires.so
LoadModule headers_module libexec/apache22/mod_headers.so
LoadModule usertrack_module libexec/apache22/mod_usertrack.so
LoadModule unique_id_module libexec/apache22/mod_unique_id.so
LoadModule setenvif_module libexec/apache22/mod_setenvif.so
LoadModule version_module libexec/apache22/mod_version.so
LoadModule ssl_module libexec/apache22/mod_ssl.so
LoadModule mime_module libexec/apache22/mod_mime.so
LoadModule dav_module libexec/apache22/mod_dav.so
LoadModule status_module libexec/apache22/mod_status.so
LoadModule autoindex_module libexec/apache22/mod_autoindex.so
LoadModule asis_module libexec/apache22/mod_asis.so
LoadModule info_module libexec/apache22/mod_info.so
LoadModule suexec_module libexec/apache22/mod_suexec.so
LoadModule cgi_module libexec/apache22/mod_cgi.so
LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
LoadModule vhost_alias_module libexec/apache22/mod_vhost_alias.so
LoadModule negotiation_module libexec/apache22/mod_negotiation.so
LoadModule dir_module libexec/apache22/mod_dir.so
LoadModule imagemap_module libexec/apache22/mod_imagemap.so
LoadModule actions_module libexec/apache22/mod_actions.so
LoadModule speling_module libexec/apache22/mod_speling.so
LoadModule userdir_module libexec/apache22/mod_userdir.so
LoadModule alias_module libexec/apache22/mod_alias.so
LoadModule rewrite_module libexec/apache22/mod_rewrite.so
LoadModule php5_module libexec/apache22/libphp5.so<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>User www
Group www</IfModule>
</IfModule>ServerAdmin webmaster@hogehoge.jp
ServerName www.hogehoge.jp:80
DocumentRoot "/usr/local/www/apache22/data"
<Directory />
AllowOverride None
Order deny,allow
Deny from all
</Directory><Directory "/usr/local/www/apache22/data">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory><IfModule dir_module>
DirectoryIndex index.html index.shtml index.cgi index.php
</IfModule><FilesMatch "^.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>ErrorLog &quot;/var/log/httpd-error.log&quot;
LogLevel warn<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r" %>s %b \"%{Referer}i" \"%{User-Agent}i" %I %O" combinedio
</IfModule>CustomLog "/var/log/httpd-access.log" combined
</IfModule"<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin"
</IfModule><Directory "/usr/local/www/apache22/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>DefaultType text/plain
<IfModule mime_module>
TypesConfig etc/apache22/mime.typesAddType application/x-compress .Z
AddType application/x-gzip .gz .tgzAddHandler cgi-script .cgi
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml# PHP
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps</IfModule>
# Server-pool management (MPM specific)
#Include etc/apache22/extra/httpd-mpm.conf# Multi-language error messages
Include etc/apache22/extra/httpd-multilang-errordoc.conf# Fancy directory listings
#Include etc/apache22/extra/httpd-autoindex.conf# Language settings
Include etc/apache22/extra/httpd-languages.conf# User home directories
#Include etc/apache22/extra/httpd-userdir.conf# Real-time info on requests and configuration
#Include etc/apache22/extra/httpd-info.conf# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf# Local access to the Apache HTTP Server Manual
#Include etc/apache22/extra/httpd-manual.conf# Distributed authoring and versioning (WebDAV)
#Include etc/apache22/extra/httpd-dav.conf# Various default settings
#Include etc/apache22/extra/httpd-default.conf# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>Include etc/apache22/Includes/*.conf[/sourcecode]
- 証明書関連
自己認証局による認証はあまり意味が無いので認証を行わない証明書を作成する(暗号化通信が出来れば良いので)。- 証明書用ディレクトリ作成
/usr/local./etc/apache22の下にCERTという名称でディレクトリを作成する。以下の操作はこのディレクトリに移動して行う。
- サーバ用秘密鍵(server.key)の生成
dns# openssl genrsa -des3 -out server.key -rand rand.dat 1024
0 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
...........++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:サーバ用パスワードを入力
Verifying - Enter pass phrase for server.key: サーバ用パスワードを再入力
- サーバ用公開鍵(server.csr)の生成
ワイルドカード対応で作成するには、ドメイン名の入力時に「*.ドメイン」のように指定する。dns# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key: RastafactoryServerPass
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP(国際国別コード)
State or Province Name (full name) [Some-State]:Tokyo(県名)
Locality Name (eg, city) []:Shinjuku(都市名)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HOGEHOGE(組織名)
Organizational Unit Name (eg, section) []:Admin(部署名)
Common Name (eg, YOUR name) []:*.hogehoge.jp(ドメイン名)
Email Address []:webmaster@hogehoge.jp(管理者のメールアドレス)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:リターンのみ
An optional company name []:リターンのみ
- 起動時のパスフレーズ削除
このままサーバ証明書を作成すると、Apacheの起動時にserver.keyで指定したサーバ用パスワードを入力する必要が出てくるので、server.keyからパスワードを削除する。dns# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:サーバー用パスワードを入力
writing RSA key
- サーバ用証明書の生成
-daysオプションの最後は有効期間(日)となる。自己証明書なので3650日(10年)としてある。dns# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=JP/ST=Tokyo/L=Shinjuku/O=HOGEHOGE/OU=Admin/CN=*.hogehoge.jp/emailAddress=webmaster@hogehoge.jp
Getting Private key
- 証明書インポートファイル作成
dns# openssl x509 -in server.crt -out server.der -outform DER
- 証明書用ディレクトリ作成
- /usr/local/etc/apache22/extra/httpd-ssl.confの修正
httpd-ssl.confはssl関連の設定ファイル。
先程作成したSSL関連ファイルを、SSLCertificatefileでサーバ証明書、SSLCertificateKeyfileでサーバ暗号キーファイルを指定する。[sourcecode lang=”text”]
Listen 443
SSLStrictSNIVHostCheck offAddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crlSSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout 300SSLMutex "file:/var/run/ssl_mutex"
<VirtualHost *:443>
DocumentRoot "/usr/local/www/apache22/data"
ServerName www.hogehoge.jp:443
ServerAdmin webmaster@hogehoge.jp
ErrorLog "/var/log/httpd-error.log"
TransferLog "/var/log/httpd-access.log"SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/CERT/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/CERT/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.0CustomLog "/var/log/httpd-ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"</VirtualHost>[/sourcecode]
- /usr/local/etc/apache22/extra/httpd-vhosts.confの修正
httpd-vhosts.confはバーチャルホスト関連の設定ファイル。
httpとhttpsの両ポートをネームベースのバーチャルホスト運用として設定する。[sourcecode lang=”text”]
NameVirtualHost *:80
NameVirtualHost *:443[/sourcecode]
- ホスト毎の設定ファイル作成
ホスト毎の設定ファイルを作成する。設置場所は/usr/local/etc/apache22/Includesの下とし、各ファイルの最後を.confとすることで、自動で読込まれる。
以下の例は、Wordpressを運用しているwp.hogehoge.jpの例。- httpとhttpsの両方をネームベースのバーチャルホスト運用する最低限の設定としている。
- ドキュメントルートは/usr/local/www/jp/hogehoge/wpとした。
- httpsのVirtualHostディレクティブ内でもDirectoryディレクティブを使用してドキュメントルートなどの設定を行う必要がある。
[sourcecode lang=”text”]
<VirtualHost *:80>
ServerAdmin webmaster@hogehoge.jp
DocumentRoot /usr/local/www/jp/hogehoge/wp
ServerName wp.hogehoge.jp
LimitRequestBody 1048576
UserDir disabled
HostNameLookups ON
ScriptAlias /cgi-bin/ "/usr/local/www/jp/hogehoge/wp/cgi-bin
ErrorLog /usr/local/www/jp/hogehoge/wp/log/httpd-error.log
CustomLog /usr/local/www/jp/hogehoge/wp/log/httpd-access.log combined<Directory /usr/local/www/jp/hogehoge/wp/data>
AllowOverride FileInfo AuthConfig Limit Options
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Options ExecCGI Includes
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory><Directory /usr/local/www/jp/hogehoge/wp/cgi-bin>
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory></VirtualHost>
<VirtualHost *:443>
DocumentRoot /usr/local/www/jp/hogehoge/wp/data
ServerName wp.hogehoge.jp:443SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/CERT/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/CERT/server.key"<Directory /usr/local/www/jp/hogehoge/wp/data>
AllowOverride FileInfo AuthConfig Limit Options
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Options ExecCGI Includes
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory></VirtualHost>[/sourcecode]
- /etc/rc.confの修正
OS起動時にApacheが自動起動できるようにrc.confファイルに下記行を追加。[sourcecode lang=”text”]
# Apache22
apache22_enable="YES"
[/sourcecode]
Apacheの設定は以上で終了なので、rebootするかrehash等をして/usr/local/etc/rc.d/apache22 startを行う。
Apache起動後該当サイトにブラウザで接続して正しくコンテンツが参照できることを確認。
ネームベースバーチャルホストでのhttpsは証明書がおかしいとブラウザに言われる。ECサイトのように顧客に対して信頼性を提供するのであれば、費用が掛かるが対象となるブラウザでサポートされている認証局に証明書を認証してもらうべき。
社内用途で、セキュアなアクセスが必要な場合は、認証されていない証明書で十分。この場合はブラウザ側で証明書の取り込みを行えばよい。
- Firefoxの場合
「接続の安全性が確認できません」とアラートが表示される。
画面上の「危険性を理解したうえで接続するには」をクリックすると、「例外の追加」ボタンが表示される。
「例外の追加」ボタンをクリックすると「セキュリティ例外の追加」ウィンドウが表示されるので、その中の「次回工以降にもこの例外を有効にする」にチェックマークが入っていることを確認した後、「セキュリティ例外を承認する」ボタンをクリックする。 - IE(8)の場合
証明書の不備なサイトにアクセスすると、アドレスバーの横に「証明書のエラー」と表示される。
この部分をクリックすると、
と表示されるので、「証明書の表示」をクリックする。
証明書が表示されたら「証明書のインストール」ボタンをクリックする。クリックすると証明書のインポートウィザードが起動する。
証明書のインポートウィザードが表示されたら「次へ」ボタンをクリック。
証明書ストア選択が表示されるので、そのまま「次へ」ボタンをクリックする。
セキュリティ警告が表示されるので「はい」ボタンをクリックする。
インポートが正常に終了すると完了画面が表示されるので「完了」ボタンをクリックしてウィザードを終了させる。
上記操作以降はとりあえずSSLでアクセスしても、ブラウザに怒られることはなくなる。
以降、同じサーバで別のサイトを運用する場合は、DNSにAレコードでマシン名を追加して、/usr/local/etc/apache22/Includesの下に設定ファイルを追加すればよい。
コメント