前提
前回の記事の続き的なコンテンツ
サーバは CentOS7
docker コンテナでWEBサーバがすでに起動している。
ホストサーバ上に複数 docker コンテナでWEBサーバが起動しており、それらをホストサーバのバーチャルホスト経由でプロキシし、それぞれがどのポートにいるかを意識せずにブラウザから見えるようにしたい。
docker コンテナ上の WEBサーバは開発環境であることを想定し、basic 認証をかけたい。
Nginx インストール&自動起動設定
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
ポートリッスンできてるか確認
# ミニマムインストールで入ってなかったのでインストール
sudo yum install lsof
sudo lsof -i :80
----
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 8754 root 6u IPv4 3613680 0t0 TCP *:http (LISTEN)
nginx 8754 root 7u IPv6 3613681 0t0 TCP *:http (LISTEN)
nginx 8755 nginx 6u IPv4 3613680 0t0 TCP *:http (LISTEN)
nginx 8755 nginx 7u IPv6 3613681 0t0 TCP *:http (LISTEN)
----
外部から見えるようにする
# firewall 80, 443アクセスできるようにする
sudo firewall-cmd --add-service=https --zone=public --permanent
sudo firewall-cmd --add-service=http --zone=public --permanent
# ブラウザから nginx の index.html が見えることを確認
htpasswd 設定
sudo mkdir -p /etc/nginx/htpasswd
sudo echo "ユーザ名:$(openssl passwd -apr1 パスワード)" > /etc/nginx/htpasswd/ユーザ名
sudo chown -R nginx:nginx /etc/nginx/htpasswd
sudo chmod 600 /etc/nginx/htpasswd/ユーザ名
sudo chmod 700 /etc/nginx/htpasswd
sudo vim /etc/nginx/nginx/conf
/etc/nginx/nginx/conf
# (省略)
http {
auth_basic "private site";
auth_basic_user_file /etc/nginx/htpasswd/ユーザ名;
# (省略)
sudo nginx -s reload
ブラウザから basic 認証がかかっていることを確認
プロキシ
/etc/nginx/conf.d/hoge.conf
upstream hoge.fuga.com {
# docker コンテナが10080でポートフォワーディングしてるとする
server 127.0.0.1:10080 weight=1;
}
server {
listen 80;
server_name hoge.fuga.com;
access_log /var/log/nginx/hoge.fuga.access.log main;
location / {
proxy_pass http://hoge.fuga.com;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# 設定ファイルチェック
sudo nginx -t
# 設定読み込み
sudo nginx -s reload
# hoge.fuga.com にブラウザ上からアクセスして見れればOK(hostsに設定するのを忘れずに)
docker コンテナが増えたら プロキシ の部分を設定すればOK