Создайте несколько псевдонимов для адресов локального хоста на разных портах

У меня на локальном хосте запущено несколько веб-приложений, к которым я могу получить доступ через веб-браузер через разные порты.

Например, у меня есть сервер ноутбука IPython, работающий через порт 8888 (я могу получить к нему доступ по адресу http://localhost:8888), и небольшое приложение фляги, которое слушает на порту 9000.

Я знаю, что могу установить псевдоним для localhost, изменив /etc/hosts, но я бы хотел добиться разных псевдонимов для разных портов.

Например, я хотел бы открыть свой браузер и использовать http://notebooks/вместо http://localhost:8888 а также http://flaskapp скорее, чем http://localhost:9000,

Есть простой способ сделать это?

1 ответ

Решение

Вам придется использовать либо какую-либо форму правила пересылки на основе назначения iptables, либо использовать Apache или nginx в качестве прокси. За nginx:

sudo apt-get install nginx

Создайте конфигурацию виртуального сервера в форме:

server {
    server_name notebooks;
    location / {
        proxy_pass http://localhost:8888;
        proxy_redirect default;
    }
    access_log /var/log/nginx/notebook-access.log;
    error_log /var/log/nginx/notebook-error.log;
}

Это можно сделать, отредактировав сайт по умолчанию (/etc/nginx/sites-available/default) или путем создания нового файла в этом каталоге (/etc/nginx/sites-available/notebook, например). Используйте свой любимый редактор с правами администратора (sudo vim, sudo -H gedit, так далее.).

Затем включите сайт, создав ссылку в /etc/nginx/sites-enabled/, если он еще не существует:

sudo ln -s /etc/nginx/sites-{available,enabled}/default
# or, if you created a new file:
sudo ln -s /etc/nginx/sites-{available,enabled}/notebook

Запустить снова nginx:

sudo service nginx restart

редактировать /etc/hosts так что у вас есть псевдоним с тем же именем, используемым для server_name в вышеуказанной конфигурации.

Вы можете создать еще много таких виртуальных серверов для прокси на различные порты.


Я не слишком уверен в моем iptables-fu, но некоторые простые перенаправления, кажется, работают хорошо для меня. Например, с простым веб-сервером Python (python3 -m http.server 8888):

iptables -t nat -A OUTPUT -p tcp -d notebooks --dport 80 -j REDIRECT --to-ports 8888

Команду легко понять:

  • -A OUTPUT -p tcp для сопоставления исходящего трафика TCP.
  • -d notebooks а также --dport 80 соответствовать имени хоста и порту назначения. Здесь порт не обязателен, так как в любом случае вы, вероятно, будете использовать только один порт.
  • -j REDIRECT --to-ports 8888 использовать REDIRECT цепочку, с 8888 в качестве целевого порта для перенаправления. Вы можете использовать эту цепочку только с nat Таблица.
  • Запись для notebooks должен существовать в /etc/hosts прежде чем применять это правило.
Другие вопросы по тегам