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에 여러 도메인을 안정적으로 들을 수 없습니다.

관련 정보