У меня есть тестовое приложение Quart (асинхронный Flask) со следующим кодом:
Quart app
from quart import Quart, request
app = Quart(__name__)
@app.route('/', methods=['POST'])
async def index():
print(await request.get_json())
return '', 200
if __name__ == '__main__':
app.run(host='::', port=5000)
Мой ufw status:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp ALLOW 2a02:6b8:c00::/40
В документации яндекса написано:
Для корректной работы HTTP-запросов разрешите вашему сервису принимать пакеты из сети Yandex Forms 2a02:6b8:c00::/40. Иначе файрвол вашего сервиса может блокировать данные, передаваемые формой.
Интеграция работает только с протоколом IPv6. Сервис Yandex Forms не поддерживает отправку HTTP-запросов с адресов IPv4.
конфиг nginx:
server {
listen 80;
listen [::]:80;
server_name ip моего сервера;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html; # Укажите путь к директории с HTML страницей ошибок
}
}
В общем, если открывать 80 порт для всех, то запросы от яндекса успешно доходят до quart, но если открыть 80 порт только для диапазона адресов яндекса, то запросы не доходят, сам яндекс пишет, что произошла какая-то внутренняя ошибка. Для диапазона открываю порт так: ufw allow from 2a02:6b8:c00::/40 proto tcp to any port 80