Nginx proxy for the domains in Cloudflare

В какой-то момент для владельца нескольких сайтов возникает задача настроить проксирование, то есть программного посредника для загрузки контента на свой конкретный сайт из других источников — не обязательно своих. Причины могут быть разными, но результат сводится к тому, чтобы показывать по определённому пути сайта контент из стороннего источника, как в буквенном виде (URL), так и в цифровом (IP). Cloudflare — это крупнейший провайдер таких сервисов, как сеть доставки содержимого (CDN), защита от распределённых атак (DDoS) и обслуживание доменных имён (DNS). В нашем случае, инструментом для проксирования выбран веб-сервер Nginx.

Приведу примеры самых распространённых ситуаций, которые потребуют применение этой технологии:

  • Обеспечение стабильной работы сайта при возрастающей нагрузке на сервер, который может ней не справиться (load balancer).
  • Обход блокировок, чтобы создать полноценное зеркало заблокированного ресурса.
  • Подключение на свой сайт какого-нибудь дополнительного внешнего сервиса (например, кредитного калькулятора и т.п).

Именно о третьем варианте и пойдёт речь в этой статье.

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

Задача: подключить кредитный калькулятор, который реализован на одном из моих сайтов https://example-1.com/calculator к другому https://example-2.com/tools/calculator. Оба домена управляются через консоль Cloudflare с SSL настройками — Full (strict).

Часть конфигурации сайта https://example-1.com для понимания, как реализован на нём протокол SSL для Nginx:

server {
  listen 80;
  server_name example-1.com;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl;
  server_name example-1.com;

  ssl_certificate /etc/nginx/ssl/example-1.com.pem;
  ssl_certificate_key /etc/nginx/ssl/example-1.com.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}

Конфигурация сайта https://example-2.com локации /tools/calculator для Nginx:

location /tools/calculator {
  proxy_pass https://example-1.com/calculator;
  proxy_pass_header Server;
}

При такой конфигурации Nginx мы получаем следующую ошибку (error 1000) от Cloudflare:

Чтобы избавиться от этой ошибки, добавляем параметр proxy_ssl_server_name on и наш Nginx прокси начинает подтаскивать контент из https://example-1.com/calculator. Зайдя на https://example-2.com/tools/calculator вы не поймёте, что все вычисления происходят на другом сайте.

location /tools/calculator {
  proxy_pass https://example-1.com/calculator;
  proxy_pass_header Server;
  proxy_ssl_server_name on;
}

Обсуждение закрыто.