nginx を Windows サービスとしてインストールする
はじめに
常時動作しているWindowsマシンがあり、 nginx と Webアプリケーション(nodejsまたはGoやPythonで記述)の組み合わせて提供することができそうで環境構築をしたのでメモします。
nginx は Windows の場合コマンドラインアプリケーションとして動作させることができます。しかしサービス化は、将来の予定にはあるようですが、現時点ではまだ提供されていません。
winswを使って実現しているblogがいくつかありましたので、最新のバージョンの手順です。
- nginx 1.11.10 (現時点のmainlineバージョン)
- winsw 2.0.2.0 (現時点の最新)
nginx のインストールと動作確認
まずは、単体アプリケーションとして起動を確認します。
- 公式サイトから zip をダウンロードして、C:\nginx に展開します
- コマンドプロンプトを開きます。
- start nginx にて起動します
- Windows セキュリティの重要な警告 ダイアログが表示されますので「アクセスを許可する(A)」を選択します
- http://localhost をブラウザで開いてWelcome to nginx! ページが表示されることを確認します
正しくインストールされていることを確認できました。
Windowsサービス化
次に、Windowsサービス化をします。
サービス化には、任意のプロセスをサービス化することができる winsw を利用します。
WinSW をダウンロードします
- WinSW 2.x系は、.NET Framework 2系(~3.5) と、 .NET Framework 4系が提供されています
- 現時点では、 V2.0.2 が 最新です
ダウンロードした WinSW.exe を nginxsvc.exe にリネームします。(この名前は好きな名前で良いです)
<service> <id>nginx</id> <name>nginx</name> <description>nginx</description> <executable>c:\nginx\nginx.exe</executable> <logpath>c:\nginx\</logpath> <logmode>roll</logmode> <depend></depend> <startargument>-p c:\nginx</startargument> <stopargument>-p c:\nginx -s stop</stopargument> </service>
管理者のコマンドプロンプトを開きます
C:\nginx\nginxsvc.exe install
を実行します
起動
- nginx がサービスとして登録されていますので右クリックして起動します
エラー
あれ、エラーになりました。
nginxsvc.err.log
にエラーが出力されていますので、中身を確認します。
nginx: [alert] could not open error log file: CreateFile() " c:\nginx/logs/error.log" failed (123: The filename, directory name, or volume label syntax is incorrect) 2017/03/06 09:35:40 [emerg] 10528#10192: CreateFile() " c:\nginx/conf/nginx.conf" failed (123: The filename, directory name, or volume label syntax is incorrect)
ファイル、ディレクトリ名が不正のようです。
起動オプションの修正
nginxsvc.xml の定義にて、nginx を起動時の引数として -p オプションで指定しているのですが、このあたりが影響してそうです。 削除して試してみます。
C:\nginx\nginxsvc.exe uninstall
にて、一度アンインストールします。
<service> <id>nginx</id> <name>nginx</name> <description>nginx (powered by WinSW)</description> <executable>c:\nginx\nginx.exe</executable> <logpath>c:\nginx\</logpath> <logmode>roll</logmode> <depend></depend> <startarguments></startarguments> <stoparguments>-s stop</stoparguments> </service>
xmlファイル修正 【2017/3/6 15時追記】
- startarguments 、 stoparguments (複数形にする)必要があります
- これにしておかないと Windowsサービスが停止できない状況が発生します
実行
C:/nginx/nginxsvc.exe install
を再度実行します。
うまく起動しました。 ブラウザで http://localhost を開いてみます。
logs\access.log にもアクセス記録が追記されていますので、 conf フォルダや logs フォルダにもアクセスできています。
参考
- https://vexxhost.com/resources/tutorials/nginx-windows-how-to-install/
- startarguments stoparguments の誤りが含まれていますので注意