Beenden Sie „Verbindung abgelehnt“-Fehler in der Produktion

Beenden Sie „Verbindung abgelehnt“-Fehler in der Produktion

Ich habe vor Kurzem angefangen, error: [Errno 111] Connection refusedFehlermeldungen von Benutzern zu erhalten http://yandex.com/bots, die meine Website in der Produktion crawlen. Es macht mir nichts aus, dass sie die Site crawlen, aber ich möchte diese E-Mails lieber nicht erhalten.

Ich vermute, dass sie abgelehnt werden, weil sie httpeinen Port verwenden 80, während meine Website erfordert https. In diesem Fall ist es gut, dass sie abgelehnt werden. Ich bin mir jedoch nicht sicher, warum ich diese Fehler erhalte (seit letzter Woche 4-5 Mal pro Tag).

Irgendwelche Ideen, wie man diese Fehler stoppen kann? Ich verwende Python 2.7, Heroku und Cloudflare.

Internal Server Error: /team/46/
Traceback (most recent call last):
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/newrelic/hooks/framework_django.py", line 544, in wrapper
    return wrapped(*args, **kwargs)
  File "/app/wehealth/wehealth/utils.py", line 121, in __render_with
    d = f(request, *args, **kwargs)
  File "/app/wehealth/users/views.py", line 737, in team
    team = get_group(team, team_id, team_key)
  File "/app/wehealth/wehealth/utils.py", line 770, in get_group
    group = get_group_goals(group)
  File "/app/wehealth/wehealth/utils.py", line 786, in get_group_goals
    createGoal2Group.delay(group['info'], g)
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/task.py", line 453, in delay
    return self.apply_async(args, kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/task.py", line 565, in apply_async
    **dict(self._get_exec_options(), **options)
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/base.py", line 354, in send_task
    reply_to=reply_to or self.oid, **options
  File "/app/.heroku/python/lib/python2.7/site-packages/celery/app/amqp.py", line 305, in publish_task
    **kwargs
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/messaging.py", line 172, in publish
    routing_key, mandatory, immediate, exchange, declare)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 470, in _ensured
    interval_max)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 382, in ensure_connection
    interval_start, interval_step, interval_max, callback)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/utils/__init__.py", line 246, in retry_over_time
    return fun(*args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 250, in connect
    return self.connection
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 756, in connection
    self._connection = self._establish_connection()
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 711, in _establish_connection
    conn = self.transport.establish_connection()
  File "/app/.heroku/python/lib/python2.7/site-packages/kombu/transport/pyamqp.py", line 116, in establish_connection
    conn = self.Connection(**opts)
  File "/app/.heroku/python/lib/python2.7/site-packages/amqp/connection.py", line 165, in __init__
    self.transport = self.Transport(host, connect_timeout, ssl)
  File "/app/.heroku/python/lib/python2.7/site-packages/amqp/connection.py", line 186, in Transport
    return create_transport(host, connect_timeout, ssl)
  File "/app/.heroku/python/lib/python2.7/site-packages/amqp/transport.py", line 299, in create_transport
    return TCPTransport(host, connect_timeout)
  File "/app/.heroku/python/lib/python2.7/site-packages/amqp/transport.py", line 95, in __init__
    raise socket.error(last_err)
error: [Errno 111] Connection refused

Request repr(): 
<WSGIRequest
path:/team/46/,
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
COOKIES:{},
META:{u'CSRF_COOKIE': u'y8sR9HccmrzW8RaYDQwmalvKiRl2E6DK',
 'HTTP_ACCEPT': '*/*',
 'HTTP_ACCEPT_ENCODING': 'gzip,deflate',
 'HTTP_CONNECTION': 'close',
 'HTTP_CONNECT_TIME': '0',
 'HTTP_FROM': '[email protected]',
 'HTTP_HOST': 'wehealth.herokuapp.com',
 'HTTP_TOTAL_ROUTE_TIME': '0',
 'HTTP_USER_AGENT': 'Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)',
 'HTTP_VIA': '1.1 vegur',
 'HTTP_X_FORWARDED_FOR': '77.88.47.24, 10.33.252.175',
 'HTTP_X_FORWARDED_PORT': '80',
 'HTTP_X_FORWARDED_PROTO': 'http',
 'HTTP_X_REQUEST_ID': 'a0a5b07f-b6be-40ec-b04a-81690188d0b4',
 'HTTP_X_REQUEST_START': '1558372953380',
 'PATH_INFO': u'/team/46/',
 'QUERY_STRING': '',
 'REMOTE_ADDR': 'localhost',
 'REQUEST_METHOD': 'GET',
 'SCRIPT_NAME': u'',
 'SERVER_NAME': 'unix',
 'SERVER_PORT': '/tmp/nginx.socket',
 'SERVER_PROTOCOL': 'HTTP/1.0',
 'SERVER_SOFTWARE': 'waitress',
 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7fc4b5d041e0>,
 'wsgi.file_wrapper': <class 'waitress.buffers.ReadOnlyFileBasedBuffer'>,
 'wsgi.input': <newrelic.api.wsgi_application._WSGIInputWrapper object at 0x7fc4857e7310>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': True,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'http',
 'wsgi.version': (1, 0)}>

AKTUALISIEREN Da es so aussieht, als ob meine eigene App den Fehler verursacht, ist hier der Code in der asynchronen Aufgabe, der mit dem Fehler verknüpft ist:

@shared_task
def createGoal2Group(group, goal):
    # "Create a Goal2Group link if user completes goal for first time"
    goal2group = Goal2Group.objects.get_or_create(group=group, goal=goal)

Antwort1

Nein, diese Dinge funktionieren in die entgegengesetzte Richtung, als Sie sich vorstellen. Die einzige Zeit, in der Sie "Verbindung abgelehnt" sehen, ist, wennDumit einem anderen Server verbinden.

(Wenn Ihr Server keine HTTP-Verbindungen akzeptiert, dannKunden(also Yandex-Bots) würden vom Server die Fehlermeldung „Verbindung verweigert“ erhalten –nichtIhre Webanwendung. Außerdem kümmert sich die Webanwendung nicht einmal um Verbindungen – das ist die Aufgabe der Heroku-Webserver.)

Schauen Sie sich Ihren Python-Stacktrace genauer an: Er geht vom wehealth.utils.get_group()asynchronen Task-Paket „celery“ zum Messaging-Client „amqp“, der schließlich einen Fehler aus amqp.transport heraus meldet. Mit anderen Worten:Ihre App kann den AMQP-Server nicht erreichen.

verwandte Informationen