「Windows 10 Fall Creators Update」以降でLinuxを利用する場合、WebサイトやWebアプリケーションの開発環境として利用するケースが多くなると思う。特に多いのが、「Ubuntu on Windows 10」の環境でWebアプリケーションの開発を行い、Windows 10のブラウザからアクセスして動作を確認するというパターンだ。今回は、そんな使い方をする際のセットアップ方法などについて取り上げたい。

Nginxをインストール・設定してみよう

正式リリースされたWindows Subsystem for Linux(WSL)から、ネットワーク機能がWindowsとLinuxで共有されるようになった。ネットワーク設定を確認すると、次のように両者とも同じ状態になっていることが確認できる。

Windows 10のネットワーク設定

Ubuntu on Windows 10のネットワーク設定

ルーティングやファイアウォールなどがデフォルトの設定になっていれば、それほど考えることなく利用できる状態になっている。ここでオープンソースのWebサーバ「Nginx」をインストールしてみよう。次のように「sudo apt install nginx」と実行すればよい。

sudo apt install nginxと実行してNginxをインストール

Ubuntuの場合、Nginxのメインの設定ファイルは/etc/nginx/nginx.confとしてインストールされるので、これをテスト動作向けに設定変更する。具体的には、次のようにサーバとして動作させる設定を追加すればよいだけだ。

--- /etc/nginx/nginx.conf.org   2017-11-26 12:04:02.793935900 +0900
+++ /etc/nginx/nginx.conf       2017-11-26 16:35:24.964668900 +0900
@@ -60,6 +60,16 @@

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
+
+       server {
+               listen          80;
+               server_name     192.168.185.143;
+
+               location / {
+                       root    /home/www;
+                       index   index.html;
+               }
+       }
 }

変更内容だけでは全体がよくわからないかもしれないので、念のためコメントを削除した状態のnginx.confも以下に掲載しておく。

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;
        gzip_disable "msie6";

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

        server {
                listen          80;
                server_name     192.168.185.143;

                location / {
                        root    /home/www;
                        index   index.html;
                }
        }
}

この設定だと、/index.htmlにアクセスすると/home/www/index.htmlファイルが返ってくるので、次のように記述した/home/www/index.htmlファイルを用意しておく。

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <title>Nginx is working!</title>
    </head>
    <body>
        <p>Nginx is working!</p>
    </body>
</html>

Nginxは「sudo service nginx start」のように実行すれば起動でき、「sudo service nginx stop」と実行すれば終了する。設定ファイルを書き換えた後などは「sudo service nginx restart」とすると、Nginxを再起動して設定を反映させることができる。

例えばこの状態でUbuntu on Windows 10で次のようにcurlコマンドを実行すれば、Nginx経由でコンテンツを取得することを確認できる。

Ubuntu on Windows 10からセットアップしたNginxの動作を確認

同じURLへのアクセスをWindows 10から実行すると、次のようにWebブラウザ経由で動作を確認できる。

Windows 10からUbuntu on Windows 10で動作しているNginxへアクセスを確認

Ubuntu on Windows 10をLinuxサーバとして動作させ、Windows 10をクライアントまたは編集環境として利用できるというのは、なかなか今後の作業の可能性を膨らませてくれる進化だろう。

この例で言えば、Ubuntu on Windows 10はサーバ環境に特化させてWebサーバやデータベース、またはそれ以外のサーバを動作させる環境としてセットアップし、開発作業や確認作業はWindows 10で実施するといったことができる。これまでWindows 10の操作に慣れ親しんでいるのであれば、これが自然な使い方になるだろう。

Ubuntu on Windows 10のファイルシステムは、Windows 10のファイルシステムと同じなので、ファイルを編集するためにsshでログインするといった必要もないし、シームレスに操作することが可能だ。使い慣れてきたエディタや開発環境をそのまま使って作業できるというのは、かなり魅力的である。仮想環境でLinuxを使っている場合でも、一度はWSLを使ったLinuxをお試しいただければと思う。