前提・実現したいこと
nginxのerror.logに表示されるエラー「upstream prematurely closed connection while reading response header from upstream, client」
を解決して頻出するnginxの502エラーを解決したいです。
現在、docker-composeでnginxとdjango3、uWSGI、Mriadbの開発環境を構築しております。
すべてを連携させてlocalhost:8000にアクセスすると問題なくトップページや他のページは表示されるのですが、特定の処理を行うとエラーが出てしまうので、問題を解決する為にどなたかご教示して頂けましたら幸いです。
発生している問題・エラーメッセージ
djangoで特定の処理を行う時に下記のエラーが発生し、
nginxの502エラーが表示されてしまいます。
※djangoのみで上記と同じ処理を行った場合は問題なく処理されます。
nginx
1#log/nginx/error.log 2020/12/11 11:53:12 [error] 20#20: *2 upstream prematurely closed connection while reading response header from upstream, client: 172.22.0.1, server: 127.0.0.1, request: "GET / HTTP/1.1", upstream: "uwsgi://172.22.0.3:8001", host: "localhost:8000"
該当のプロジェクト構成
django
├── docker-compose.yml
├── mysql
├── sql
├── log
│ └── nginx
│ └── error.log
├── nginx
│ ├── conf
│ │ └── app_nginx.conf
│ └── uwsgi_params
├── src
│ ├──mysite
│ └──register
└── python
├── Dockerfile
└── requirements.txt
該当のソースコード
docker
1#docker-compose.yml 2 3version : "3.4" 4services: 5 db: 6 """省略""" 7 8 python: 9 build: python 10 command: uwsgi --socket :8001 --module mysite.wsgi --py-autoreload 1 --logto /tmp/mylog.log 11 volumes: 12 - ./src:/code 13 - ./static:/static 14 expose: 15 - "8001" 16 depends_on: 17 - db 18 19 nginx: 20 image: nginx:1.19 21 ports: 22 - "8000:8000" 23 volumes: 24 - ./log/nginx/:/var/log/nginx 25 - ./nginx/conf:/etc/nginx/conf.d 26 - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params 27 - ./static:/static 28 environment: 29 TZ: "Asia/Tokyo" 30 depends_on: 31 - python
conf
1#app_nginx.conf 2 3upstream django { 4 ip_hash; 5 server python:8001; 6} 7 8server { 9 listen 8000; 10 server_name 127.0.0.1; 11 charset utf-8; 12 13 location /static { 14 alias /static; 15 } 16 17 location / { 18 uwsgi_pass django; 19 include /etc/nginx/uwsgi_params; 20 } 21} 22 23server_tokens off;
Dockerfile
1FROM python:3.7 2ENV PYTHONUNBUFFERED 1 3RUN mkdir /code 4WORKDIR /code 5ADD requirements.txt /code/ 6RUN pip install -r requirements.txt 7ADD . /code/
試したこと
uwsgi.iniの追加やapp_nginx.confの設定変更を行って見ましたが別のエラーが発生してしまい、一度元の設定に変更しなおしました。
補足情報(FW/ツールのバージョンなど)
pythonのコンテナにはuWSGIはインストール済みでバージョンは2.0.17です。
特定の処理とは入力内容を元にトークン付きのメールを送信する処理で、何度もリロードを行うとたまにエラーなく処理が完了する場合があります。
djangoのプロジェクト内にuwsgi.pyは自動生成されておりますが、uwsgi.iniは作成しておりません。
uwsgi_paramsはお決まりの呪文が記載されております。
あなたの回答
tips
プレビュー