在多域nginx服务器上调用localhost

时间:2013-06-08 19:09:04

标签: php http curl nginx localhost

我正在使用nginx在一台服务器上运行多个(子)域。其中一个是domain.com,另一个是api.domain.com。我想从主域使用API​​的服务器端调用。

如果我从domain.comapi.domain.com发出HTTP请求,数据是否会从服务器中消失,或者服务器是否会识别出他被请求了,并立即提供请求?我问这个,因为第二个可能会更快。

如果它不识别它,我想向localhost发出请求。但是,当我调用localhost时,nginx服务器将不知道要服务的域。有没有办法通过传递请求的主机参数来告诉nginx如何处理对localhost的请求,以便服务器知道他必须服务器api.domain.com而不是服务器上的其他域?如果它有任何重要性,我正在使用cURL - 但我也可以自由使用其他任何东西。

1 个答案:

答案 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