Nginx 使用proxy_pass根据头转发http请求

Nginx 使用proxy_pass根据头转发http请求,nginx,nginx-reverse-proxy,Nginx,Nginx Reverse Proxy,我使用ip6tables和nginx的组合来处理来自客户端的http请求。nginx服务器侦听端口8081,并且必须在检查报头后转发请求 客户端可以发送两种类型的请求: 获取/发布没有标题。这些应重新定向到https://jaguar.mydomain.com 获取/发布特定标题elb jaguar.mydomain.com。这些应重定向到https://elb-jaguar.mydomain.com 当作为nginx-c/home/build/v6 only.conf运行时,nginx失败,因

我使用ip6tables和nginx的组合来处理来自客户端的http请求。nginx服务器侦听端口8081,并且必须在检查报头后转发请求

客户端可以发送两种类型的请求:

  • 获取/发布没有标题。这些应重新定向到https://jaguar.mydomain.com
  • 获取/发布特定标题elb jaguar.mydomain.com。这些应重定向到https://elb-jaguar.mydomain.com
  • 当作为
    nginx-c/home/build/v6 only.conf运行时,nginx失败,因为一个
    server{}
    指令在端口
    8081
    上已经有
    listen

    nginx:[emerg]仅在/etc/nginx/v6/v6中为[:]8081复制侦听选项。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;
        }
    }
    

    如何通过
    代理\u pass
    修复上述配置以获得所需的转发?

    很难看到,因为该设置应该可以工作

    但仔细看一下,你对IPv6的需求,它说(我的重点是):

    IPV6仅限=开|关

    此参数(0.7.42)确定(通过IPV6_V6ONLY套接字选项)侦听通配符地址[::]的IPV6套接字将只接受IPV6连接还是同时接受IPV6和IPv4连接。默认情况下,此参数处于启用状态只能在启动时设置一次

    由于错误消息抱怨“重复侦听选项”,而不是“已在该端口上侦听”或类似内容,因此表明它抱怨再次尝试设置
    ipv6 only
    (甚至设置为相同的值)


    此外,它确实表示默认情况下此参数处于打开状态,因此您可以轻松地将其完全删除,只要尝试一下。

    另一个松散相关的想法:您只需要单独的
    服务器
    块,因为您对子域有不同的SSL证书。如果有使用通配符证书的选项,您可以使用一个证书覆盖这两个域(以及更多域),因此两个域都有一个
    服务器
    块(然后
    代理\u pass https://$host:443$request\u uri;