2021.02.02  

【502 Bad gateway】nginx.confのパラメータを調べてみた

Nginx    


Django用のwebサーバとしてnginxを導入したが、構築後、502エラーが頻発した。
nginx.conf の内容をよく調べてみたところ、問題が緩和されたため、記事にすることにした。
私の作成したnginx.confの内容とパラメータの説明を以下に記載します。

/etc/nginx/nginx.conf
user  nginx;
worker_processes  2;
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;
    keepalive_requests 100;
    client_header_timeout 30;
    client_body_timeout 30;

    include /etc/nginx/conf.d/*.conf;
}

server {
    listen      80;
    server_name 127.0.0.1;
    charset     utf-8;

    location /static {
        alias /static;
    }

設定値一覧

ディレクティブ コンテキスト 内容
user main workerプロセスの実行ユーザを指定
worker_processes main workerプロセスの数(CPUの数)を指定
erro_log main エラーログファイルパスとログレベルを指定
pid main nginxのプロセス情報ファイルの格納先を指定
worker_connections events 1つのworkerプロセスが処理する最大コネクション数を指定
log_format http アクセスログの書式を指定
access_log http アクセスログのパスとログレベルを指定
sendfile http コンテンツのファイルの読み込みとクライアントへのレスポンスの送信にsendfile() APIを使うかを指定する。onにするとファイルの転送効率があがるが、プラットフォームやファイルシステムによっては問題が起きることがある。onまたはoffで指定。
tcp_nopush http sendfileがonのとき、LinuxのTCP_CORKソケットオプションを使うかを設定する。onにするとレスポンスヘッダとファイルの内容をまとめて送るようになり、少ないパケット数で効率良く送ることができる。onまたはoffで指定。
keepalive_timeout http HTTP通信をタイムアウトせずにいる秒数を設定する。秒数で指定。
keepalive_requests http 1つのキープアライブ接続で処理できる要求の最大数を設定する。要求が最大数となると、接続が閉じられる。秒数で指定。
client_header_timeout http クライアントのリクエストヘッダの読み込みのタイムアウトを設定する。クライアントがこの期間にヘッダ全体を転送しなかった場合、リクエストは408(Request Time-out)エラーを使用し中断する。 秒数で指定。
client_body_timeout http クライアントリクエストボディの読み込みタイムアウト時間を設定する。クライアントがこの期間に何も転送しなかった場合は、リクエストは408(Request Time-out)エラーを使用し中断する。秒数で指定。
gzip server 転送するコンテンツをgzip圧縮する。デフォルトではContent-Typeがtext/htmlであるもののみ圧縮するため、他のコンテンツを圧縮したい場合は別途gzip_typesを設定する必要がある。onまたはoffで指定。
gzip_types server gzip圧縮する対象ファイルを設定。ファイル種別を指定。
include すべて 他の設定ファイルを読み込む

パラメータを調べた結果、gzipと gzip_typesの設定 が serverコンテキストではなく、httpコンテキストに定義されていた。それらはserverコンテキストに設定するのが正しいのでそのように修正を行った。(上記の設定ファイル例では、既に設定を修正してある)

その結果、502エラーの出力頻度が減りました。

それでもまだ、時々502エラーがでるので、原因が分かり次第また記事にしたいと思います。

-- 2021/2/11 追記 --
無事解決しました!
【nginx 502エラー】Docker-compose + nginx + uwsgiのログ解析

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信