docker-composeでnginxでロードバランサを試した。 nginxの後ろに、3台のexpressのサーバに振り分けるようなものを試してみた。
version: '3' services: lb: image: nginx:latest volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf ports: - "80:80" depends_on: - express1 - express2 - express3 express1: build: context: ./express ports: - "3000:3000" express2: build: context: ./express express3: build: context: ./express
nginx.confはこんな感じ。
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; server_tokens off; #gzip on; #gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/grpc application/octet-stream; upstream backend { server express1:3000; server express2:3000; server express3:3000; } server { listen 80 default_server; server_name 127.0.0.1; location / { proxy_pass http://backend; } } }
nginx.confの設定を見ていく。
まず、ここでバックエンドの3台に振り分ける設定は以下で書いている。
upstream backend { server express1:3000; server express2:3000; server express3:3000; }
次に、ここでロードバランサを有効にするパスを設定している。今回はルートにしている。
location / { proxy_pass http://backend; }
立ち上げて、ブラウザでアクセスしてみると、こんな感じでアクセスが振り分けられた。
express1_1 | GET / 304 30.441 ms - - express2_1 | GET /stylesheets/style.css 304 2.718 ms - - express3_1 | GET / 304 31.145 ms - - express1_1 | GET /stylesheets/style.css 304 0.943 ms - -
とりあえずここまで。