我需要将一个单词映射"foo"
到一个域名"foobar.com"
,因此它应该能够运行ping foo
或卷曲它。
别名 foo='foobar.com'
给出以下问题。
curl -k foo
curl: (6) Could not resolve host: foo
这是在 kubernetes 上运行的,域名 IP 地址是动态的。
基本上我想将K8s服务名称映射到IP动态的内部域名。
答案1
您想要做的是这里的服务器别名。
选项A(又脏又丑)
您需要/etc/hosts
为此编辑文件
例如
${IP} foo foo.com
那么你将能够
curl foo -H 'Host: foo.com'
主机标头是必需的,因为虚拟主机别名是 foo.com
选项B(干净漂亮)
创建服务器别名,根据您的网络服务器,它可能有不同的配置。
在我的 apache httpd 配置中我使用:
/etc/httpd/sites-available
- 包含每个虚拟主机的配置
/etc/httpd/sites-enabled
- 包含指向可用站点配置文件的符号链接,这样我可以激活/停用虚拟主机,而无需修改或重命名可用站点上的文件,我只需要取消链接即可关闭虚拟主机
我已经修改了conf
/etc/httpd/conf/httpd.conf
[...]
IncludeOptional sites-enabled/*.conf`
[...]
所以假设我有
/etc/httpd/sites-available/foo.com.conf
和一个符号链接版本/etc/httpd/sites-enabled/foo.com.conf
然后做
cp /etc/httpd/sites-available/foo.com.conf /etc/httpd/sites-available/foo.conf
修改foo.conf
以匹配此:
[...]
ServerName foo
ServerAlias foo
[...]
进而
ln -s /etc/httpd/sites-available/foo.conf /etc/httpd/sites-enabled/foo.conf
最后重新启动apache:
systemctl restart httpd
笔记所有这些操作可能需要 root 或 sudo(高级用户)
假设您的系统有一个 DNS 服务器,则不需要其他任何东西;否则 /etc/hosts 文件也需要修改,但是当你卷曲时,你不需要传递主机头,因为 vhost 别名将是 foo。
即在这种情况下curl http://foo
可以正常工作,而在选项 A 上,您也需要一个主机标头。
答案2
对于简单的用例,您可以使用变量:
$ foo="foobar.com"
$ curl -k "${foo}"
您的所有用例都以终端命令为中心吗?
答案3
您需要(可能的 footgun)“全局”别名来进行中线替换。这些都是由ZSH提供的。
$ exec zsh
% alias -g foo=foobar.com
% print foo
foobar.com
%
但请注意任何仅仅使用foo
will 会被替换,所以 iffoo
也可以是一个参数一定不被替换,那么糟糕的事情可能会发生(因此,footgun - 命令可能会中断,或者错误的参数可能会导致其他事情发生,或者......)
% print 'foo'
foo
因此,您需要用大脑做额外的工作,以始终记住何时foo
需要引用,何时不需要引用,具体取决于foo
其常见程度。