社内の開発環境とローカルの開発環境の連携方法
どんな時に便利か?
全てのサービスをローカル環境として構築できれば良いのですが
それがあまり現実的ではなく、基本は外部のアプリを利用して
一部アプリだけローカルのアプリを利用したいとい時に便利です。
ローカル環境構成図
PAC(Proxy Access-Control)ファイルを利用して
まずは、ローカルとそれ以外へのアクセスを振り分けています。
ローカルでは、nginxがアクセスを集約しています。
これは、80番や443番ポートを複数のアプリで利用するためで
ホスト名によって各アプリへリクエストの振り分けをしています。
PACファイル
開発環境用に社内プロキシが無い場合は、設定不要です。
JavaScriptの文法で、proxyの設定が書けるファイルです。
Firefoxだと、下記の場所からから設定できます。
オプション > ネットワーク > 接続設定 > 自動プロキシ設定スクリプト URL
proxyを通さない場合(今回はローカル環境)は、"DIRECT"という文字列を返しておきます。
ドメイン名に"hatena.ne.jp"が入る場合は、開発環境用のproxyを通したい。という場合は、
組み込みのshExpMatch関数を使い、host名とマッチングをかけ、PROXYのIPとポートを返します。
セミコロンでproxyもしくは、"DIRECT"をつなげると、順番に接続を試みてくれます。
function FindProxyForURL(url, host) { if (isInNet(host, "127.0.0.1", "255.255.255.255")) { return "DIRECT"; } else if (isDevHost(host)) { // dev.proxy:9999 return "PROXY 172.16.0.2:9999"; } // default.proxy:9999 return "PROXY 172.16.0.3:9999; DIRECT"; } function isDevHost(host) { return shExpMatch(host, "*.hatena.ne.jp"); }
hostsの設定
isInNet(host, "127.0.0.1", "255.255.255.255")でローカル環境として判定をさせるために
/etc/hosts で、ローカルアプリのドメインのIPを、127.0.0.1として登録しておきます。
# local env 127.0.0.1 d.hatena.ne.jp
これで、http://d.hatena.ne.jp/とアクセスした場合は、127.0.0.1:80へのアクセスに
それ以外のはてなドメインは、172.16.0.2:9999のproxy経由でのアクセスが可能になりました。
nginxの設定
ほぼ、デフォルトの設定のままですが、肝はinclude文です。
これで、各アプリに振り分けるようの設定を読み込んでいます。
error_log /usr/local/var/logs/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include params/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 /usr/local/var/logs/nginx/access.log main; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; keepalive_timeout 65; sendfile on; gzip on; include /usr/local/var/nginx/conf/extra/backends/*.conf; }
/usr/local/var/nginx/conf/extra/backends/d-hatena-ne-jp.confの場合
d.hatena.ne.jp用のtomcatアプリが、8080ポートで動いている場合は
以下のような設定になります。
server { listen 80; server_name d.hatena.ne.jp; location / { proxy_pass http://127.0.0.1:8080; } }
アプリを増やしたい場合は、hostsファイルへの追記とconfファイルの新規作成で簡単に行えます。