Таймаут соединения при вызове внешнего API на сервере, но локальный вызов работает
У меня есть приложение Django 4.2.2, работающее на Python 3.11. Одно из представлений выглядит следующим образом:
import requests
from django.http import HttpResponse
def get_captcha(request):
response = requests.get(
"https://geoportale.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/Captcha?type=image&lang=it"
)
session_id = response.cookies.get("JSESSIONID")
request.session["CAPTCHA"] = session_id
content_type = response.headers["content-type"]
return HttpResponse(response.content, content_type=content_type)
При локальном запуске приложения вызов API выполняется успешно. Однако при запуске на сервере Aruba он приводит к тайм-ауту. Вот шаги, которые я предпринял, чтобы попытаться решить эту проблему, но безуспешно:
- Понизили версию OpenSSL до той, которая используется локально (1.1.1n)
- Отключили брандмауэр .
- Поменяли DNS-серверы для разрешения доменов
- Понизили версию Python
Ниже приведен результат traceroute с сервера:
traceroute to geoportale.cartografia.agenziaentrate.gov.it (217.175.52.194), 30 hops
max, 60 byte packets
1 host2-224-110-95.serverdedicati.aruba.it (95.110.224.2) 0.702 ms 0.744 ms 0.824 ms
2 cr2-te0-0-0-2.it2.aruba.it (62.149.185.196) 0.865 ms 0.919 ms *
3 * * *
4 * * *
5 * * *
6 * 93-57-68-2.ip163.fastwebnet.it (93.57.68.2) 10.095 ms 10.516 ms
7 81-208-111-134.ip.fastwebnet.it (81.208.111.134) 10.482 ms 10.370 ms 10.536 ms
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
А вот вывод nslookup с сервера:
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: geoportale.cartografia.agenziaentrate.gov.it
Address: 217.175.52.194
Вот детали из инспектора Chrome для вызова, сделанного с сервера (который завершился неудачей):
Request URL: https://beta.service.com/captcha/
Request Method: GET
Status Code: 500 Internal Server Error
Remote Address: 95.110.228.4:443
Referrer Policy: same-origin
Connection: keep-alive
Content-Length: 152853
Content-Type: text/html; charset=utf-8
Cross-Origin-Opener-Policy: same-origin
Date: Tue, 02 Jul 2024 08:39:55 GMT
Referrer-Policy: same-origin
Server: nginx
Strict-Transport-Security: max-age=31536000; includeSubDomains
Vary: Cookie
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Cookie: _fbp=fb.1.1712064669028.980891575; _ga=GA1.3.585575725.1712064668; _gid=GA1.2.894542501.1719830766; csrftoken=us75UYbPCtVM8DTA0ZhQPzC9ON5Jc3qZ; sessionid=z287mdm63vq9j1p0uxwvf69ieykput00; _gid=GA1.3.894542501.1719830766; _ga=GA1.1.585575725.1712064668; _ga_314551799=GS1.1.1719909450.504.1.1719909452.0.0.0; _ga_52G663NH12=GS1.1.1719909450.176.1.1719909452.58.0.0; _gat_UA-67329675-1=1; _gcl_au=1.1.471068170.1719846195.1018237849.1719909461.1719909460
Host: beta.service.com
Pragma: no-cache
Referer: https://beta.service.com/
Sec-Ch-Ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Linux"
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
А вот подробности из локальной среды (которая работает успешно):
Request URL: http://localhost:8000/captcha/
Request Method: GET
Status Code: 200 OK
Remote Address: 127.0.0.1:8000
Referrer Policy: same-origin
Content-Length: 19823
Content-Type: image/jpeg
Cross-Origin-Opener-Policy: same-origin
Date: Tue, 02 Jul 2024 10:15:21 GMT
Referrer-Policy: same-origin
Server: WSGIServer/0.2 CPython/3.11.9
Set-Cookie: sessionid=q57cn8cmh1961ghhhu6ywerflojq1f4l; expires=Tue, 16 Jul 2024 10:15:21 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=Lax
Vary: Cookie
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Cookie: _ga=GA1.1.1117820162.1715856098; _gcl_au=1.1.2110919363.1715856098; _fbp=fb.0.1715856098133.219741871; USENAV=1717774507848.1409993568842083; csrftoken=lLd1jqD3VhFqW2NdQI5RAAQEntxfs476; sessionid=q57cn8cmh1961ghhhu6ywerflojq1f4l; _gid=GA1.1.1504428548.1719909313; _ga_52G663NH12=GS1.1.1719909292.46.1.1719909562.60.0.0; _ga_314551799=GS1.1.1719909292.220.1.1719909562.0.0.0
Host: localhost:8000
Pragma: no-cache
Referer: http://localhost:8000/
Sec-Ch-Ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Linux"
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
Дополнительная информация: На двух других серверах от Aruba звонок проходит успешно. Служба поддержки Aruba утверждает, что в их сети ничто не блокирует звонок. Я был бы признателен за любые соображения или предложения о том, что может быть причиной этого тайм-аута на сервере, поскольку сейчас я не знаю, что еще можно попробовать и где искать решение этой проблемы.