Nginx Proxy_Pass в CDN против прямого попадания в CDN.Pro, Con, Это медленнее или есть негативные последствия для сервера? - PullRequest
3 голосов
/ 03 марта 2012

Положение

CDN великолепны, но я обнаружил необходимость динамически заполнять файлы одним. Ниже я опишу, как настроить NGINX для этого. Мой вопрос Is it any slower or are there any performance issues for doing a proxy_pass to a resource than hitting the resource directly? Например .. proxy_pass через URL на http://domain.com/file.jpg против загрузки http://domain.com/file.jpg напрямую. Также are you saving any server server resources by doing a proxy_pass to another image location vs simply serving up the image?

Что я сделал

Я настроил сервер Nginx так, чтобы запрос к http://domain.com/image/XYP.jpg выполнял Proxy_pass для CDN, эффективно загружая http://cdn.com/XYP.jpg. Я настроил Nginx, чтобы проверить, был ли код ошибки, а затем выполнить что-то другое. Если (страница ошибки) 404, nginx может передать вас на локальный ресурс, который затем может инициировать создание файла в CDN.

В следующий раз вы запросите http://domain.com/image/XYP.jpg,, и вы получите доступ к CDN.

Итак, шаги:

  • Запрос на попытку № 1 для xyz.jpg
  • Proxy_pass to CDN
  • Если файл 200, загрузить файл: если 404, загрузить локальный файл
  • Генерация файла триггера xyz.jpg на CDN
  • Запрос на попытку № 2 для xyz.jpg
  • Proxy_pass to CDN
  • Файл существует (200) .. загружать файл из CDN неограниченно, а не локально

Используемая технология

  • PHP
  • Ubuntu
  • Nginx
  • CDN

1 Ответ

5 голосов
/ 03 марта 2012

Нет особого смысла в proxy_pass для CDN. Когда вы рассмотрите, что делает proxy_pass, это должно быть очевидно.

proxy_pass просто означает, что Nginx сообщает бэкэнду (CDN в вашем случае) извлекает ресурс и возвращает его мне, чтобы я мог передать его клиенту.

Так что в вашем случае происходит ...

  1. Клиент делает запрос на x.jpg
  2. Nginx разрешает местоположение CDN
  3. Nginx запрашивает CDN для x.jpg
  4. CDN отправляет x.jpg в Nginx
  5. Nginx получает и буферизует x.jpg и т. Д.
  6. Nginx пересылает x.jpg клиенту

Обратная поездка в CDN по сути является пустой тратой, поскольку Nginx все еще должен отправить файл клиенту. Гораздо лучше просто отправить его напрямую ...

  1. Клиент делает запрос на x.jpg
  2. Nginx получает x.jpg с локального диска
  3. Nginx отправляет x.jpg клиенту

Если вы хотите использовать CDN, вам следует перенаправить запрос на CDN ...

  1. Клиент делает запрос на x.jpg
  2. Nginx перенаправляет клиента на CDN
  3. CDN отправляет x.jpg клиенту

Очевидно, что вы не сможете выполнить тест 404 в случае перенаправления, поскольку Nginx больше не участвует в транзакции после перенаправления.

...