为不同端口上的本地主机地址创建多个别名

luc*_*one 5 server alias localhost port-forwarding

我的本地主机上运行着一些网络应用程序,我可以通过网络浏览器在不同的端口访问它们。

例如,我有一个在端口 8888 上运行的 IPython 笔记本服务器(我可以通过 访问它http://localhost:8888),以及一个侦听端口 9000 的小型 Flask 应用程序。

我知道我可以通过修改 localhost 设置别名/etc/hosts,但我想在这里实现的是为不同的端口设置不同的别名。

例如,我想打开浏览器并使用http://notebooks/代替http://localhost:8888和 而http://flaskapp不是http://localhost:9000

是否有捷径可寻?

mur*_*uru 7

您必须使用某种形式的 iptables 基于目的地的转发规则,或者使用Apachenginx 作为代理。为了nginx

sudo apt-get install nginx
Run Code Online (Sandbox Code Playgroud)

创建以下形式的虚拟服务器配置:

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;
}
Run Code Online (Sandbox Code Playgroud)

这可以通过编辑默认站点 ( /etc/nginx/sites-available/default) 或在该目录中创建新文件(/etc/nginx/sites-available/notebook例如 )来完成。使用您最喜欢的具有管理员权限的编辑器(sudo vimsudo -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
Run Code Online (Sandbox Code Playgroud)

重新开始nginx

sudo service nginx restart
Run Code Online (Sandbox Code Playgroud)

进行编辑,以便您拥有与上述配置中/etc/hosts使用的名称相同的别名。server_name

您可以创建更多这样的虚拟服务器来代理各种端口。


我不太确定我的 iptables-fu,但一些简单的重定向似乎对我来说效果很好。例如,使用一个简单的 Python Web 服务器 ( python3 -m http.server 8888):

iptables -t nat -A OUTPUT -p tcp -d notebooks --dport 80 -j REDIRECT --to-ports 8888
Run Code Online (Sandbox Code Playgroud)

该命令很容易理解:

  • -A OUTPUT -p tcp匹配传出 TCP 流量。
  • -d notebooks--dport 80匹配目标主机名和端口。这里不需要该端口,因为无论如何您可能只使用一个端口。
  • -j REDIRECT --to-ports 8888使用 REDIRECT 链,8888作为重定向的目标端口。您只能将这条链条与nat桌子一起使用。
  • 在应用此规则之前,notebooks应存在 的条目。/etc/hosts