首先,一般服务器的公网IP地址只有一个。如果要在Nginx中建立多个虚拟主机的话,如果使用基于端口的虚拟主机配置,就必然会使用到多个端口,URL也会变成这样:www.example.com:8080。虽然也达到了同样的目的,但这URL却不方便记忆,对用户更是不友好的。
如果你拥有一个域名,并且可以设置其解析规则的话,设置多个二级域名并根据域名建立虚拟主机是一个比较好的选择。比如,论坛服务由forum.example.com提供,博客服务由blog.example.com提供。
整个配置文件的结构如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| http { # global configuration # ... # default server handles those unmatched pattern # server { listen 80 default_server; server_name example.com www.example.com; ... } # forum host # server { listen 80; server_name forum.example.com; ... } # blog host # server { listen 80; server_name blog.example.com; ... } }
|
上面的代码片段已经可以达到最终的目的。
补充:
如果想要禁止通过IP地址直接访问,只允许通过域名访问,可以添加以下片段:
1 2 3 4 5
| server { listen 80; server_name 127.0.0.1;# 改为具体的IP地址 return 444; }
|
如果要了解更多关于Nginx如何处理HTTP请求,请参看官方的文档。
参考文档: How nginx processes a request