3

Мой предыдущий опыт веб-приложений ограничен несколькими экспериментами Apache+PHP. Начиная с этого уровня, я читал об использовании Python для REST-сервисов, и это мое текущее понимание стека.

Стек веб-приложений Python

Эта картина "правильная"?

  1. TLS происходит там, где я его показал?
  2. Где происходит перезапись URL и перенаправление?
  3. Следует ли разрешить / разрешить обработку статического содержимого на уровне балансировки нагрузки (который может находиться на отдельном сервере) или оно должно обрабатываться на уровне веб-сервера?

Я ранее опубликовал слишком широкий вопрос по этому поводу. В зависимости от того, что я изучу, я задам более конкретные вопросы.


Некоторые заметки о картине:

  • Я знаю, что когда нет уровня балансировки нагрузки, TLS происходит на уровне веб-сервера, но кажется более естественным делать это на уровне балансировки нагрузки при его использовании - это неправильно?
  • Переадресация URL-адресов и перезапись, кажется, распространены повсеместно и играют роль в том, откуда подается статический контент. Особенно, если вы хотите перенаправить некоторый статический контент в CDN, в этом случае он, вероятно, будет внешним для всего этого стека!

1 ответ1

1

Это не идеальный вопрос для суперпользователя. Ошибка сервера, возможно, была бы лучшей целью для этого вопроса. Это сказал ...

На ваши вопросы нет конкретных ответов - доступно много разных вариантов для достижения каждого пункта. Я прежде всего отвечу тем, что я бы порекомендовал.

  1. TLS происходит там, где я его показал?

Выделенное устройство, такое как балансировщик нагрузки, - это то место, где я бы разгрузил TLS, да. Обычно здесь используется специальное оборудование, специально разработанное для ускорения TLS без использования более медленных циклов ЦП общего назначения. Централизация ваших TLS-сертификатов на таком устройстве также помогает в управлении сертификатами - или в случае проблем безопасности, таких как Heartbleed или POODLE, обеспечивает единую точку, где необходимо внести любые необходимые изменения безопасности, - вместо нескольких веб-серверов.

  • В идеале у вас должно быть 2 или более балансировщика нагрузки, настроенных как активные / активные или активные / пассивные в конфигурации с высокой доступностью для переключения при отказе и избыточности.
  • В случае Heartbleed, по крайней мере, некоторые из существенных балансировщиков нагрузки на рынке не были уязвимы - из-за использования собственного стека SSL / TLS вместо OpenSSL.

Если бы безопасность была для вас первостепенной, вы могли бы рассмотреть возможность туннелирования трафика между вашим балансировщиком нагрузки и веб-серверами в новом соединении TLS. Или не прерывайте TLS, а только перенаправляйте TCP-соединение на один или несколько веб-серверов. Однако выполнение любого из них в значительной степени отменяет любое из преимуществ, которые я упомянул выше. Кроме того, я надеюсь, что как ваши балансировщики нагрузки, так и веб-сервер (ы) (и их связь) будут находиться в безопасном центре обработки данных, где не требуется шифрованная связь. (Если эти устройства не защищены, все ставки в любом случае отключены.)

Смотрите также: https://security.stackexchange.com/questions/30403/should-ssl-be-terminated-at-a-load-balancer

  1. Где происходит перезапись URL и перенаправление?

Как вы упомянули, CDN была бы еще одной возможностью для этого - которую я иначе проигнорирую здесь.

Вы можете сделать это внутри балансировщика нагрузки или на веб-сервере. Я по умолчанию склонен делать большую часть этого на веб-сервере - особенно при использовании Apache HTTPD - поскольку вы просто не можете превзойти возможности и гибкость, предлагаемые mod_rewrite. Возможность хранить эти правила в текстовом файле, не зависящем от устройства, которым можно управлять с помощью источника в SVN и т.д., Также является дополнительным бонусом - тем более что правила, как правило, необходимо часто менять (учитывая их природу).

Я всегда буду сохранять любые переписывания и перенаправления, которые являются внутренними для сайта / домена, который вы размещаете на веб-сервере. В ограниченных случаях, когда URL-адреса внутри размещенного сайта необходимо перенаправить в другое место, а производительность - критическая проблема, я бы посмотрел на выполнение этой работы на балансировщике нагрузки.

  1. Следует ли разрешить / разрешить обработку статического содержимого на уровне балансировки нагрузки (который может находиться на отдельном сервере) или оно должно обрабатываться на уровне веб-сервера?

За редким исключением контент обслуживается веб-сервером, а не балансировщиком нагрузки. Здесь вы можете / должны сделать так, чтобы ваш веб-сервер настраивался на прямое обслуживание такого статического контента, а не на его отправку в PHP / Python / Tomcat / и т.д., Возможно, для более медленного обслуживания. Когда это возможно, используйте и настройте CDN, чтобы все это было выгружено в пограничной сети и даже не доходило до вашего балансировщика нагрузки.

Один аспект, который может быть немного сложным, - это аутентификация, авторизация и регистрация. В любой момент, когда вы выгружаете такой "статический" контент, ваши нижние уровни могут даже не знать, что такой контент обслуживается - не могут защитить его или даже отслеживать его доступ. Одна из возможностей здесь (если это проблема) заключается в использовании модели "централизованной аутентификации", когда верхний уровень может кэшировать контент, но все равно отправит запрос обратно на нижний уровень / источник с «If-Modified- С заголовка. Затем источник может проверить идентификатор сеанса / файлы cookie / и т.д. - и может либо ответить, например, "HTTP 403 Forbidden" или "HTTP 304 Not Modified" (возврат из кэша).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .