Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Написание прокси-сервера для чайника

#сервер #proxy #кэширование #прокси


В прошлом вопросе (Вопрос) я выяснил , что для запроса погоды мне нужен прокси сервер,
который будет кэшировать данные с погодного сервера. Писать сервер придется мне самому,
но до этого ни с чем подобным не сталкивался (серверной частью). Писать решил на python
3. Можете ли ткнуть в литературу или дать ссылки как можно реализовать такой кэширующий
сервер, и правильно ли я вообще выбрал python?
    


Ответы

Ответ 1



«По-науке» эта конструкция называется «Обратный прокси» (reverse proxy). У вас есть некоторый backend-сервер, который генерирует какие-то полезные данные, и есть frontend-сервер, который кеширует на себе редкоизменяемые данные. Такая схема чаще используется, для кеширования локальных ресурсов какого-нибудь сайта, чтобы не гонять данные лишний раз, через основной backend-сервер. В вашем случае backend-сервером будет погодный сервер. Если, логику формирования запросов клиенты возьмут на себя, то проще будет использовать некий уже готовый и отлаженный web-сервер. В принципе, тут подойдет любой (nginx, lighttpd, apache, Ваш собственный). Чаще всего для таких целей используют nginx. Он весьма шустр и достаточно прост в настройке. Вот, например, настройки для nginx: http://reviewsignal.com/blog/2013/08/29/reverse-proxy-and-cache-server-with-nginx/ http://ashep.org/2011/nginx-obratnyj-proksi-server/#.V6ECut_XfmE Официальная документация: https://www.nginx.com/blog/nginx-caching-guide/ В итоге у вас получится что-то вроде: events { worker_connections 8096; multi_accept on; use epoll; } http { proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:60m max_size=1G; server { listen 80; server_name your-proxy-server-name.com; location / { proxy_pass http://any-weather-server.com; proxy_redirect off; proxy_set_header Host $host; proxy_cache STATIC; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating \ http_500 http_502 http_503 http_504; } } } Тут надо будет внимательно отнестись к заголовкам, которые ожидает сервер погоды от вас. Вероятно, вам придется немножко поколдовать с proxy_ignore_headers proxy_hide_headers proxy_set_headers Подобную проблему обсуждают тут: https://stackoverflow.com/questions/9230812/nginx-as-cache-proxy-not-caching-anything Заголовки, вам придется настраивать в любом случае, в том числе и если frontend-сервер будете писать сами. Если писать самому, я думаю, было бы проще найти некоторое готовое решение, и его переиспользовать. Например, достаточно просто это сделать с помощью tornado. А в качестве кеша использовать наример memcached или redis. https://stackoverflow.com/questions/16524545/how-to-write-a-web-proxy-in-python

Комментариев нет:

Отправить комментарий