Windows Server に Nginx を導入する

Web Service//
  1. ホーム
  2. Web Service
  3. Windows Server に Nginx を導入する

社内で簡易ナレッジシステムを作ろうと思い、試しにWordpressで作ろうと思いました。
あいにくライセンスがWindows Server 2016、しかもVM Wareで動いてるので、メモリ割り当て等が最低限(最大4GB)という過酷な環境なので、今回は少しでも高速に動くように「Nginx」を利用することにしました。

Nginx の導入

Nginx のセットアップ

  1. 公式サイトより、Nginxをダウンロードします。
  2. 今回の導入対象OSは「Windows Server 2016」ですので、「stable Version」の「nginx/windows-*.**.*」を選択します。
  1. 今回はサーバーツール関連をまとめるため、「c:\dev\server」を作成します。
  2. ダウンロードされたZIPファイルの中身を「c:\dev\server\nginx」に格納します。
  3. 「c:\nginx」にある「nginx.exe」を起動します。
  4. ブラウザを開き、「http://localhost/」を開きます。

上記の画面が表示されれば終了です!
・・・Apacheというか昔はかなり導入に苦労した覚えがありましたし、IISの時は投げ出しましたが、「え?うそ・・・」って位簡単に導入ができてしまいました(笑

環境変数の追加

  1. 「win+R」で「ファイル名を指定して実行」を開きます。
  2. 「sysdm.cpl」と入力し、「OK」をクリックします。
  3. 「システムのプロパティ」ウィンドウが表示されるので、「詳細設定」>「環境変数」を開きます。
  4. 「システム環境変数」の「Path」を選択し、「編集」をクリックします。
  5. 「新規」をクリックし、「c:\dev\server\nginx」を入力した後「OK」をクリックします。

アップロードサイズの変更

WordPress導入後に、テーマをアップロードしようとしたら、「データサイズが大きいよ」と怒られてしまいました。
その対処です。

  1. 「nginx.conf」を開きます。
  2. 以下の場所に「client_max_body_size」を追加します。
    今回は「20MB」にしてみました。
    server {
        client_max_body_size 20M;
        listen       80;
        server_name  localhost;

公開フォルダーを変更する。

デフォルトではWEBの公開ディレクトリーは「nginx\html」になっています。
これを、「c:\dev\server\htdocs」に変更します。

        location / {
            root   c:/dev/server/htdocs;

その他の設定

実際にこの後、WordpressのインストールやなんちゃってSSL化をします。
テスト環境で運用しているnginx.confの設定は以下となります。

events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  130;
    gzip  on;
    server {
        listen       80;
        listen       443 ssl;
        ssl on;
        ssl_certificate      server.crt;
        ssl_certificate_key  secret.key;
        ssl_session_timeout  5m;
        ssl_prefer_server_ciphers  on;
        server_name  exsample.com; #crt と合わせる
        client_max_body_size 20M;
        location / {
            root   c:/dev/server/htdocs;
            index  index.php index.html index.htm;
            try_files $uri $uri/ /index.php?$args; #wordpress で デフォルト以外のパーマリンクを利用する場合の設定
        }
        location ~ \.php$ {
            root           c:/dev/server/htdocs;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

尚、今回はReverseproxy機能を利用しないので、記述していません。

Nginx をサービス化して自動起動にする

このままでもいいのですけど、再起動時に手動でNginxを起動するのは面倒という事で、サービス化してみました。
このままではサービス化は出来ないので、「WinSW」と言うツールを使ってサービス化することにしました。

.NET Framework 3.5 を有効にする

Configファイルを作れば本frameworkは不要なのですが、導入することにしました。
(理由は後述)

  1. サーバーマネージャーを起動します。
  2. 「管理」>「役割と追加」を選択します。
  3. 「役割と機能の追加ウィザード」が起動します。
  4. 「開始する前に」の項目は「次へ」をクリックします。
  5. 「インストールの種類」の項目は「次へ」をクリックします。
  6. 「サーバーの選択」の項目は「次へ」をクリックします。
  7. 「サーバーの役割」の項目は「次へ」をクリックします。
  8. 「機能」の項目では「.NET Framework 3.5 Futures」にチェックをして「次へ」をクリックします。
  9. 「確認」の項目で「警告」が表示されますが、そのまま「インストール」をクリックします。
  1. 「結果」に遷移し、インストールが開始されます。「<サーバー名>でインストールが正常に完了しました。」が表示されたのを確認して、「閉じる」をクリックします。

WinSW の導入

  1. ダウンロードページより、winswの最新版「winsw-*.*.*-bin.exe」をダウンロードします。
  2. ダウンロードしたファイルを「nginx.exe」と同じ場所に格納します。
  3. PHPでも同じくサービス化で利用するため、リネームします。
    今回私は「winsw_290_nginx_svc.exe」という名前に変更しました。
  4. xmlファイルを作成します。名前は「3」でリネームした名前と同じ名前にします。
    今回は「winsw_290_nginx_svc.xml」にしました。
<service>
    <id>nginx</id>
    <name>nginx</name>
    <description>nginx</description>
    <logpath>c:\dev\server\nginx\logs</logpath>
    <logmode>roll</logmode>
    <depend></depend>
    <executable>c:\dev\server\nginx\nginx.exe</executable>
    <startargument></startargument>
    <stopexecutable>c:dev\server\nginx\nginx.exe</stopexecutable>
    <stopargument>-s</stopargument>
    <stopargument>stop</stopargument>
</service>
  1. Configファイルを作成します。名前は「3」でリネームした名前と同じ名前にします。
    今回の場合は「winsw_290_nginx_svc.config」にしました。
    ※ 「.NET framework 3.5」を導入している場合は不要です。
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>
  1. 「4」で作成した「xml」ファイル及び、「5」で作成した「config」ファイルを「nginx.exe」と同じフォルダーに格納します。

今回私がconfigファイルを作成せずに、「.NET Framework 3.5」で動作させた理由は、configファイルがうまく機能しなかったからです。
「Windows Server 2016」では「.NET Framework 4.6」ですので、恐らくバージョンの記述を変える必要ありそうです。

サービス登録

コマンドプロンプトもしくはPowerShellで以下のコマンドを実行します。

cd c:\nginx
winsw_290_nginx_svc install

これでサービスに登録が出来ます。
ちゃんと登録出来たか確認をします。

削除したい場合は上述の「install」を「uninstall」に変更して実行してください。

改版履歴

  • 2020年8月24日:全体構成変更及びSSL化、Wordpressの導入に伴い修正