皆さん、こんにちは。
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アクセスできるようになりました。
手順が多いですが、ぜひチャレンジしてみてください。
また、ご意見、ご質問等ございましたら、お気軽にコメント欄にお寄せください。
よろしくお願いします。