问题描述
我正在使用ip6tables和Nginx的组合来处理来自客户端的http请求。 Nginx服务器侦听端口8081,并且必须在检查标头之后转发请求。
客户端可以发送两种类型的请求:
- 没有标题的GET / POST。这些应该重定向到 https://jaguar.mydomain.com
- 使用特定标题 elb-jaguar.mydomain.com 的GET / POST。这些应该重定向到 https://elb-jaguar.mydomain.com
以Nginx -c /home/build/v6-only.conf
运行时,Nginx失败,因为一个server{}
指令在端口listen
上已经有8081
Nginx: [emerg] duplicate listen options for [::]:8081 in /etc/Nginx/v6/v6-only.conf:13
我的配置如下:
server {
listen [::]:8081 ssl ipv6only=on;
server_name elb-jaguar.mydomain.com;
ssl_certificate /etc/ssl/elb.crt;
ssl_certificate_key /etc/ssl/elb.key;
location / {
proxy_pass https://elb-jaguar.mydomain.com:443;
}
}
server {
listen [::]:8081 ssl ipv6only=on;
ssl_certificate /etc/ssl/regular.crt;
ssl_certificate_key /etc/ssl/regular.key;
server_name jaguar.mydomain.com;
location / {
proxy_pass https://jaguar.mydomain.com:443;
}
}
如何解决上述配置,以通过proxy_pass
获得所需的转发?
解决方法
很难看到,因为该设置应该有效。
但是仔细观察NGINX docs和您仅对IPv6的需求,它说(我的重点):
ipv6only = on | off
此参数(0.7.42)(通过IPV6_V6ONLY套接字选项)确定侦听通配符地址[::]的IPv6套接字是仅接受IPv6连接还是接受IPv6和IPv4连接。默认情况下,此参数是打开的。 只能在启动时设置一次。
因为错误消息抱怨“重复的监听选项”,而不是“已经在该端口上监听”或类似的信号,所以它表明它在抱怨试图第二次设置ipv6only
(甚至设置为相同的值)
此外,它确实会说此参数默认情况下处于启用状态,因此,只要尝试一下,您就可以轻松地将其完全删除。