MacOSX関連:Webサーバー設定ガイド
目次
1. サーバーの起動とホームページのURL
2. ログファイル
3. CGI の設置場所と設置例
4. sendmail
5. 外部からのサーバー管理
本ノートは,Mac OS X を Web サーバーとして利用するためのガイドです。前提は,あなたが機械の管理者であること,そして,若干のUNIXの知識 の2つです。
*「Mac OS X Server」ではなく「Mac OS X」を前提としています。
なお,Mac OS X El Capitan (10.11) で動作確認済み。
また,次のアプリケーション「ターミナル.app(Terminal.app)
」を使います。このアプリケーションは,UNIX の端末になります。「Macintosh HD/アプリケーション/ユーティリティ」内にあり,Double-Click すれば起動します。
次は,ターミナル.app
の起動後の画面です。
・・・:~ username$
本ノートでの username
とは,上記の「username
」を指します。
1. サーバーの起動とホームページのURL
1.1. Webサーバーの起動方法
ターミナル.app
を起動し,次のコマンドを実行。
* 太字部分を入力し,リターン。パスワードが要求されるので,あなたのパスワードを入力。
$ sudo apachectl start
1.2. ホームページのURL
URL | 表示されるファイル |
http://127.0.0.1/ | /Library/WebServer/Documents/index.html |
* ドメインネームないし固定IPをもつ場合は,それを YourDomainName に。持つか否かにかかわらず,127.0.0.1 は自機からは常時使用可。
1.3. ホームページの作成例
ターミナル.app
を開き,次の作業を行いましょう。
$ cd /Library/WebServer/Documents $ sudo nano first.html
テキストエディタ nano
の画面になるでしょう。
GNU nano 2.0.x File: first.html
* nano
(旧 pico
)以外にも vi
や vim
,emacs
などのテキストエディタもあります。使い慣れたエディタをお使いください。
次を入力します。
GNU nano 2.0.x File: first.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>はじめてのホームページ</title>
</head>
<body>
<p>私のはじめてのホームページ</p>
</body>
</html>
入力が完了したら,Ctrl+O
(nano
での書き込み),Ctrl+x
(nano
終了)とすれば,/Library/WebServer/Documents
内に first.html
が作成されます。ブラウザから http://127.0.0.1/first.html
にアクセスすると,「私のはじめてのホームページ」と表示されます。
* この例は W3C推奨 HTML 4.01 に準拠しています。作成したページが W3C推奨に準拠するか否かは The W3C MarkUp Validation Service で確認できます。
2. ログファイル
サーバーへの接続記録(ログ)は,/var/log/apache2/access_log
に残ります。
ログファイル一覧 | |
サーバーへのアクセス記録 | /var/log/apache2/access_log |
サーバーで発生したエラー記録 | /var/log/apache2/error_log |
システムログ | /var/log/system.log |
コンソール.app
(Macintosh HD/アプリケーション/ユーティリティ内にあるアプリケーション)を使えば,ファインダから見ることができます。
ターミナル.app
からもログを確認できます。ターミナル.app
を起動し,次の太字部分を入力後,リターンキーを押します。コマンド tail
部分は見たい部分にあわせて,head
や cat
,または grep keyword
などに変えて下さい。
$ tail /var/log/apache2/access_log
3. CGI の設置場所と設置例
3.0. CGIモジュール
作業の前に,一度,httpd
(Webサーバー)を止めておきましょう。ターミナル.app
から次のコマンドを入力します。
$ sudo apachectl stop
/etc/apache2/httpd.conf
内の mod_cgi
を,念のため,確認します。
$ grep mod_cgi.so /etc/apache2/httpd.conf #LoadModule cgi_module libexec/apache2/mod_cgi.so -> #があったら外す
もし #
が付されていたら,ターミナル.app
上で,次の作業を行って外します。
$ cd /etc/apache2 $ sudo cp httpd.conf httpd.conf~orig # オリジナルをコピー $ sudo nano httpd.conf # nano で httpd.conf を開く # エディタは,好みのものをお使いください。 (nano 上の作業) Ctrl+w mod_cgi.so(改行) (#を外す) Ctrl+o Ctrl+x(nano終了)
/etc/apache2/httpd.conf
を修正したら,configuration が正しいか,ターミナル.app
から次のコマンドを入力して確認します。
$ sudo apachectl configtest
エラーがなければ,httpd
を起動します。
$ sudo apachectl start
3.1. CGI の設置場所
CGI の設置場所は,
/Library/WebServer/CGI-Executables
また,呼び出しは,
http://YourDomainName/cgi-bin/ファイル名
となります。(YourDomainName
部分は,CGI のテストであれば 127.0.0.1
で十分。)
3.2. CGI の設置例
ターミナル.app
から,次の作業を行います。
$ cd /Library/WebServer/CGI-Executables $ sudo nano hello.cgi # エディタは,好みのものをお使いください。エディタ(上記の場合,
nano
)の画面になったら,次を入力します。
#!/usr/bin/perl -w print "Content-Type: text/html\n\n"; print <<"EOF"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello World!</title> </head> <body> <p>Hello World!</p> </body> </html> EOF
書き込んでエディタを終了(nano
の場合,Ctrl+o
,Ctrl+x
)すると,/Library/WebServer/CGI-Executables
内に hello.cgi
というファイルが作成されます。ターミナル.app
から,次を実行。
$ sudo chmod a+x hello.cgi
作成したスクリプトに文法エラーがなければ,http://127.0.0.1/cgi-bin/hello.cgi
で Hello World!
と表示されます。
[注意]スクリプトに文法エラーがあると,Internal Server Error
が表示される。文法エラーは,サーバーのエラーログ /var/log/apache2/error_log
に記録されるが,ターミナル.app
から次を実行すれば直接エラーを読むことができる。
$ ./hello.cgi
エラーが出た場合,次を確認。
・スクリプトの3行目の \n
は,2つです。
・スクリプト内のダブルクォーテーション "
やセミコロン ;
を正しく入力したか否か。
なお,上記の $ ./hello.cgi
で,ループに入った場合には,ターミナル.app
で別ウィンドウを開き,次のコマンドを打つことで止めることができます。
$ sudo killall perl
使わない CGI が出て来たら,実行権を取り除けば良いです。
$ sudo chmod a-x ファイル名
4. sendmail
■sendmail のテスト
ターミナル.app
から,次の作業を行います。
$ sendmail username From: username To: username Subject: test Test. .
ターミナル.app
において,新しいウィンドウを開くと(Cmd+n
),"You have a mail.
" というメッセージがあります。
■sendmail のログ
/var/log/mail.log
に記録が残ります。ターミナル.app
から
$ tail /var/log/mail.log
と打てば,sendmail
の最新のログが読めます。
5. 外部からのサーバー管理
外部からサーバーに接続して,サーバーを管理することができます。
5.1 リモートコントロール ssh
とファイル転送 sftp
サーバー側のコントロール・パネルの中の「共有」の中の「リモートログイン」をチェックすることで sshd
が動きます。これによって外部より ssh
での接続,sftp
でのファイル転送が可能になります。外部からの接続方法は,ターミナル.app
を使います。
$ ssh username@サーバーアドバイス
マニュアルは,ターミナル.app
から閲覧できます。
$ man ssh
ssh
のアクセス・ログは,/var/log/system.log
に残ります。ターミナル.app
から次を打てば,sshd
のログのみを抽出できます。
$ grep sshd /var/log/system.log
留意点
ファイア・ウォールの外部にポートを開放すれば,世界中から ssh
接続が可能になり,root
などでの接続を試みるアクセスがいずれは増えることでしょう。管理者のアカウントが偶然にも見破られることが全くないとは言い切れません(幸いにも,本研究室ではありませんでしたが)。こうした危険を避けるためには,何かしらの手間,あるいは工夫が必要です。
[例]本研究室での対策例
大学外部にポート22を開放せず,大学に VPN 接続してから研究室のサーバーに ssh
接続(大学がファイア・ウォール)。
[ノート]Mac にも root
は存在していますが,初期状態ではパスワードを持っていません。このため,root
での ssh
接続は,すべて,失敗に終わります。とは言っても,悪意のあるアクセスが減ることはないでしょう。
5.2 「どこでも My Mac」
「どこでも My Mac」とは,Apple 社が提供している,2台の Mac 間の画面共有サービスです。iCloud アカウントを使うため,サーバー側の username
とパスワードだけでなく,iCloud のアカウントも知らなければ,接続できない構造になっています。iCloud のアカウントとサーバー側の管理者アカウントを異なるものにすることで,セキュリティが増します。設定も含めた詳細は,Apple の HP を参照ください。
留意点
「どこでも My Mac」は,ポート88
(Kerberos authentication system)とポート5900
(VNC)の2つのポートを使います。これらのポートをファイア・ウォールの外部に開放しない限り,外部からの接続はできません。