Я использую NGINX. Я обнаружил, что NGINX выдает ошибку, когда я устанавливаю несколько доменов для одного порта HTTP/3.
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
Могу ли я прослушивать несколько доменов на одном IP-адресе по HTTP/3?
решение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
работает нестабильно в зависимости от браузера. Так что вы не сможете слушать несколько доменов на одном ip на HTTP/3 стабильно.