SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

サービス化手順:Windows版nginx・PHP8のインストール(2024年9月版)

目次

Windows版nginx・PHP8のインストール・サービス化(2024年9月)

Windows上にnginxとPHPをダウンロードしてWindowsのサービス化する手順です。

2024年9月時点の情報に更新します。

環境は「c:\web2」フォルダに作る想定で説明はすすめます。

nginxのダウンロードとインストール

nginxのダウンロードは以下から行います。

nginx.org

この時点での最新版は「nginx/Windows-1.27.1 」でした。

これをダウンロードして、解凍します。

解凍するとフォルダにバージョン名がついているので「nginx」にリネームします。

解凍すると同じ名前のフォルダが2層できます。

名称変更して、C:\web2フォルダに移動するのはサブフォルダのほうです。

PHP8のダウンロードとインストール

PHPのダウンロードは以下から行います。

windows.php.net

ちょっとわかりづらいですが、ダウンロードするのは、Threadsafe版のZIPです。

時点の最新版は「php-8.3.11-Win32-vs16-x64.zip」でした。

解凍後フォルダ名を「php」に変更し、「c:\web2」フォルダに移動します。

異動後、phpフォルダの下に「logs」フォルダを作っておきます。

PHP8を動かすためのVCのランタイム

WindowsのPHPはVCのランタイムが必要です。

docs.microsoft.com

は既にはいっている場合はいりません。

これがないと、PHPをサービス化して起動するときエラー終了します。

サービス化プログラムのダウンロードとコピー

nginxとPHPはWindowsではそのままサービス化できません。

winsw.Exeを使います。

下記から、最新版をダウンロードします。

github.com

時点の最新版は2.12.0でした。

とりあえず「WinSw-x64.exe」をダウンロードします。

ダウンロードしたWinSw.exeはC:\web2にコピーした「nginx」と「php」フォルダの直下にコピーして、リネームします。

今回は「winsw_php.exe」と「winsw_nginx.exe」にしました。

nginxの設定

nginxを動かす最低限の設定をします。

nginxフォルダ直下confフォルダの「nginx.conf」を編集します。

① ポートとサーバー名の設定

 listen       8090;
 server_name  localhost;

デフォルトは「80」ですが、今回は開発環境なので、あえて「8090」にしました。

この設定であれば、以下のURLでアクセスできます。

http://localhost:8090/

② ドキュメントルートの設定

HTMLの置場所です。

”http://localhost:8090/”とすると、ドキュメントルートに探しにいきます。

デフォルトは「html」・・つまり「nginx\html」フォルダです。

以下の例は「C:\web2\src\htdocs」をルートフォルダに変更する例です。

location / {
     root   C:/web2/src/htdocs
     index  index.html index.htm;

 }

③ PHPをCGIで使えるようにする

PHPを使えるようにするには「location ~ \.php$」の部分のコメントアウト「#」を消して有効にする必要があります。

上記のドキュメントルートに指定したフォルダ名に2ケ所書き換えます。

location ~ \.php$ {
     root           C:/web2/src/htdocs;
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  C:/web2/src/htdocs$fastcgi_script_name;
   include        fastcgi_params;
 }

最低限ならこれだけです。

<注意点:パス区切りの書き方>

「C:/src/htdocs」のように「/」区切りでも、「C:\src\htdocs」のように「\(¥)」区切りのどちらでも使えますが、「C:\src\nhtdocs」みたいに、[\」の後ろに「n」が来たりすると、改行コードと認識されてエラーになり、サービスの起動に失敗します。

なので、「/」にしておくのが安全です。

PHPの設定

php.iniを作る必要があります。

とりあえず動かすだけなら、phpフォルダ直下にある「php.ini-development」を、「php.ini」にリネームすれば動きます。

nginxをサービス化

EXEと同じ名前でXMLファイルを作ります。

winsw_nginx.exe なら winsw_nginx.xml のようにします。

<service>
    <id>nginx</id>
    <name>nginx</name>
    <description>「nginx」で起動する。「nginx -s stop」で停止する。</description>
    <logpath>C:\web2\nginx\logs</logpath>
    <logmode>roll</logmode>
    <depend></depend>
    <executable>C:\web2\nginx\nginx.exe</executable>
    <startarguments></startarguments>
    <stoparguments>-s stop</stoparguments>
</service>

基本的にはログフォルダとnginx.exeのパスを環境にあわせて書き換えてください。

準備ができたら、コマンドプロンプトを管理者で開いて以下を実行します。

WinSw_nginx.exe install

成功すると以下のようなメッセージが表示されます。

2024-09-07 17:47:07,959 INFO  - Installing service 'nginx (nginx)'...
2024-09-07 17:47:08,038 INFO  - Service 'nginx (nginx)' was installed successfully.

php-cgiをサービス化

EXEと同じ名前でXMLファイルを作ります。

<service>
    <id>php-cgi</id>
    <name>php-cgi</name>
    <description>「php-cgi -b 127.0.0.1:9000 -q」を実行する</description>
    <logpath>C:\web2\php\logs</logpath>
    <logmode>roll</logmode>
    <depend></depend>
    <executable>C:\web2\php\php-cgi.exe</executable>
    <startarguments>-b 127.0.0.1:9000 -q</startarguments>
</service>

PHPフォルダ直下に「logs」フォルダを作る前提で書いているので、ない場合は変更してください。他のexeのパスなどは環境にあわせて書き換えてください。

準備ができたら、コマンドプロンプトを管理者で開いて以下を実行します。

WinSw_php.exe install

成功すると以下のようなメッセージが表示されます。

2024-09-07 17:49:01,691 INFO  - Installing service 'php-cgi (php-cgi)'...
2024-09-07 17:49:01,775 INFO  - Service 'php-cgi (php-cgi)' was installed successfully.

サービスの起動

サービスを起動します。

ファイル名を指定して実行で「services.msc」をうつと、以下のような画面が立ち上がってきます。

ここで、nginxとphp-cgiを探して、右クリック→開始とやれば、実行中のステータスになります。

これで動かす準備はOKです。

動作確認

すでにソースがある場合はそれを使います。

ない場合は、ドキュメントルートに指定したフォルダに、以下の内容をコピーして「index.php」の名前で保存します。

<?php

phpinfo();
 ?>

ブラウザで以下のURLをたたきます。

http://localhost:8090/index.php

これで、以下のように表示されればOKです。

ではでは。