关于 Nginx 多站点配置 IPv6 访问的问题

2016-05-31 05:40:47 +08:00
 gyzit

/usr/local/nginx/conf/nginx.conf : ( Nginx Default 的配置文件)

    server {
    listen 80;
    listen [::]:80 ipv6only=on;
    server_name _;
}
...
    include vhost/*.conf;
}

/usr/local/nginx/conf/vhost/xxx.conf

server {
    ...
    listen               443 ssl http2 fastopen=3 reuseport;
    listen          [::]:443 ssl http2 fastopen=3 reuseport ipv6only=on;
    ...
}
...
server {
    listen 80;
    listen [::]:80 ipv6only=on;
    
    server_name       xxxx.com;

    location / {
        rewrite       ^/(.*)$ https://xxx.com/$1 permanent;
    }
}

service nginx reload

提示错误: nginx: [emerg] duplicate listen options for [::]:80 in /usr/local/nginx/conf/vhost/xxx.conf:97

请问我的配置错在哪里呢?我想在 IPv6 访问的时候也能重定向到 https 页面。

9104 次点击
所在节点    服务器
12 条回复
lslqtz
2016-05-31 06:23:45 +08:00
我去 ttlsa 看了下,有--with-ipv6 吗? 我记得不加 ipv6only=on 是同时监听 ipv6 和 ipv4 更简洁一些。
gyzit
2016-05-31 06:42:41 +08:00
@lslqtz 有的,其实我测试过主站通过 ipv6 访问是没问题的。但就是重定向那里不行。

还有一个原因是我用 nginx 内置了 Google Analytics ,用 ipv6only 是为了他在提交数据的时候准确。😂
lslqtz2
2016-05-31 06:47:02 +08:00
listen [::]:80 default ipv6only=on;
这是我在 ttlsa 看到的,搜了搜发现只有几个英文贴。。
gyzit
2016-05-31 06:54:22 +08:00
@lslqtz2 依然会有同样的错误,我之前也查过很多资料的,包括 Google 。发现很少网站有提到,所以才上来问问大家。
lslqtz2
2016-05-31 07:02:22 +08:00
@gyzit 我也去查查。
lslqtz2
2016-05-31 07:03:12 +08:00
@gyzit
关键这句:[Because the first file has the ipv6only=on option, the second file does not need it.]

You can only specify options for the listen directive once per combination of host:port (see the documentation).

The error is being caused by this line in your second file:

listen [::]:80 ipv6only=on;
Because the first file has the ipv6only=on option, the second file does not need it.

Changing the beginning of the second file to the following should fix the problem:

server {
listen 80;
listen [::]:80;

...
}
gyzit
2016-05-31 07:24:19 +08:00
@lslqtz2 谢谢!

我吧 `/usr/local/nginx/conf/vhost/xxx.conf` 最底下重定向的 server 的 ipv6only=on 删了,好像就没问题了。

但我还有个小疑问,他说 Because the first file has the ipv6only=on option, the second file does not need it.

我 80 端口的 ipv6only=on 是在 nginx.conf ,那我下面 vhost 配置文件不加 ipv6only=on ,这个没疑问。

那我的 https 的 first file 是 xxx.conf ,那他怎么确定这份就是第一份呢?当我下次添加虚拟机的时候会出错吗?
lslqtz2
2016-05-31 07:32:02 +08:00
@gyzit ipv6 没怎么碰过,不清楚。。反正我 ipv4 都是一个 server 块用一个 listen 80;的,这个估计得下次试试看。
gyzit
2016-05-31 07:55:39 +08:00
@lslqtz2 对呀,就是 ipv4 可以一个 server 块 listen 80 不影响其他。但是 ipv6 就有点不一样。。。
Showfom
2016-05-31 07:58:13 +08:00
ipv6only 只能出现一次的啦
gyzit
2016-05-31 08:27:18 +08:00
@Showfom 好的我懂了,谢谢。😋
Joan114
2018-04-13 13:35:58 +08:00
你好,请问你的 ipv6 多站点配置成功了吗?
我现在在配置多站点的时候遇到一个问题,都配置好测试的时候,发现提示这个
This domain has no IPv6 DNS server, this may prevent some IPv6-only users from reaching it.

请问这是什么原因导致的呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/282373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX