2016-07-07 6 views
0

내 응용 프로그램 (nginx)의 서버 쪽에서 499, 클라이언트 쪽에서 504가 나타납니다. 클라이언트 측의 기본 제한 시간은 5000 초이며 응답은 정확히 60 초 후에 나타납니다.nginx 요청 시간 제한

다음은 내 응용 프로그램에 대한 nginx.conf입니다.

user www-data; 
worker_processes auto; 
pid /run/nginx.pid; 

events { 
     worker_connections 768; 
     # multi_accept on; 
} 

http { 
     sendfile on; 
     tcp_nopush on; 
     tcp_nodelay on; 
     keepalive_timeout 65; 
     types_hash_max_size 2048; 
     underscores_in_headers on; 
     include /etc/nginx/mime.types; 
     default_type application/octet-stream; 

     ## 
     # SSL Settings 
     ## 

     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE 
     ssl_prefer_server_ciphers on; 

     ## 
     # Logging Settings 
     ## 

     access_log /var/log/nginx/access.log; 
     error_log /var/log/nginx/error.log; 

     ## 
     # Gzip Settings 
     ## 

     gzip on; 
     gzip_disable "msie6"; 

     # gzip_vary on; 
     # gzip_proxied any; 
     # gzip_comp_level 6; 
     # gzip_buffers 16 8k; 
     # gzip_http_version 1.1; 
     # gzip_types text/plain text/css application/json   
     application/javascript text/xml application/xml application/xml+rss text/javascript; 
     include /etc/nginx/conf.d/*.conf; 
     include /etc/nginx/sites-enabled/*; 
    } 

gunicorn config은 다음과 같습니다

bind = '127.0.0.1:8001' 
backlog = 2048 
workers = 8 
worker_class = 'sync' 
worker_connections = 1000 
timeout = 300 
keepalive = 2 
spew = False 
daemon = False 
pidfile = None 
umask = 0 
user = None 
group = None 
tmp_upload_dir = None 
errorlog = 'gunicorn_error.log' 
loglevel = 'info' 
accesslog = 'gunicorn_access.log' 
proc_name = None 
def post_fork(server, worker): 
    server.log.info("Worker spawned (pid: %s)", worker.pid) 

def pre_fork(server, worker): 
    pass 

def pre_exec(server): 
    server.log.info("Forked child, re-executing.") 

def when_ready(server): 
    server.log.info("Server is ready. Spawning workers") 

def worker_int(worker): 
    worker.log.info("worker received INT or QUIT signal") 

    ## get traceback info 
    import threading, sys, traceback 
    id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) 
    code = [] 
    for threadId, stack in sys._current_frames().items(): 
     code.append("\n# Thread: %s(%d)" % (id2name.get(threadId,""), 
      threadId)) 
     for filename, lineno, name, line in traceback.extract_stack(stack): 
      code.append('File: "%s", line %d, in %s' % (filename, 
       lineno, name)) 
      if line: 
       code.append(" %s" % (line.strip())) 
    worker.log.debug("\n".join(code)) 

def worker_abort(worker): 
    worker.log.info("worker received SIGABRT signal") 

누군가 정확히 왜 이런 일이 내게 말할 수 있습니까? 또한 어떻게 해결할 수 있습니다.

답변

0

나는 긴 실행 명령으로 같은 문제가 있었다. 나는의 nginx의 설정에 루트 엔드 포인트에 대한 유사한 설정으로이 문제를 해결 :

location/{ 
    proxy_pass http://127.0.0.1:8001; 
    ... 
    proxy_connect_timeout 5000s; 
    proxy_read_timeout 5000s; 
} 

에주의를 proxy_connect_timeoutproxy_read_timeout에.

사용자에게 '처리 중 ...'또는 '로드 중 ...'과 같은 빠른 응답을 보내고 백그라운드에서 주 작업을 실행하는 것이 유용 할 수 있습니다.