Наконец-то нашли решение или обходной путь. Я не знаю, что вызвало это (это связано с каким-то Proxmox или фриволлом Debian или чем-то вроде того), моя старая установка с простым OpenVZ сработала отлично.
Проблема в том, что при использовании сервисов на ВМ А с другой ВМ Б на том же сервере (тот же самый внешний IP). Если я использовал прокси на другом сервере, все прошло хорошо, потому что IP другого прокси отличается от IP сервера.
Так что просто не позволяйте вызову службы выйти за пределы сервера. Я настраиваю службу DNS на сервере с помощью dsnmasq. Вызов с ВМ В теперь попадает в DNS на сервере и получает IP ВМ А. Не забудьте установить сервер имён для каждой ВМ на локальный сервер!
Это решение имеет дополнительное преимущество в том, что определенная скорость достигается за счет кэширования всех вызовов DNS от ВМ на сервере.
Подробные инструкции:
Установите dnsmasq на сервер
# apt-get install dnsmasq
# update-rc.d dnsmasq enable
настройте dnsmasq на работу в качестве DNS-сервера и кэшируйте:
# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
# vi /etc/dnsmasq.conf
не комментируйте следующие строки:
domain-needed
bogus-priv
Скажите ему, чтобы он прослушивал внутренний IP самого сервера:
listen-address=10.0.186.254 # internal IP
listen-address=127.0.0.1 # must be added too
добавьте localhost в качестве сервера имён:
# vi /etc/resolv.conf
search mydomain.com
nameserver 127.0.0.1 # this line added
nameserver 8.8.8.8
добавьте записи для доменов, которые должны быть маршрутизированы к вашему локальному прокси-серверу (10. 0.186.1) или VM:
# vi /etc/hosts
10.0.186.1 api.mydomain.com # these all point to the proxy
10.0.186.1 loginservice.mydomain.com
10.0.186.1 api.otherdomain.com
Не забудьте перезапустить dnsmasq после изменения /etc/hosts
# service dnsmasq restart
Убедитесь, что вы добавили 127.0.0.1 в качестве (первичного) сервера имён ко всем VM в веб-интерфейсе Proxmox!
, если вы хотите сделать это простым способом, попытайтесь использовать его наряду с цикл foreach
foreach var (`ls directory_path`)
sed -i '/../.../ ' $var
awk '{ #commands to be run }' $var
end
из awk FAQ:
16. Как awk работает с несколькими файлами?
:16. ...
16.2 Как я могу прочитать несколько файлов?
это автоматически (по крайней мере, под Unix) -- используйте что-нибудь вроде:
awk '/^#include/ {print $2}' *.c *.h
Awk будет читать из переданных ему файлов аргументы последовательно, т.е. заполнять один перед переходом к следующему. Имя читаемого в данный момент файла хранится как
FILENAME
.Это может быть особенно полезно, когда вы хотите сравнить содержимое более чем одного файла построчно (запись за записью): как, например, в этом вопросе.
См. полное объяснение в руководстве по чтению файлов .