はじめに
こんにちは、エンジニアの遠藤です。
静的コンテンツを作った(もしくは作ってもらった)けど、 index.html をそのままブラウザで開くと、なんか表示がおかしい、といったことはないですか?(私は良くある。)
例えば、内部のリンクのパスが絶対パスで書かれていたりすると、
<link rel="stylesheet" href="/style.css">
Chromeだと file:///style.css
にアクセスしにいってしまい、上手く参照できなかったり。
<!--#include virtual=~ -->
なんて書かれていたりして、あれ、表示されない!みたいなケースもありますよね。(ない?)
ちょっと動きを確認したり、cssの調整をしたいだけなのに、パスを全部書き換えて、includeしてるところを全部置換して...なんてやってられない!
と、困った時は、ローカルにサーバを立ててしまうのがおすすめです。
手順
環境
OS macOS Catalina
Catalina...?
今どき Catalina かよ! という盛大なツッコミを受けてしまったので、 弊社の優秀な若手社員が、 macOS Big Sur でも検証したよっていう アンサーソングを書いてくれることを期待していたり。。表示したいファイルを以下のディレクトリに置く
/Library/WebServer/Documents/
$ sudo cp -rf your-directory/* /Library/WebServer/Documents/
Apacheを起動する
$ sudo apachectl start
ブラウザでアクセスして動作確認
Apacheを止める
$ sudo apachectl stop
以上です。簡単ですね。
と思ったら、pythonとかphpとかnodeの方が圧倒的に簡単でした。(後述)
設定変更
以下設定ファイルを書き換えると、挙動を変えることが可能です。
いくつか代表的な設定を見ておきます。
/etc/apache2/httpd.conf
何かあったら怖いので、変更前にバックアップは取りましょう。
$ sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.bk
ポートを変更するには
Listen 80
の部分を変更すると反映されます。
/etc/apache2/httpd.conf
<IfDefine SERVER_APP_HAS_DEFAULT_PORTS>
Listen 8080
</IfDefine>
<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS>
Listen 80 # ← こっちを修正する
</IfDefine>
(余談)
IfDefine
の部分ですが、
Define SERVER_APP_HAS_DEFAULT_PORTS # ←追加する
<IfDefine SERVER_APP_HAS_DEFAULT_PORTS>
Listen 8080 # ← こっちが有効になる
</IfDefine>
<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS>
Listen 80
</IfDefine>
などと書くと、 Listen 8080
が有効になりました。
昔は存在していなかった定義のようで、調べてみても全然情報が出てきませんでした。
きっと何かに使えるのでしょう。
ドキュメントルートを変更するには
以下設定ファイルのDocumentRootを変更すれば変わります。
/etc/apache2/httpd.conf
・・・
DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
・・・
ただし、ドキュメントルートまでの全てのディレクトリに実行権限を付けないと、 403 になってしまいます。
例えば、ドキュメントルートを /var/www に設定した場合、以下が設定されている必要があります。
$ sudo chmod o+x /var
$ sudo chmod o+x /var/www
Apacheの再起動
設定を変更した際は再起動が必要になります。
$ sudo apachectl restart
個人的にはApacheの挙動を知っておくと、色々と勉強になると思っているので
今後Webサーバとかも勉強したいなーという方は、Apacheの設定をいじり倒すと楽しいかもしれません。
(というかMacに標準でApacheが入っていることを知らなかった。)
参考
以下のモジュールのどれかが、インストール済みの場合、Apacheよりも手順が簡単です。
いずれも、ポート 8080 で起動します。
http://localhost:8080
python 2系
$ cd yourdirectory
$ python -m SimpleHTTPServer 8080
python 3系
$ cd yourdirectory
$ python -m http.server 8080
php
$ cd yourdirectory
$ php -S localhost:8080
ruby
$ cd yourdirectory
$ ruby -run -e httpd ./ -p 8080
node
$ cd yourdirectory
$ npm install -g http-server
$ http-server .