MacにデフォルトでインストールされているApacheでローカルWebサーバを構築する

はじめに

MacにはデフォルトでWebサーバソフトといえば必ず名前が挙がるApacheがインストールされています。

そのため、別途ミドルウェアをインストールして構築する必要は無く、容易にWebサーバを構築することが出来ます。

また、企業で使われているWebサーバは、ほとんどApache若しくはそれをベースにしたものですので、勉強がてら構築するのも一つですよ。

では、Apacheを使ってMacにWebサーバを構築してみましょう。

Apacheの設定

Apacheを有効(起動)にする前に、事前に設定をしておきます。
Apacheの設定はhttpd.confに記入する形で行います。
Macでは/etc/apache2にありますが、Linuxのディストリビューションでは/etc/httpd/conf/ などに格納されてたりします。

ではターミナルを立ち上げてhttpd.confを開きましょう。

開き方は、ターミナルの入力欄にvi /etc/apache2/httpd.confと入力しリターンキーを押します。

そうすると以下のような内容が表示されますので、ここに設定内容を記述していきます。

ここでは、開発、起動するために必要最低限の設定のみを行いますので、セキュリティ面が気になる方は、本記事のセキュリティの項目をご確認下さい。

作業フォルダの設定

httpd.confファイルの中でDocumentRootを探します。
因みに/DocumentRootと入力すれば一発で見つかります。
DocumentRoot “/Library/WebServer/Documents”となっている箇所を自身が作業したいディレクトリに変更します。

DocumentRoot "/Library/WebServer/Documents"
→ DocumentRoot "作業ディレクトリを指定"

次に<Directory "/Library/WebServer/Documents"を探し上記で指定した作業ディレクトリに変更します。

<Directory "/Library/WebServer/Documents">
→ <Directory "作業ディレクトリ">

※ダブルクォテーションで括るのを忘れないで下さい。
基本的には無くても動きますが、ディレクトリに空白を含んでいたりすると動作しないこともありますので。

作業フォルダのアクセス権の設定

ドキュメントルートのアクセス権を設定します。
ローカル開発環境なので所有者はフルアクセスにし、所有グループは権限無し、その他は実行権だけ与えます。
chmod 701 作業ディレクトリ

phpの有効化

サーバサイトプログラムのphpをapacheで動かす場合は、以下の記述をコメントアウトします。

LoadModule php7_module libexec/apache2/libphp7.so
→LoadModule php7_module libexec/apache2/libphp7.so

拡張子がhtmlのままでphpを動作できるようにする

phpを利用する場合は、拡張子htmlでアクセスさせることもありますので、下記のようにAddType …を追記して下さい。


#最終行に`AddType application/x-httpd-php .php .html`を追加する。

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .html

httpd.confでの設定は以上ですので、escを押してから下記のコマンドを入力して保存及び閉じます。
:wq

httpd自動起動設定(必要に応じて)

端末を立ち上げた際、自動でapacheを起動させたい時には以下の設定をします。

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist

以上で事前設定は完了です。
では、ターミナルに下記のコマンドを入力してApacheを起動しましょう。
sudo apachectl start

ちなみにapacheを停止するコマンドや再起動させるためのコマンドは以下のとおりです。


#停止
Sudo apachectl stop


#再起動
Sudo apachectl restart

セキュリティ設定

続いてセキュリティの設定について説明します。Apacheを稼働させることで、理論的には外部からアクセス可能になります。
そのため端末のセキュリティだけでなく、Apache側でもセキュリティ設定をしておきましょう。

バージョン情報の秘匿(ミドルウェアの脆弱性攻撃への足がかり対策)

ServerTokens Prod
または、
ServerTokens Productonly
Header unset "X-Powered-By"
Server signature off

ディレクトリ一覧の非表示

#Options indexes followsymlinks
Options followssymlinks

http traceメソッドの無効化(クロスサイトトレーシング(XTT)対策)

#TraceEnable on
TraceEnable off

クロスサイトスクリプト(XSS)対策

Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff

クリックジャッキング対策

Header append X-Frame-Options SAMEORIGIN
LoadModule headers_module modules/mod_headers.so

httpoxy 対策

RequestHeader unset Proxy

ETagのinode情報の隠蔽

FileETag MTime Size

PHP version の秘匿化(イースターエッグの秘匿)

#/etc/php.iniの以下の箇所について修正します。
Expose_php = Off

https利用時の脆弱性対策

httpsのプロトコルはhttpに比べ、暗号化されるのでセキュリティは高いですが、暗号化するためのプロトコルSSL/TLS自体にも脆弱性が存在しています。今回の構築方法では、httpsについては説明しておりませんが、参考としてその対策についても説明しておきます。

Heartbleed対策

#SSL/TLSバージョンの確認
yum info OpenSSL

#バージョンが古い場合はアップグレード
yum install OpenSSL

安全性の低い暗号スイートのサポート無効化

#SSL.confファイルを修正。以下の記述を
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
#以下に修正
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4:!DH
#上記変更後に拒否する暗号方式として設定します。
SSLHonorCipherOrder on

SSL ver2 ver3無効化

#Version2 ver3には大きな脆弱性があるため無効化
#SSL.confに以下を記述
SSL protocol all -SSL v2 -SSLv3
#無効化の確認
OpenSSL s_client -connect url:443 -ssl2
OpenSSL s_client -connect url:443 -ssl3

圧縮機能の無効化(暗号化された一部が漏洩する可能性に対する対策。httpヘッダの搾取)


#Redhut Linux以外
#SSL.confに以下を記述
SSLCompression Off
#Redhut Linux
#Apacheの環境変数ファイル(/etc/sysconfig/httpd)に以下を記述
#export OPENSSL_NO_DEFAULT_ZLIB=1

圧縮無効の確認


OpenSSL s_client -connect url:443 -crlf -tls1
Compression none

最後に

いかがでしたでしょうか。Macにwebサーバ環境は構築出来ましたか?
今回折角、開発環境を構築しましたので、次は外出先からローカル開発環境にアクセス出来るようにするのもいいかもしれませんね。
当サイトにおいて、外出先から接続出来るようにする設定方法も解説している記事もありますので、よろしければどうぞ。
記事はこちら