← All Articles

nginx-uWSGIの通信でTCPソケットを使う時の設定例(Dockerコンテナ)

Posted on

はじめに

nginx-uWSGI間の通信には、UNIXソケットorTCPソケットを使うようです。

TCPソケットを使う場合の設定ファイルの例をこちらにメモしておきます。

前提としてnginx+uWSGI+Flaskの構成されていますが 【Docker】Nginx+uWSGI+Flaskのコンテナ構築 を参考にさせていただきました。

手を動かして確認したい場合は上記のサイトをご確認いただいてから、こちらの記事をご確認いただくことをお勧めいたします。

docker-compose,nginx,uWSGIの設定ファイル

docker-composeの設定ファイル(docker-compose.yml)

nginx-uWSGI間の名前解決にhostnameを使って通信させたいので

hostname : app,hostname : webを追記しました。

version: "3"
services:
  ## appのコンテナにuWSGI+Flaskが配置されてます
  app: 
    build: ./app
    volumes:
      - ./app/flaskapp:/app
    command: uwsgi --ini /app/app.ini 
    hostname : app ## 通信のためhostnameをappに指定

  ## webのコンテナにnginxをが配置されてます
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./web/nginx.conf:/etc/nginx/conf.d/default.conf
    hostname : web ## 通信のためhostnameをwebに指定

nginxの設定ファイル(nginx.conf)

webのコンテナからappのコンテナへの通信には、3031ポートを使うようにしました。

よってここではuwsgi_pass app:3031; と設定しました。

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
        include uwsgi_params;
        uwsgi_pass app:3031; ## appのコンテナと3031ポートを使って通信する
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

uWSGIの設定ファイル(app.ini)

app.ini にはuWSGIのパラメータを記載しました。

その中でsoketの設定をするのですが、

3031ポートで通信するのでsocket = :3031を設定しました。

[uwsgi]
module = wsgi:app
master = true
socket = :3031
wsgi-file = /app/wsgi.py
logto = /app/uwsgi.log

参考文献

【Docker】Nginx+uWSGI+Flaskのコンテナ構築

ちゃんと運用するときのuWSGI設定メモ

docker-composeで作成されるものの名前を明示的に指定する方法

Nginx support

技術dockernginxflask