首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPv6上基于nginx名称的虚拟主机

问IPv6上基于nginx名称的虚拟主机
EN

Server Fault用户
提问于 2011-06-06 23:40:35
回答 1查看 21.5K关注 0票数 45

我有一个nginx服务器服务近六个不同的网站。它运行在一个刚获得IPv6本地支持(达拉斯数据中心)的Linode上,我正在尝试配置我的大部分站点来进行双堆栈操作。我获得了第一个使用IPv6 6专用子域运行的子域,如下所示:

代码语言:javascript
复制
server {
    listen [::]:80 ipv6only=on;
    listen 80;

    server_name example.com ipv6.example.com;

    root /var/www/example.com/htdocs;

    #More stuff, including PHP, WordPress
}

这很好-- example.com是IPv6 4专用的(目前),而ipv6.example.com是IPv6 6专用的(主要是为了测试目的)。我可以ping6 ipv6.example.com,甚至是wget ipv6.example.com,而不费吹灰之力--这是令人愉快的无痛苦的(在找到了nginx绑定虚拟主机的方式“抓到”之后,就有必要使用ipv6only=on参数和双重listen指令)。

然而,我现在试图扩展它以支持我的其他域,从static.example.com开始;但是,当我采用与上面相同的方法(双listen指令,包括ipv6only=on参数)时,在重新启动nginx时会出现以下错误:

代码语言:javascript
复制
* Starting Nginx Server...
nginx: [emerg] a duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com.conf:3

似乎nginx为IPv6绑定的方法不允许基于名称的虚拟主机?我是否必须从我的主机获得额外的IPv6地址(没有问题),并在IPv6上使用基于IP的虚拟主机,并在IPv4上使用基于名称的虚拟主机?还是我遗漏了一种解决方案,允许我的配置在两个堆栈上保持一致?

我希望我的站点能够及时地在IPv6堆栈上运行,以供世界IPv6 6日使用,但除非我能迅速清除这些内容,否则我可能还没有准备好。从任何实际的角度来看,这都不是什么大不了的事情--我的网站中没有一个能被任何想象中的“主要组织”所称道--但是帮我拯救我的怪胎吧!

编辑添加:

由于@kolbyjack的回答,我现在有了一个功能齐全的双堆栈web服务器。为了清楚起见,我正在编辑他给我的解决方案,这样每个人都能清楚地看到答案是什么。

我的默认徽标所有vhost都有以下listen指令:

代码语言:javascript
复制
listen 80 default_server;
listen 8080 default_server;
listen [::]:80 default_server ipv6only=on;
listen [::]:8080 default_server ipv6only=on;

我不知道命令是否重要,但就在这里。然后,每个附加的vhost都有以下listen指令:

代码语言:javascript
复制
listen 80;
listen [::]:80;

(相反,8080用于监听该端口。)这里的重要部分似乎是除了默认的vhost的listen指令之外,完全没有任何附加的参数--即不重复ipv6only=on。

再次感谢@kolbyjack的解决方案!

EN

回答 1

Server Fault用户

回答已采纳

发布于 2011-06-07 02:12:31

您只需要对套接字的一个声明进行侦听选项。通常,您会将它们放在也包含default_server标志的声明中,但是对于某些选项,我认为您可以在任何一个监听指令上设置它们。只需从除一个之外的所有侦听器中删除ipv6only=on即可。

票数 47
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/277653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档