
我需要將一個單字映射"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
其常見程度。