@BloodVIRUS

Как сделать рабочее проксирование на nginx в контейнер LXC?

Здравствуйте. Второй день безуспешно бьюсь казалось бы с простейшей задачей. Сломал уже гугл всеми вариациями вопросов, но в ответ или ничего нет, или никак к вопросу не относящиеся ответы. Попробую описать максимально коротко и понятно:
С начала года для себя открыл отличный способ вести достаточно изолированную разработку на одном сервере. LXC контейнеры. Удобно, практический любые настройки для любого контейнера, ничего не пересекается. Хочешь - mysql будет в этом контейнере, а в соседнем уже свой.
Логично что просто в контейнере все хранить бессмысленно, нужно как то работать с этим из вне. По этому использую iptebles чтобы пробросить порты:

iptables -t nat -A PREROUTING -d ip_server -p tcp -m tcp --dport 8091 -j DNAT --to-destination 10.0.3.17:80

В результате чего когда мы в браузере открываем ip_server:8091 все автоматом улетает внутрь контейнера на 80 порт. Где уже крутится nginx и все отрабатывает как нужно.

Для большего удобства так же и ssh порт запроксим:
iptables -t nat -A PREROUTING -d ip_server -p tcp -m tcp --dport 7633 -j DNAT --to-destination 10.0.3.17:22

ну и все замечательно. Внутренний контейнер становится таким полноценным сервером, на который можно стучаться из вне, входить по ssh из вне. Вроде все красиво, все работает, но до момента, когда один из сторонних сервисов что мне захотелось подключить в контейнер не сказал: друг, укажи мне пожалуйста url на который я буду стучаться. Важно. Он должен быть https (ssl, 443).

А мои то истории выше все обычне, http.

Казалось бы, все точно так же легко, просто понятно. На основной машине, внутри которой крутятся LXC контейнеры так же есть и nginx. Все логично, просто, лаконично. Для nginx нужно создать конфиг, с каким-то доменом. Внутри этого конфига сделать простейший proxy_pass, а домен который я к этому конфигу придумаю подписать через letsencrypt.

Решение простейшее, работать все должно. Ну тем более, рядом с LXC, nginx я разобрался и развернул трекер задач ютрек, который запускается в докере. И я к нему точно так же прикрутил домен, через конфиг и проксирование.

По факту все оказалось не так просто. Придумал я красивый домен site.ru. Создал я на него конфиг:

server {
	server_name                     domain.ru;
    access_log                      /var/log/nginx/domain-access.log;
    error_log                       /var/log/domain-error.log;
    index                           index.php index.html;
    rewrite_log                     on;
    listen 80;
	root                            /var/www/test;

	location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:8125;
        proxy_redirect off;
    }
	
}


Если делать обращение по ip_server:8125 - все отрабатывает
если я делаю обращение к site.ru, который проксит на порт 8125 то получаю ошибку:
502 Bad Gateway
nginx/1.17.1
Я пробовал и так proxy_pass 127.0.0.1:8125; и так proxy_pass ip_server:8125; и так proxy_pass localhost:8125;
Все равно, раз за разом 502.
А в логах вот такая не красота:

2022/12/16 07:30:03 [error] 28398#28398: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 37.98.241.186, server: site.ru, request: "GET / HTTP/1.1", upstream: "ip_server:8125", host: "site.ru"

меняю proxy_pass и с ним же меняется upstream в ошибке.

Подскажите пожалуйста, кто с чем то подобным сталкивался?
  • Вопрос задан
  • 449 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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