記事
Toshihiko Minamoto · 2021年7月20日 7m read

Windows環境でnginxを構築する

皆さん、こんにちは。

InterSystems製品ではCache 2015.1からNGINXに対応しているのですが、インストールマニュアルを見るとC言語のソースファイルが提供されていて、「むむむ。。。コンパイルか。。。」と躊躇してしまいますね(^_^;)。
そこで、実際にWindows環境でNGINXをビルドしてみましたのでレポートします。

IRISのインストール

IRISまたはIRIS for Healthのキットを実行し、インストールします。
Nginxのアクセスに必要なUniversal Web gateway Moduleをインストールするには、セットアップタイプでCustomを選択し、
Web Server Gatewayを明示的にインストールする必要がありますので、ご注意ください。
    

また、今回はIRIS for Healthをインストールしていますので、C:\InterSystems\IRISHealthディレクトリにIRISをインストールしています。
IRISだったり、他のディレクトリにインストールされている場合は適宜インストールディレクトリを読み替えてください。

VisualStudioのインストール

Windows環境でコンパイルが必要ですのでVisualStudioをインストールします。バージョンはそんなに古くなければ大丈夫かと思います。ちなみに私はWindows 10の環境にインストールしていたVisual Studio 2017を使用しました。

MSYSのインストール

MSYSはSourceForge(https://sourceforge.net/projects/mingw/files/MSYS/)からダウンロードします。
以下の画面の「Download Latest Version」ボタンをクリックします。


ダウンロードされた、mingw-get-setup.exeを実行します。

  

以上でインストールが始まります。

インストールが終わると以下のInstallation Managerが表示されますので、Package欄のmsys-base,msys-bashを選択、「installation」メニューの「update catalogue」をクリックし、これらのパッケージをインストールします。


 

PATH環境変数の更新

MinGWのコマンドが実行されるようにPATH環境変数を変更します。

Windowsのスタートメニューの「すべてのアプリ」をクリックし、「Windowsシステムツール」にある「コントロールパネル」をクリックします。
「システムとセキュリティ」の「システム」メニューをクリックします。
以下の画面が表示されますので、「システムの詳細設定」をクリックします。

システムのプロパティが表示されますので、「環境変数...」をクリックします。
すると環境変数一覧が表示されますので、システム環境変数のPathをクリックし、「編集」ボタンをクリックします。
 

以下の画面にて変数値の最後にMinGWのコマンド実行パス「;C:\MinGW\MSYS\1.0\bin\」を追加し、「OK」ボタンで確定します。

 

Strawberry perlのインストール

SSL対応に必要なPerlとして、Strawberry Perl (https://strawberryperl.com)をダウンロードします。今回は最新版のStrawberry-perl-5.32.1.1-64bit.msiをダウンロードしました。ダウンロードしたmsiファイルを実行し、以下の画面のようにインストールしました。
    

Mercurialクライアントのインストール

Mercurial(TurtoiseHg) 5.8.1をサイト(https://www.mercurial-scm.org/)からダウンロードします。
以下の画面の赤枠部分をクリックします。

tortoisehg-5.8.1-x64.msiを実行し、インストールを行います。
 

  

ライブラリ(PCRE、zlib、OpneSSL)のダウンロード

PCREはダウンロードサイト( https://ftp.pcre.org/pub/pcre/pcre-8.45.tar.gz )からダウンロードします。
zlibは http://zlib.net/zlib-1.2.11.tar.gz からダウンロードします。
Open SSLは https://www.openssl.org/source/openssl-1.1.1k.tar.gz からダウンロードします。

これらのgzipファイルはドキュメントフォルダのnginx_devフォルダに移動しておきます。

ビルド環境用フォルダの作成とソースの配置

ビルドに必要なソフトウェアはインストールできましたので、構築環境を作成していきたいと思います。

まず、ドキュメントフォルダ下にnginx_devフォルダを作成します。

Windowsスタートメニューから「すべてのアプリ」「Visual studio 2017 フォルダ」「VS 2017用 x64 Native Toolsコマンドプロンプト」メニューを選択し、コマンドプロンプトを起動します。

bashを起動します。

> c:\MinGW\MSYS\1.0\bin\bash

nginx_devフォルダに移動します。

$ cd $USERPROFILE/Documents/nginx_dev

nginxソースをダウンロード
Mercurialを使用してnginxのサイトからソースコードをダウンロードします。

$ hg clone http://hg.nginx.org/nginx

ライブラリ格納用のフォルダを作成します。

$ mkdir objs
$ mkdir objs/lib
$ cd objs/lib

ライブラリの解凍

$ tar -xzf ../../../pcre-8.44.tar.gz
$ tar -xzf ../../../zlib-1.2.11.tar.gz
$ tar -xzf ../../../openssl-1.1.1k.tar.gz

CSPのソースファイルをコピー
libフォルダ配下にcspフォルダを作成し、IRISに含まれるWeb Gatewayコンポーネントのソースファイルをcspフォルダにコピーします。

$ mkdir csp
 $ cp /c/InterSystems/IRISHealth/dev/csp/nginx/*.[ch] csp

cspフォルダにconfigファイルを作成

$ cd csp
$ cat > config
ngx_addon_name=ngx_http_csp_module_sa
HTTP_MODULES="$HTTP_MODULES ngx_http_csp_module_sa"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_csp_module_sa.c"

以上で準備は完了です。

ソースのビルド

configureを実行し、ビルドに必要なファイルを生成します。

$ cd ../../..
$ auto/configure \
    --with-cc=cl \
    --with-debug \
    --prefix= \
    --conf-path=conf/nginx.conf \
    --pid-path=logs/nginx.pid \
    --http-log-path=logs/access.log \
    --error-log-path=logs/error.log \
    --sbin-path=nginx.exe \
    --http-client-body-temp-path=temp/client_body_temp \
    --http-proxy-temp-path=temp/proxy_temp \
    --http-fastcgi-temp-path=temp/fastcgi_temp \
    --http-scgi-temp-path=temp/scgi_temp \
    --http-uwsgi-temp-path=temp/uwsgi_temp \
    --with-cc-opt=-DFD_SETSIZE=1024 \
    --with-pcre=objs/lib/pcre-8.45 \
    --with-zlib=objs/lib/zlib-1.2.11 \
    --with-openssl=objs/lib/openssl-1.1.1k \
    --with-openssl-opt=no-asm \
    --with-http_ssl_module  \
    --with-http_auth_request_module \
    --add-module=objs/lib/csp

nmakeでビルドを行います。

$ nmake -f objs/Makefile

これでobjsフォルダに nginx.exe が作成されます。

nginxのインストール

nginxのインストールはnginxダウンロードサイト( https://nginx.org/en/download.html ) からzipファイルをダウンロードします。zip ファイルを c:\ に展開すると「nginx-x.x.x」というフォルダが作成されます。

c:\nginx-x.x.xフォルダにある nginx.exe を先ほど作成した nginx.exe で上書きします。

Universal Web gateway moduleの設定

をを作成し、C:\InterSystems\IRISHealth\binフォルダにあるCSPx.dll、CSPxSYS.dllをコピーします。
C:\InterSystems\IRISHealth\CSP\binフォルダにもCSPx.dllはありますが、これは32bitバージョンのdllですのでご注意ください。

また、C:\InterSystems\IRISHealth\CSP\binフォルダのCSP.iniをc:\nginx-x.x.x\cspフォルダにコピーします。

コピーが終わりますと、C:\nginx-x.x.x\confフォルダにある、nginx.confを編集します。
以下のように  http { } 設定ブロックの 中に以下のようにCSPModulePathを追加します。

      :
    #gzip on;

    CSPModulePath csp/;

    server {
      :

また、server { } 設定ブロックには以下のセクションを追加します。

    server {
        listen     80;
        server_name  localhost;
          :
        location / {
            root    html;
            index   index.html index.htm;
        }

        # 以下の部分を追加
        location /csp {
            CSPFileTypes  csp cls zen cxw;
        }
         :

以上でnginx.confの編集は終了です。
nginxを起動します。

> start c:\nginx-x.x.x\nginx

起動に成功すると、以下の画面が表示されますので、アクセスを許可したいネットワークを選択し、「アクセスを許可する」ボタンをクリックします。

以上で、nginxからCSPアクセスできるようになりました。
手順が多いですが、ぜひチャレンジしてみてください。

また、ご意見、ご質問等ございましたら、お気軽にコメント欄にお寄せください。
よろしくお願いします。

10
1 0 0 164
Log in or sign up to continue