使用nginx 网站绑定独立IP方法
四月 12, 2010 by admin · Leave a Comment
对于多个域名多个IP的服务器,有时候我们需要用户不能通过的IP直接访问网站。这有的时候是因为IDC机房的需要,有的时候是我们为了将网站直接隔绝开的需要。本文是想讨论Nginx下如何实现这样的设置。
如果是Apache的话比较好设定,可以用NameVirtualHost来指定哪个IP绑定哪个域名,但是nginx应该如何把ip绑定到域名商呢?Slicehost论坛上也有人讨论过如何绑定ip的问题。核心的问题就是,如果直接输入ip,nginx会把这个ip对应到哪个域名上呢?答案是随机的。如果想要在某个域名做为catchall的,可以设定如下规则:
server{
listen 80 default;
....
}
那么如何绑定独立IP呢?由于ip信息其实是在在NGINX官方HTTPcore Listen的说明文档上也提到了这个是用方法,可以比较方便的是使用如下
server{
listen 99.69.16.3:80;
server_name www.inginx.com
....
}
也可以直接这样写:
server{
listen 114.163.186.110;
server_name www.abc.com
....
}
server{
listen 99.69.16.3;
server_name www.abe.com
....
}
这样独立的ip就被绑定到固定的域名上去了。
很多朋友说要绑定独立IP直接这样写:
listen 69.164.196.163:80;假如添加一个网站这样是没问题的,但如果你添加两个网站那么问题就来了,会提示端口被占用的错误.所以这样”IP:端口 “的写法对于多网站多IP显然是行不通的.查看了官方文档得出了答案,官方地址为:http://wiki.nginx.org/NginxHttpCoreModule#listen
写法有如下几种
listen 127.0.0.1:8000;listen 127.0.0.1;listen 8000;listen *:8000;listen localhost:8000;但是看到官方说If only address is given, the default port is 80.也就是跟”IP:端口”是一样的道理,但加上端口就不行,去掉端口就OK,很是奇怪,不过最终问题得以解决.直接这样写就OK 了