У меня есть файл /etc/hosts
с двумя следующими строками:
127.0.0.2 myapp.dev
127.0.0.3 api.myapp.dev
и это работает нормально. Когда я myapp.dev
он сопоставляется с 127.0.0.2
а когда я api.myapp.dev
он сопоставляется с 127.0.0.3
, как и должно быть.
Теперь мне нужно сопоставить 127.0.0.2
с 127.0.0.1:3000
и 127.0.0.3
с 127.0.0.1:3001
.
Это необходимо, потому что я пытаюсь запустить приложение Rack, чей конфигурационный файл config.ru
#\ -w -p 3001
require 'emeraldfw'
ENVIRONMENT = ENV['EMERALD_ENV'].nil? ? :development : ENV['EMERALD_ENV']
use Rack::Reloader, 0
use Rack::ContentLength
if (ENVIRONMENT == :production) then
use Rack::Static, :urls => {"/" => 'index.html'}, :root => 'fe/build'
else
Dir.chdir('fe')
spawn 'npm start'
Dir.chdir('..')
end
run EmeraldFW::Loader.new
Этот конфигурационный файл выполняет приложение Rack на порту 3001. Когда переменная EMERALD_END среды установлена в production
она использует Rack::Static
для обслуживания статических файлов. С другой стороны, когда EMERALD_ENV настроен на development
или test
он запускает приложение ReactJS в качестве интерфейсного приложения на порту 3000.
Основная идея теперь - доступ к внешнему приложению по адресу http://myapp.dev
и доступ к API (бэкэнду) по адресу http://api.myapp.dev
.
Я попробовал некоторые хаки и даже рассмотрел возможность использования iptables или другого программного обеспечения для фильтрации пакетов. Я знаю, что могу использовать правила iptables для перенаправления ввода с определенного IP/ порта на другой IP, но я бы лучше нашел более простое решение.
Какие-либо предложения?