メンターを任されたエンジニアのブログ

ある日メンターを任された3流エンジニアのブログ

環境構築:Nginxでリバースプロキシとか(寄り道)

どうも、メンターです。
今日、メンティとの顔合わせと半年後の目標を決めてきました。

LPICを受けたい」と言う彼に対して、「そんなのなくてもLinuxいじれるよ」と一蹴しました。
だって、もう、俺は動いているんだもん(勝手に)。

というわけで。
スクラムアジャイル開発)で、Node.jsで、Webアプリ開発をやることにしました。

チャットもね、すんなり使えるようになったし。めでたし、めでたし。

とはいかない。

スクラム開発だとデイリースクラムが必須であり、
その場がチャットベースになることは、まぁ、良いとして。

問題は私の仕事場は、Rocket.chatの3000番ポートにアクセスできなかった。
なぜか。
80番でないからだろうねぇ、きっと。。。

わけもわからない外部サーバのわけわからんポートにはアクセスできないようになっているんだね。
よく出来ているよ、本当に。

前置きは長くなったけど、Nginxを使って、80->3000のポートフォワーディング的なことをします。

Nginx on Docker

Nginx用に作業場を作っておくと良い。
コンフィグファイルとか作るから。

その作業場でコマンドを打っていく。

# docker run --name nginx -d nginx
# mkdir nginx
# docker cp nginx:/etc/nginx/nginx.conf nginx/nginx.conf
# docker rm nginx

docker cpを使って、デフォルトのコンフィグを持ってきている。
特に必要なければ、やらなくても良い。

次に、リバースプロキシの設定を作成する

# mkdir nginx/conf.d
# vi nginx/conf.d/chat.conf


server {
    server_name (バーチャルホスト名);
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    location / {
        proxy_pass http://(ホスト名):3000;
    }
}

バーチャルホスト名には、DNSのAレコードを設定
私の場合、chatというAレコードを設定しているので、chat.hoge.co.jpという感じ
hoge.co.jpドメイン名で設定しているヤツね。

f:id:hatman62:20160617000306p:plain

nginx.confは、特にいじらなくてもOKだった。
必要に応じて編集してくださいな。

じゃ、起動します

# docker run --name nginx -p 80:80 \
 -v `pwd`/nginx/nginx.conf:/etc/nginx/nginx.conf:ro  \
 -v `pwd`/nginx/conf.d:/etc/nginx/conf.d:ro \
 -d nginx

わかりづらそうなオプションの意味を解説していくと、

-p 80:80 : ホストOSの80番ポートのアクセスをコンテナの80番として渡すよ
-v XXXX:YYYY:ro : XXXがホストのファイルパス、YYYがコンテナ上でのファイルパス。roは読み取り専用の意

で、起動後、chat.hoge.co.jpにアクセスすると、無事、チャットが見れるようになりました。
これで職場で見れるようになると嬉しいなぁ。。。無理かなぁ。。。