我的本地主机上运行着一些 Web 应用程序,我可以通过 Web 浏览器从不同的端口访问它们。
例如,我有一个在端口 8888 上运行的 IPython 笔记本服务器(我可以通过 访问它http://localhost:8888
),还有一个在端口 9000 上监听的小型 flask 应用程序。
我知道我可以通过修改来为 localhost 设置别名/etc/hosts
,但我想在这里实现的是为不同的端口设置不同的别名。
例如,我想打开我的浏览器并使用http://notebooks/
而不是http://localhost:8888
和http://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 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 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
前你应用这条规则。