在NGNIX上托pipe的多个站点。 我怎样才能使用IP地址到达正确的?

我有一个IP地址,比如说192.168.1.20,它有一个运行两个HTTP站点作为子域的NGINX服务器,说:

  • site1.domain.com
  • site2.domain.com

如果我在浏览器中访问site1.domain.com或site2.domain.com,我将被导向到正确的网站。 如果我去192.168.1.20,我被引导到site1。

我想NGINX使用头来select适当的位置,当通过浏览器访问 – 但我希望能够通过IP地址到达site2.domain.com。 我是否需要以某种方式为请求添加特定的头文件来执行此操作,或者有其他方法吗?

当托pipe多个网站时,networking服务器将使用Host:标题来确定正在请求哪个网站。 如果该标题丢失,则Web服务器将显示默认网站。

在浏览器的地址栏中指定域名时,浏览器会为您添加Host:标题。 这告诉服务器正在请求哪个网站。

但是,当您在地址栏中指定IP地址时,您还没有告诉浏览器放入Host:标头的URL。

如果您必须使用IP地址访问您的服务器,请手动添加Host:标题。

将一个默认的服务器命令添加到server2块。

 server { listen 80 default_server; server_name example.com; # etc } 
  1. 你不说如果site2有一个不同的IP地址site1。 如果他们共享相同的IP地址,则使用基于名称的虚拟主机,并且无法访问基于IP的特定站点(该站点是基于域名确定的)。 您需要为site2分配一个额外的IP。 即每个站点分配1个IP
  2. 如果你只想通过IP访问site2而不关心site1(你也没有说),其他答案可能适合你。 例如将默认网站设置为site2
  3. 是的,你也可以操纵标题(主机:)。 您也可以使用/ etc / hosts条目覆盖DNS来访问虚拟主机。

如果没有标题怎么办?

 telnet 192.168.1.20 80 Trying 192.168.1.20... Connected to 192.168.1.20. Escape character is '^]'. get / <!DOCTYPE html> ... </html> Connection closed by foreign host. 

然后你得到configuration的default网站。 如果你想要另一个网站,你可以发送标题或按照选项#1

只需将所需的IP地址添加到受尊重网站的server_namevariables即可:

 server_name 192.168.1.20 site2.domain.com; 

或者,您可以创build另一个vhost并使用redirect:

 server { listen 192.168.1.20:80; server_name _; return 301 http://site2.domain.com$request_uri; } 

这应该允许所需的域也被IP打开..