nginxを起動したり止めたりする

起動自体はnginxを実行するだけだけど、止めるときは

ps ax|grep nginx

としてプロセス番号見つけて

kill プロセス番号

とかだよなぁと思っていたけどnginxは至れり尽くせりで

nginx -s stop

とやると終わってくれるらしい

nginx -reload

で設定ファイルを読み込みし直してくれる機能も付いてる。スゴイ

httpサーバとして使える所まで設定する

eventsコンテキストだけがある設定ファイルを読み込ませて起動しても、案の定何のポートもlistenしないのでhttpサーバとして静的ファイルを送ってくれる様に設定したい

http://nginx.org/en/docs/beginners_guide.html#static

を見るとやり方がすぐに書いてあった

events {
}
http{
  server{
     listen 80;
  }
}

この状態で起動するとport80をlistenしてくれる。試しにブラウザでアクセスしてみると404エラーの画面になった。
apacheだとDocumentRootを指定しないとエラーで起動しないけど、nginxは特に指定しなくてもlistenし始めるのかーじゃあこの404は虚無を読もうとしてのエラー?
どんな内容のエラーなのか気になるのでここで寄り道して先にログの設定をする事にした。

ログを取る設定

コンパイルオプションに--error-log-path=/var/log/nginx/error.logが設定してあったのでこれを見たら何かわかるかな?と思ったけどプロセスの起動が失敗した系の事しか記録されて無くて、なぜ404になるのかわからなかった
ログの設定項目を探すとそれっぽい項目があったので設定してみる http://nginx.org/en/docs/ngx_core_module.html#error_log
エラーレベルをwarnくらいまで上げれば何か出てくるだろう

error_log /var/log/nginx/error.log warn;

を一番最初の行に書いたどこにも入らないmainコンテキストの部分において駄目そうならhttpコンテキストの中に移そうと思ってたけど、これで良かったらしい

何が無くて404だったのか

ログをチェックすると

"/usr/local/etc/nginx/html/index.html" is not found

と書いてあった。特にどこからファイルを読むという設定をしていないのに勝手に/usr/local/etc/nginx/html/index.htmlを探しに行っているのか…
configure時のprefix以下のhtmlがapacheで言うところのDocumentRootとしてのデフォルト値になっているという事だろうか?

htmlファイルを置く場所を設定したい

ApacheでのDocumentRoot相当の設定をしたいと思ったのだけど、nginxではrootを設定するらしい

root

この設定項目でリクエストがあったときにどこのディレクトリからファイルを読むか決められるようだ。デフォルト値がhtmlになっているのでやはり何も設定していないときはprefix以下のhtmlディレクトリからファイルを読むようだ。今回は/home/wwwに設定する。

Context: http, server, location, if in location
との事なので今回はserverの中に書く

forbidden

nginx -s reload してアクセスしerror.logを確認すると設定した/home/wwwを読みには行っているけどdirectory index of "/home/www/" is forbiddenとの事。
パーミッション?何だろう?と思ったけど /home/www/index.htmlを作ってアクセスすると読めた!

httpサーバ出来た

以下の設定でTCP port 80をlistenして/home/wwwにあるファイルを送ってくれるhttpサーバが出来た。

error_log /var/log/nginx/error.log warn;
events {
}
http{
  server{
     listen 80;
     root /home/www;
  }
}

できあがってしまった…

ログの設定しないと?と思ったんだけど``--http-log-path=/var/log/nginx/access.log``がconfigure時に指定してあるので指定の場所にcombinedでログが取られるっぽい。
nginxのプロセスのユーザとグループ設定しないと!と思ったけどこれもconfigureで指定してあって、9行設定書いただけでhttpサーバ出来てしまった…スゴイ

phpを動かしていく

nginxはapacheとは違ってモジュールでphpを動かすみたいな事はしないでphp-fpmというのと連携させてphpを動かすらしい。*1