Gunicorn: OSError: [рддреНрд░реБрдЯрд┐ 0] рддреНрд░реБрдЯрд┐

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдордИ 2018  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рдореИрдВ рдРрдк рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ
Gunicorn -w 2 -b ' рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:8585 ' --timeout=200 --certfile=crt.crt --keyfile=key.key service:app

рдФрд░ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ

[2018-05-08 14:53:36 +0500] [11227] [ERROR] Socket error processing request.
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gunicorn/workers/sync.py", line 134, in handle
    req = six.next(parser)
  File "/usr/lib/python3/dist-packages/gunicorn/http/parser.py", line 41, in __next__
    self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
  File "/usr/lib/python3/dist-packages/gunicorn/http/message.py", line 153, in __init__
    super(Request, self).__init__(cfg, unreader)
  File "/usr/lib/python3/dist-packages/gunicorn/http/message.py", line 53, in __init__
    unused = self.parse(self.unreader)
  File "/usr/lib/python3/dist-packages/gunicorn/http/message.py", line 165, in parse
    self.get_data(unreader, buf, stop=True)
  File "/usr/lib/python3/dist-packages/gunicorn/http/message.py", line 156, in get_data
    data = unreader.read()
  File "/usr/lib/python3/dist-packages/gunicorn/http/unreader.py", line 38, in read
    d = self.chunk()
  File "/usr/lib/python3/dist-packages/gunicorn/http/unreader.py", line 65, in chunk
    return self.sock.recv(self.mxchunk)
  File "/usr/lib/python3.5/ssl.py", line 922, in recv
    return self.read(buflen)
  File "/usr/lib/python3.5/ssl.py", line 799, in read
    return self._sslobj.read(len, buffer)
  File "/usr/lib/python3.5/ssl.py", line 585, in read
    v = self._sslobj.read(len)
OSError: [Errno 0] Error

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рдореНрдо, рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реЛрдз рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рдЗрдерди ssl рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдирдХреНрд╕ рдкрд░ рд░реИрдЧреНрдб рдИрдУрдПрдл рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИ: https://bugs.python.org/issue31122

рд╕рднреА 30 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд░реА рд╕реНрдореГрддрд┐ рд╕реЗ, рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдмрд┐рдирд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдХреЛ рджреВрд╕рд░реЗ рдореБрджреНрджреЗ рдкрд░ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рддреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЗрд╕ рддрд░рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ?

@usmetanina рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдЧреНрд░рд╛рд╣рдХ Gunicorn рд╕реЗ рднреА рдЬреБрдбрд╝рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ SSL рд╡рд┐рдХрд▓реНрдк рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ? @usmetanina , рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ

@benoitc рдореБрдЭреЗ рдЕрдХреНрд╕рд░ python3.6 рдФрд░ gunicorn 19.9.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ @usmetanina рдХреА рд╕рдЯреАрдХ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ ред

рдореИрдВ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рднреАрддрд░ рдЪрд▓ рд░рд╣реЗ рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

gunicorn --workers=3 --bind=0.0.0.0:8000 --config=gunicorn_config.py --preload main

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ (рдбреЛрдореЗрди-with-cert.com рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЛрдореЗрди рдирд╛рдо рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реИ):

workers = 3
bind = '0.0.0.0:443'
certfile = '/etc/letsencrypt/live/domain-with-cert.com/fullchain.pem'
keyfile = '/etc/letsencrypt/live/domain-with-cert.com/privkey.pem'

рдЗрд╕реЗ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рдЖрдкрдХреЛ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП рддреЛ рдмрд╕ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

@willpatera , рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ:

рдореЗрд░реА рд╕реНрдореГрддрд┐ рд╕реЗ, рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдмрд┐рдирд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

@tilgovi рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреАред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрд╕рдПрд╕рдПрд▓ рд╕реЗ рдЬреБрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХреЛрдИ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реБрдЭрд╛рд╡?

@willpatera рдореИрдВ рдХрд╣реВрдВрдЧрд╛, рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдЕрдиреБрд░реЛрдз рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рд╣реИ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рд▓реЙрдЧ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдЕрдиреБрд░реЛрдз рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЧрдирд┐рдХреЛрд░реНрди рдЗрд╕реЗ рдХрднреА рд▓реЙрдЧ рди рдХрд░реЗред

@tilgovi рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧрд▓рдд рдереА:
рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рд╣реИ (рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде)ред рддреЛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╢рдХ рдирд╣реАрдВ рдХрд┐ рдпрд╣ https рд╣реИ рди рдХрд┐ httpред
рдореИрдВ рдЬреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝ рд░рд╣реА рд╣реЛрддреА рд╣реИред рдЬрдм рд╕рд░реНрд╡рд░ рд╡реНрдпрд╕реНрдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╢реНрд░рдорд┐рдХреЛрдВ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫ? рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реБрдЭрд╛рд╡ рд╣реИ рддреЛ рдореИрдВ рдЦреБрд╢реА рд╕реЗ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╕рд╛рджрд╛ HTTP рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рд╡рд╣реА рджреЗрдЦрд╛ рд╣реИред Gunicorn + Flask (рдПрдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдкреАрдЫреЗ) рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕рд░реНрд╡рд░ рдерд╛ рдЬреЛ рдорд╣реАрдиреЛрдВ рддрдХ рдареАрдХ рд░рд╣рд╛, рдлрд┐рд░ рдЕрдЪрд╛рдирдХ рд╣рд░ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ Gunicorn рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛:

[2019-11-21 07:27:36 +0000] [24245] [ERROR] Socket error processing request.
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/workers/sync.py", line 134, in handle
    req = six.next(parser)
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/http/parser.py", line 41, in __next__
    self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/http/message.py", line 181, in __init__
    super(Request, self).__init__(cfg, unreader)
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/http/message.py", line 54, in __init__
    unused = self.parse(self.unreader)
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/http/message.py", line 193, in parse
    self.get_data(unreader, buf, stop=True)
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/http/message.py", line 184, in get_data
    data = unreader.read()
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/http/unreader.py", line 38, in read
    d = self.chunk()
  File "/usr/local/lib/python3.6/dist-packages/gunicorn/http/unreader.py", line 65, in chunk
    return self.sock.recv(self.mxchunk)
  File "/usr/lib/python3.6/ssl.py", line 997, in recv
    return self.read(buflen)
  File "/usr/lib/python3.6/ssl.py", line 874, in read
    return self._sslobj.read(len, buffer)
  File "/usr/lib/python3.6/ssl.py", line 633, in read
    v = self._sslobj.read(len)
OSError: [Errno 0] Error

рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рд▓реЙрдЧ рдореЗрдВ рдХреБрдЫ рднреА рд╕рдВрдХреЗрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░рд┐рдЧрд░ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред

рдпрд╣ Gunicorn 19.9.0 рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЧрд▓-рдХреЛрд░реЗрдб рд╕рд░реНрд╡рд░ рдкрд░ 3 рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рдерд╛ред

рдЪреВрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╣реИ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рдореИрдВ рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХрднреА рднреА рдкреБрди: рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдХреЛрдИ рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдЕрдиреНрдп рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЛрдб рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдлрд┐рд░ рд╕реЗ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХреЗ, рдореИрдВ рд╕рднреА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдПрд▓рдмреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╣рддрд╛ рд╣реИ? рдпрд╣ рдПрд▓рдмреА рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрддреНрддрд░ рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИ?

рдЬрдм рдореИрдВрдиреЗ "рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░" рдХрд╣рд╛, рддреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдбреАрдПрди рдпрд╛ рдХреИрд╢рд┐рдВрдЧ рд▓реЗрдпрд░ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ: рдпрд╣ рдЕрдореЗрдЬрд╝реЕрди рдХреНрд▓рд╛рдЙрдбрдлрд╝реНрд░рдВрдЯ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ Gunicorn рд╕рд░реНрд╡рд░ (EC2 рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ) рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред

рдПрдЪрдЖрд░рдПрдо рдХреЛ рдЕрдореЗрдЬрд╝реЕрди рдХреНрд▓рд╛рдЙрдбрдлрд╝реНрд░рдВрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдПрд▓ рдЕрдиреБрд░реЛрдз рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? @ рдПрдХреНрд╕рдкреНрд▓реЛрдбрд┐рдВрдЧ рдЧреЛрднреА ред рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ ssl рдкрд░ рдХреНрдпреЛрдВ рд╕реБрдирдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ?

@benoitc рддреЛ, рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рджреЛ рдкрд░рддреЗрдВ рд╣реИрдВред HTTPS рдкрд░ рд╣рдорд╛рд░реЗ CloudFront рдбреЛрдореЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдиреЗрдХреНрдЯ рдХреЗ рд╕рджрд╕реНрдп, рдФрд░ рдлрд┐рд░ CloudFront Gunicorn рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рднреА HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рдПрдХ рдЕрд▓рдЧ рдбреЛрдореЗрди рдирд╛рдо рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд╕рд╛рде) рд╣рдорд╛рд░реЗ рдмреИрдХрдПрдВрдб рдиреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХреИрд╢, рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рд╕рд╣ рд▓реЛрдХред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЙрд╕ рд╕реЗрдХреЗрдВрдб рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрд░реЛрдз рд╣реИ? рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣рд╕ рдпреЛрдЧреНрдп рд╣реИ рдпрд╣ рд╡реНрдпрд░реНрде рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрднрд╡рддрдГ рдирд╣реАрдВ - рдпрд╣ рдЕрдореЗрдЬрд╝реЕрди рдХреЛ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреЙрдо рдкрд░ рдЬрд╛рд╕реВрд╕реА рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдРрд╕реЗ рдирд┐рдпрд╛рдордХ рдХрд╛рд░рдг рднреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдореЗрд░реА рдХрдВрдкрдиреА рдХреЗ рдЙрджреНрдпреЛрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рднреА рддрд░рд╣ рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди)ред рд╡реНрдпрд░реНрде рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╣рдо рдХрд░рддреЗ рд╣реИрдВред \_(уГД)_/┬п

рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЙрдбрдлрд╝реНрд░рдВрдЯ рдЖрдкрдХреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдПрдХ рд╕рд╛рджрд╛ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд░рд╣рд╛ рд╣реЛ? рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЙрдбрдлрд╝реНрд░рдВрдЯ рд▓реЙрдЧ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@benoitc рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ CloudFront рдХрд┐рд╕реА рднреА рд▓реЙрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ HTTP рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐:

  • рд╣рдорд╛рд░рд╛ рд╡рд┐рддрд░рдг "рдХреЗрд╡рд▓ HTTPS" рдкрд░ Gunicorn рдореВрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CloudFront рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • рдкреЛрд░реНрдЯ 80 . рдкрд░ Gunicorn рдирд╣реАрдВ рд╕реБрди рд░рд╣рд╛ рд╣реИ
  • рдЕрдЧрд░ рдореИрдВ HTTP рдкрд░ рд╣рдорд╛рд░реЗ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛
  • рдЬрдм рдореБрдЭреЗ рдКрдкрд░ рдЙрджреНрдзреГрдд OSError рдорд┐рд▓ рд░рд╣рд╛ рдерд╛, рддреЛ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдкрд░ Gunicorn рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рддреБрд░рдВрдд рдареАрдХ рд╣реЛ рдЧрдИ, рдЬреЛ рдХрд┐ Gunicorn рдЫреЛрд░ рдкрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реЛрдиреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрд▓рд╛рдЙрдбрдлреНрд░рдВрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд╣реАрдВ

@ExplodingCabbage рдареАрдХ рд╣реИ рдореИрдВ 20.0.1 рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдВрдЧрд╛ред рдПрдХ рдЖрдЦрд┐рд░реА рдмрд╛рдд, рдЖрдк рдкрд╛рдпрдерди рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

3.6.8

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЕрдкрдиреА рдХрд╣рд╛рдиреА рд╕реЗ рдПрдХ рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ: Gunicorn рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░ Gunicorn рдХреЛ LetsEncrypt рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХрд▓ рдЧрд▓рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдерд╛ рдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЬрд┐рд╕ рджрд┐рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╢реБрд░реВ рд╣реБрдИрдВ рдФрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЕрджреНрдпрддрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдерд╛, рдЙрд╕ рджрд┐рди рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рд▓реЙрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ, рдореБрдЭреЗ рдЕрдм рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рджрд┐рди рд╢реБрд░реВ рд╣реБрдИ рдереАрдВ рдЬрдм рдкрд┐рдЫрд▓реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдереАред

рдпрд╣рд╛рдВ рдЕрднреА рднреА рдХреБрдЫ рд░рд╣рд╕реНрдп рд╣реИ, рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдорд░рд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреНрдпрд╛ рджрд░реНрд╢рд╛рддреА рд╣реИ, рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╕рдВрджреЗрд╢ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ?), рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЬреЛ рдХрдерд╛ рджреА рдереА - рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рдиреАрд▓реЗ рд░рдВрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реБрдИ рдереА рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдХреЗ - рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CloudFront Gunicorn рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ Gunicorn, рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рд╛рд░реНрдердХ рд░реВрдк рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╕рдВрджреЗрд╢ рд░рд╣рд┐рдд OSError рдмрдмрд▓ рдЕрдк рджреЗрддрд╛ рд╣реИред

рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рдмрддреНрддрдЦреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдирд╣реАрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдк рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдФрд░ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред

@ExplodingCabbage рдУрд╣ рдпрд╣ рдХрд╛рдлреА

рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рд░реВрдк рд╕реЗ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рд╣рдж рддрдХ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд╕рд╛рдзрди рдердХрд╛рд╡рдЯ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрд╡рд░реБрджреНрдз рдХреЙрд▓ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЬрдорд╛ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рднреВрд▓рдХрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдЪрдЯреАрдПрдЪ

рдирдорд╕реНрдХрд╛рд░! рдореИрдВ рдЗрд╕ рд╕рдЯреАрдХ рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдИрд╕реАрдПрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдмрдВрджреВрдХ/рдлреНрд▓рд╛рд╕реНрдХ рд╕реЗрд╡рд╛ рд╣реИред рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛:

python    - 3.7.4
gunicorn  - 19.9.0
flask     - 1.0.4

рд╕реЗрд╡рд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЯреАрдПрд▓рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рд▓реЙрдЧ OSErrors рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдпреЗ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ (рдЯреАрд╕реАрдкреА) рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реИрдВред

рдореИрдВ рд╕реБрдирдиреЗ рд╡рд╛рд▓реЗ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдХрд░ рдФрд░ рдмрдВрдж рдХрд░рдХреЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 8000):

$ nc -vz 127.0.0.1 8000
localhost [127.0.0.1] 8000 (irdmi) open

рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХреА рдЬрд╛ рд░рд╣реА рд╣реИ:

Traceback (most recent call last):
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/workers/sync.py" line 134 in handle
        req = six.next(parser)
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/http/parser.py" line 41 in __next__
        self.mesg = self.mesg_class(self.cfg, self.unreader, self.req_count)
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/http/message.py" line 181 in __init__
        super(Request, self).__init__(cfg, unreader)
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/http/message.py" line 54 in __init__
        unused = self.parse(self.unreader)
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/http/message.py" line 193 in parse
        self.get_data(unreader, buf, stop=True)
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/http/message.py" line 184 in get_data
        data = unreader.read()
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/http/unreader.py" line 38 in read
        d = self.chunk()
    File "/nix/store/nh3v0c2nipihwblkdn0mh2kqyv3jq9nz-python3-3.7.4-env/lib/python3.7/site-packages/gunicorn/http/unreader.py" line 65 in chunk
        return self.sock.recv(self.mxchunk)
    File "/nix/store/azwzsm1pkbzjxpkiq88w68p4jdghgasl-python3-3.7.4/lib/python3.7/ssl.py" line 1056 in recv
        return self.read(buflen)
    File "/nix/store/azwzsm1pkbzjxpkiq88w68p4jdghgasl-python3-3.7.4/lib/python3.7/ssl.py" line 931 in read
        return self._sslobj.read(len)
OSError: [Errno 0] Error

рдЙрдореНрдореАрдж рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛!

рд╣рдореНрдо, рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реЛрдз рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рдЗрдерди ssl рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдирдХреНрд╕ рдкрд░ рд░реИрдЧреНрдб рдИрдУрдПрдл рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИ: https://bugs.python.org/issue31122

рдЬреИрд╕рд╛ рдХрд┐ @shevisjohnson рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрджрд┐ рдЖрдк "nc -vz hostname port_no" рдирд┐рд╖реНрдкрд╛рджрд┐рдд
рд╣рдо рдиреАрдЪреЗ рд▓реЙрдЧрд┐рдВрдЧ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВред

$cat logging_config.yml

version: 1

formatters:
  simple:
    format: " %(asctime)s || %(name)s || %(levelname)s || %(message)s"

  test_api:
    format: "[%(asctime)s] [%(process)s] [%(levelname)s] %(message)s"

handlers:

  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout

  test_api_file_handler:
     class: logging.handlers.RotatingFileHandler
     level: DEBUG
     formatter: test_api
     filename: logs/test.log
     maxBytes: 2000000000
     backupCount: 1
     encoding: utf8

loggers:

  test_api: 
    level: DEBUG
    handlers: [test_api_file_handler]
    propagate: 0

root:
  level: DEBUG
  handlers: [console]

рдпрд╣рд╛рдБ рдкрд╛рдпрдерди рдлрд╝рд╛рдЗрд▓ рд╣реИред

import logging
import yaml
from flask import Flask

app = Flask(__name__)

def logSetter(logger_name:str) -> logging:
    with open("logging_config.yml", 'r') as f:
        config = yaml.safe_load(f)
    logging.config.dictConfig(config)
    logger = logging.getLogger(logger_name)
    return logger

logger=logSetter(logger_name="test_api")

@app.route("/api/test")
def hello():
     app.logger.info("hey from api")
     return "Hello from Python!"

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓реЗрдЧреАред

рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдХрдИ Gunicorn рдРрдкреНрд╕ рд╕рдорд╡рд░реНрддреА рд▓реЛрдб рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд╖рдг рд▓рдЧрд╛: hey рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ gthread рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╡реАрдирддрдо Gunicorn (20.0.4) рдХреЛ 100 рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП:

$ hey -n 100 -c 100 https://127.0.0.1:8000

```
$ рдЧрдирд┐рдХреЛрд░реНрди рдРрдк: рдРрдк -k gthread --certfile=... --keyfile=...
...
[2020-07-11 19:10:58 +0000] [3628247] [рддреНрд░реБрдЯрд┐] рд╕реЙрдХреЗрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзред
рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
рд╡рд╛рдкрд╕реА рд╕реНрд╡рдпрдВ._sslobj.read(len)
OSError: [рддреНрд░реБрдЯрд┐ 0] рддреНрд░реБрдЯрд┐


Using a Debian 9 / Linux 4.14.67 based environment.

The WSGI app to reproduce need not be anything beyond:
```python
# app.py
def app(environ, start_response):
    start_response("200 OK", [])
    return ""

рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ!

рдпрджрд┐ рдореВрд▓ рдХрд╛рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ https://bugs.python.org/issue31122 рд╣реИ :

  • 4 рдорд╛рд░реНрдЪ рдХреЛ рдПрдХ рдлрд┐рдХреНрд╕ рд╕рдмрдорд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдкрд╛рдпрдерди/рд╕реАрдкреАрдерди # 18772), рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рднреА рдХреЛрд░ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдПрдХ Gunicorn рдЕрдиреБрд░рдХреНрд╖рдХ рд╡рд╣рд╛рдБ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝рдХрд░ рдпрд╛ BPO-31122 рдкрд░ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ gunicorn рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдорджрдж рдХрд░реЗрдЧрд╛?
  • Gunicorn рдХреЛ рдЕрднреА рднреА Python рдХреЗ рд╕рдорд░реНрдерд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдХрд┐ рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд┐рдХреНрд╕ рдХреЛ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рднреА рдкреВрдЫрдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдпрд╣ рдореЗрд░реЗ рд╕рдВрдЧрдарди рдХреЛ рдЙрддреНрдкрд╛рдж рдореЗрдВ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдмрдЧрдлрд┐рдХреНрд╕ 3.8 рдФрд░ 3.9 рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдЙрддрд░рд╛, рд▓реЗрдХрд┐рди рд╡реЗ <= 3.7 рдИрдУрдПрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЕрднреА рднреА рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП 3.6 рдкрд░ рдЕрдЯрдХреЗ рд╣реБрдП рд╣реИрдВред рдХреНрдпрд╛ рдЗрд╕ рд╕рдордп рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХреЛрдИ рдЬреНрдЮрд╛рдд рд╕рдорд╛рдзрд╛рди рдЧрдирд┐рдХреЛрд░реНрди рдореЗрдВ рд╣реА рд╣реИ? рдХреНрдпрд╛ рдХреБрдЫ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИ?

рд╣рдо рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЛ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рднрд╛рд╡рд┐рдд рдиреЛрдбреНрд╕ рдкрд░ рднрд╛рд░реА рд╕рдВрд╕рд╛рдзрди рд╕реНрдкрд╛рдЗрдХреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред

3.8 рд╕реЗ рдкрд╣рд▓реЗ рдмреИрдХрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рдбреНрдбреА рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд┐рдХреНрд╕ рдХреЛ CPython 3.8.6 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рддрдп рд╣реИ ред

рдпрд╣ рдмрддрд╛рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдпрд╣ рдЯреНрд░реЗрд╕рдмреИрдХ рдХрд╣рд╛рдВ рд╕реЗ рдирд┐рдХрд▓рддрд╛ рд╣реИ - рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, gevent рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ рдРрдк рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЧреАрд╡реЗрдВрдЯ/рдЧреНрд░реАрдирд▓реЗрдЯ рдХреЗ рднреАрддрд░ рдХрд╣реАрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХреЙрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред Gunicorn рдХреЗ рд▓рд┐рдП, рдпрд╣ рдпрд╣рд╛рдБ рд╣реЛрддрд╛ рд╣реИ, рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП:

https://github.com/benoitc/gunicorn/blob/e636bf81989bb833d2b99104feb11e86c3f2c43a/gunicorn/workers/sync.py#L150

Gunicorn рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд▓реЙрдЧ рдореЗрдВ рд╢реЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рддреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:

import logging

class HandshakeFilter(logging.Filter):
    # example: https://docs.python.org/3/howto/logging-cookbook.html
    # I have not tested this
    def filter(self, record):
        return "socket error processing request" in record.msg.casefold()

logging.getLogger("gunicorn").addFilter(HandshakeFilter())

рд╕рдВрдмрдВрдзрд┐рдд gevent рдореБрджреНрджрд╛: https://github.com/gevent/gevent/issues/1671

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

mw44118 picture mw44118  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Bogdanp picture Bogdanp  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ttcqaq picture ttcqaq  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gr790 picture gr790  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zenglingyu picture zenglingyu  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ