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

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

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

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

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

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

是否有捷径可寻?

答案1

您必须使用某种形式的 iptables 基于目标的转发规则,或者使用阿帕奇或者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 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

重新开始nginx

sudo service nginx restart

进行编辑,以便您拥有一个与上述配置中/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

该命令很容易理解:

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

相关内容