我正在使用nginx在一台服务器上运行多个(子)域。其中一个是domain.com
,另一个是api.domain.com
。我想从主域使用API的服务器端调用。
如果我从domain.com
向api.domain.com
发出HTTP请求,数据是否会从服务器中消失,或者服务器是否会识别出他被请求了,并立即提供请求?我问这个,因为第二个可能会更快。
如果它不识别它,我想向localhost发出请求。但是,当我调用localhost时,nginx服务器将不知道要服务的域。有没有办法通过传递请求的主机参数来告诉nginx如何处理对localhost的请求,以便服务器知道他必须服务器api.domain.com
而不是服务器上的其他域?如果它有任何重要性,我正在使用cURL - 但我也可以自由使用其他任何东西。
答案 0 :(得分:1)
解决方案是在文件中添加一行: / etc / hosts
127.0.0.1 api.domain.com
如果在服务器上运行ping,则保存文件后应返回如下内容:
user@domain:~$ ping api.domain.com
PING api.domain.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.026 ms
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_req=3 ttl=64 time=0.031 ms
64 bytes from localhost (127.0.0.1): icmp_req=4 ttl=64 time=0.029 ms
文件/ etc / hosts将具有比计算机DNS服务器更高的优先级来解析名称。
如果一切都配置正确,您的cURL现在应该使用localhost从api.domain.com页面检索页面。您可以通过使用详细选项运行curl来验证它:
user@domain:~$ curl --verbose api.domain.com
* About to connect() to api.domain.com port 80 (#0)
* Trying 127.0.0.1... connected
如果您确实使用localhost ip来请求,第一行会告诉您!
在极不可能的情况下,请检查文件: /etc/nsswitch.conf 并验证主机行是否如此(文件优先于dns服务器):< / em>的
hosts: files dns