502 плохих шлюза через 30 секунд - PullRequest
0 голосов
/ 13 апреля 2020

Одна из страниц моего сайта требует долгих вычислений на сервере (~ 2 минуты). Если я запускаю сайт на localhost, он работает нормально. Но в производстве, когда ~ 30 секунд. Вот мой http-раздел nginx conf:

http {
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;
tcp_nodelay         on;
keepalive_timeout   120;
types_hash_max_size 2048;

include             /etc/nginx/mime.types;
default_type        application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
            proxy_read_timeout 300;
            proxy_connect_timeout 300;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}

Я попытался добавить:

fastcgi_read_timeout 300;
proxy_read_timeout 300;

в конце (после "server"), но ничего не сделал.

1 Ответ

1 голос
/ 13 апреля 2020

Если вы получили ошибку 502 Bad Gateway, это означает, что ваш сервер приложений (я думаю, его Unicorn в соответствии с вашими тегами) отправляет тайм-аут, а не Nginx, вы должны увеличить тайм-аут в вашем файле unicorn.rb на рабочем сервере. .

worker_processes 2
listen "/tmp/xxx.socket"
##equal to your proxy read timeout in the Nginx config.
timeout 300 
pid "/tmp/unicorn.xxx.pid"

В случае Python Зеленый Единорог, пожалуйста, сделайте следующее:

NUM_WORKERS=3
TIMEOUT=300

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--timeout $TIMEOUT \
--log-level=debug \
--bind=x.x.x.x \
--pid=$PIDFILE
...