Revers Proxy

Сопоставление имен хостов с портами в / etc / hosts

В Linux / etc / hosts - это файл, используемый операционной системой для преобразования имен хостов в IP-адреса. Его также называют файлом «hosts». Добавляя строки в этот файл, мы можем сопоставить произвольные имена хостов с произвольными IP-адресами, которые затем мы можем использовать для тестирования веб-сайтов локально.

В этом руководстве мы рассмотрим, как мы можем сделать еще один шаг, сопоставив имена хостов с определенными портами.

Файл hosts

Сначала рассмотрим пример. Предполагая, что нам нужно сопоставить toyrik.github.io с 127.0.0.1 , мы добавляем следующую строку в / etc / hosts :

127.0.0.1    toyrik.github.io

Теперь, каждый раз, когда мы запрашиваем домен, наша ОС переадресовывает нас на локальный хост.

Добавление номера порта

Большинство веб-разработчиков взяли на вооружение эту практику локального тестирования, например, с использованием порта 8080 . Можно задаться вопросом, что мы также можем сделать это с помощью / etc / hosts . Например, можем ли мы добавить в файл hosts следующую строку :

127.0.0.1:8000    toyrik.github.io

К сожалению, не можем. Файл hosts имеет дело только с именами хостов, а не портов.

Использование обратного прокси

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

Давайте посмотрим, как это настроить с помощью Nginx. Мы можем легко установить nginx из нашего диспетчера пакетов, например yum или apt-get . Его установочная папка по умолчанию - / etc / nginx .

Чтобы настроить обратный прокси для toyrik.github.io , мы добавляем следующее в файл с именем /etc/nginx/conf.d/toyrik.github.io :

location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            # В случае возникновения ошибки 504 - добавить следующее.
            proxy_connect_timeout       300;
            proxy_send_timeout          300;
            proxy_read_timeout          300;
            send_timeout                300;
        }

Когда мы используем эту конфигурацию вместе с:

127.0.0.1 toyrik.github.io

в /etc/hosts , Nginx будет получать наши запросы на toyrik.github.io и перенаправлять всех, на веб-сервер работающий на 127.0.0.1:8080 .