Обратный прокси Nginx не работает

У меня проблемы с вычислением балансировки нагрузки на Nginx. Я использую: - Ubuntu 16.04 и - Nginx 1.10.0.

Короче говоря, когда я передаю свой IP-адрес непосредственно в "proxy_pass", прокси работает:

server {
    location / {
            proxy_pass http://01.02.03.04;
    }
}

Когда я захожу на свой прокси-компьютер, я вижу содержимое прокси-сервера ip... но когда я использую директиву upstream, это не так:

upstream backend {
     server 01.02.03.04;
}

server {
    location / {
            proxy_pass http://backend;
    }
}

Когда я захожу на свой прокси-компьютер, меня приветствует страница по умолчанию для сервера Nginx, а не содержимое с вышестоящего IP-адреса.

Любая дополнительная помощь будет принята с благодарностью. Я проделал тонну исследований, но не могу понять, почему "upstream" не работает. Я не получаю никаких ошибок. Это просто не прокси.

2 ответа

Решение

Хорошо, похоже, я нашел ответ...

две вещи о внутренних серверах, по крайней мере, для описанного выше сценария при использовании IP-адресов:

  1. порт должен быть указан
  2. порт не может быть:80 (в соответствии с @karliwsn порт может быть 80, просто вышестоящие серверы не могут прослушивать тот же порт, что и обратный прокси-сервер. Я еще не тестировал его, но это замечательно).

блок (ы) внутреннего сервера должны быть настроены следующим образом:

server {

    # for your reverse_proxy, *do not* listen to port 80
    listen 8080;
    listen [::]:8080;

    server_name 01.02.03.04;

    # your other statements below
    ...
}

и ваш блок обратного прокси-сервера должен быть настроен, как показано ниже:

upstream backend {
    server 01.02.03.04:8080;
}

server {
    location / {
        proxy_pass http://backend;
     }
}

Похоже, что бэкэнд-сервер слушает:80, обратный прокси-сервер не отображает его содержимое. Я думаю, что это имеет смысл, поскольку сервер на самом деле использует порт 80 по умолчанию для широкой публики.

Спасибо @karliwson за то, что подтолкнули меня пересмотреть порт.

Следующий пример работает:

Единственное, что следует упомянуть, это то, что если IP-адрес сервера используется в качестве «server_name», тогда IP-адрес должен использоваться для доступа к сайту, это означает, что в браузере вам нужно ввести URL-адрес как http: //yyy.yyy.yyy .yyy или (http: //yyy.yyy.yyy.yyy: 80), если вы используете имя домена в качестве «server_name», то получите доступ к прокси-серверу, используя имя домена (например, http: //www.yourdomain. com )

      upstream backend {
        server xxx.xxx.xxx.xxx:8080;
}

server {
        listen 80;
        server_name yyy.yyy.yyy.yyy;

        location / {
                proxy_pass http://backend;
        }
}
Другие вопросы по тегам