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のコンテナ構築