我正在使用 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的多個域。