【问题标题】:Nginx proxy_pass redirecting to wrong domainNginx proxy_pass 重定向到错误的域
【发布时间】:2016-01-19 17:15:05
【问题描述】:

我的 nginx 配置中有三个不同的 proxy_pass。其中两个重定向到 https 主机,最后一个通过标准端口 80。

前两个(example.comproxmox.example.com)工作正常。

但问题在于第三个。 http://blog.example.com 重定向到 https://example.com 我不明白为什么。

如果有人有想法...我是 nginx 新手,但我仍然难以理解使用或不使用 SSL 的 proxy_pass。

这是我的配置。

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

server {
    listen 80;
    server_name example.com proxmox.example.com;
    rewrite ^(.*) https://$host$1 permanent;
}

server {
    listen 443;
    server_name example.com;
    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    proxy_redirect off;
    location / {
        proxy_pass https://localhost:8000;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
    }
}
server {
    listen 443;
    server_name proxmox.example.com;
    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    proxy_redirect off;
    location / {
        proxy_pass https://localhost:8006;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

server {
    listen 80;
    server_name blog.example.com;
    proxy_redirect off;
    location / {
        proxy_pass http://10.0.0.3:80;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
    }
}

谢谢

编辑

我在 Nginx 文档上读过这个。这可能是问题的原因。

使用此配置,浏览器会接收默认服务器的证书,即 www.example.com,而不管请求的服务器名称如何。这是由 SSL 协议行为引起的。 SSL 连接是在浏览器发送 HTTP 请求之前建立的,而 nginx 不知道请求的服务器的名称。因此,它可能只提供默认服务器的证书。

Link: see in Name-based HTTPS servers

【问题讨论】:

  • 只是猜测:是否为“blog.example.com”正确设置了 DNS-A 条目?可能是指向了错误的目标IP..
  • 10.0.0.3:80 可能就是这样做的。
  • 其实我在安装proxmox的主机上。所以localhost 是主要主机,10.0.0.* 是 proxmox 容器......所以 10.0.0.3 是我的 proxmox 容器之一。对于 DNS,应该没问题,因为我的容器正在使用主机 dns 信息。

标签: redirect ssl nginx proxypass


【解决方案1】:

最后,这是因为我的证书仅适用于example.com,而不适用于*.example.com。所以它与子域不匹配,我被重定向到第一个可用的 SSL 配置(即 example.com)。所以我在我的证书中添加了一个subjectAltName 以允许*.example.com

然后,我还将证书声明的定义直接更改为 Nginx 配置的 html 部分以用于缓存目的。这是我的最终配置:

# Certificates
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

# Return 404 if no server name matches
server {
    listen 80 default_server;
    server_name _;
    return 444;
}

# Redirect chosen domain to https
server {
    listen 80;
    server_name example.com proxmox.example.com;
    rewrite ^(.*) https://$host$1 permanent;
}

# Main configuration
server {
    listen 443;
    server_name example.com;
    ssl on;
    proxy_redirect off;
    location / {
        proxy_pass https://localhost:8000;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
    }
}

# Proxmox configuration
server {
    listen 443;
    server_name proxmox.example.com;
    ssl on;
    proxy_redirect off;
    location / {
        proxy_pass https://localhost:8006;

        proxy_set_header    Host              $host;
        proxy_set_header    X-Real-IP         $remote_addr;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2018-12-20
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多