У меня есть некоторые веб-приложения, работающие на моем localhost, к которому я могу получить доступ своим веб-браузером в различных портах.
Например, у меня есть работа сервера ноутбука IPython порта 8888 (я могу получить доступ к нему в http://localhost:8888
), и маленькое приложение фляги, которое слушает на порте 9000.
Я знаю, что могу установить псевдоним для localhost путем изменения /etc/hosts
, но то, чего я хотел бы достигнуть здесь, должно иметь различные псевдонимы для различных портов.
Например, я хотел бы открыть свой браузер и использование http://notebooks/
вместо http://localhost:8888
и http://flaskapp
вместо http://localhost:9000
.
Существует ли простой способ сделать это?
Необходимо будет использовать или некоторую форму 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
использовать цепочку ПЕРЕНАПРАВЛЕНИЯ, с 8888
как целевой порт для перенаправления. Можно только использовать эту цепочку с nat
таблица.notebooks
должен существовать в /etc/hosts
перед применением этого правила.