@Cyber-Man

Как получить автоматически значение бекенда в nginx (например из listen)?

Ситуация следующая.. есть сотни сайтов, проксирует их nginx. В каждой секции server подключен файл, дабы была возможность быстро прописывать конфиги для всех сразу.. До сей поры прописывал различные условия, всё было хорошо... пока не наткнулся на location и proxy_pas.

Дело в том, что proxy_pas требует прописать бекенд. В моем случае для сотен сайтов прописаны разные бекенды в виде IP-адресов. Эти IP, например, совпадают с listen в секции server. Если значение proxy_pas не совпадает с listen, то выдает 404 для указанного location.

Каким образом можно автоматически определить backend соответствующий сайту..может как-то из listen значение IP можно вытащить..?

Вот код, который инклудится к каждому сайту:

location ~ ^/(wp-admin|wp-login\.php|admin|administrator) {
                        limit_req  zone=wp burst=4 nodelay;
                        proxy_pass http://IP:81;
                        proxy_redirect http://IP/ /;
                        proxy_set_header Host $host;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header X-Real-IP $remote_addr;
}
  • Вопрос задан
  • 403 просмотра
Пригласить эксперта
Ответы на вопрос 3
sim3x
@sim3x
Не используй никакую логику в конфигах
Не бойся использовать копипаст в конфигах

Сделай шаблон и подставляй туда переменные

В твоем случае лучше использовать сокеты для связи с фпм
Ответ написан
alsopub
@alsopub
Если все на одном сервере, то пусть бекенд слушает 127.0.0.1 интерфейс.
Тогда - proxy_pass http://127.0.0.1:81;
Ответ написан
Комментировать
@kolu4iy
$server_addr
адрес сервера, принявшего запрос
Получение значения этой переменной обычно требует одного системного вызова. Чтобы избежать системного вызова, в директивах listen следует указывать адреса и использовать параметр bind.

список переменных nginx

т.е. proxy_pass http://$server_addr:81;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы