我可以在 HTTP/3 上監聽一個 ip 中的多個網域嗎?

我可以在 HTTP/3 上監聽一個 ip 中的多個網域嗎?

我正在使用 NGINX。我發現當我為一個 HTTP/3 連接埠設定多個網域時,NGINX 會拋出錯誤。

    server {
        listen 443 http3 reuseport;
        listen 443 ssl http2;
        server_name FIRST_DOMAIN;
        ssl_certificate     /etc/letsencrypt-ecdsa/live/FIRST_DOMAIN/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt-ecdsa/live/FIRST_DOMAIN/privkey.pem;
        ssl_protocols       TLSv1.3;

        return 301 https://SECOND_DOMAIN$request_uri;
    }

    server {
        listen 443 http3 reuseport;
        listen 443 ssl http2;
        server_name SECOND_DOMAIN default;
        ssl_certificate     /etc/letsencrypt-ecdsa/live/SECOND_DOMAIN/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt-ecdsa/live/SECOND_DOMAIN/privkey.pem;
        ssl_protocols       TLSv1.3;

        add_header Alt-Svc 'h3=":443"; ma=86400';

        location / {
            proxy_pass http://host.docker.internal:10002/;
            proxy_set_header  Host              $http_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: [emerg] duplicate listen options for 0.0.0.0:443 in /etc/nginx/nginx.conf:35

我可以在 HTTP/3 上監聽一個 ip 中的多個網域嗎?

答案1

const express = require('express');

const app = express();

app.get('/', (req, res) => {
    res.send(req.hostname);
});

app.listen(40000);

我用 Node.js Express 進行了實驗。當我使用 HTTP/2 時,會列印主機名稱。但是當我使用 HTTP/3 時,undefined列印出來了。這表示 HTTP/3 不關心主機名。因此,在一個 HTTP/3 連接埠中監聽多個網域是不可能的。但是您可以為每個 HTTP/3 網域開啟多個連接埠並新增Alt-Svc標頭以將它們通告到瀏覽器。

但根據我的經驗,Alt-Svc根據瀏覽器的不同,工作不穩定。所以,你無法在HTTP/3上穩定地監聽一個ip的多個域。

相關內容