我正在使用 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 中监听多个域。