我在 Ubuntu 18.04.3 上有一个 nginx 1.14.0。我在使用 punycode 域时遇到了一些问题,它仅适用于子域,例如 www.xn--bratwrste-u9a.de,但不适用于仅域,例如 xn--bratwrste-u9a.de 其他域,例如 example.com预期的。
我的默认服务器配置:
server {
listen 1.2.3.4:443 ssl http2 default_server;
listen 5.6.7.8:443 ssl http2 default_server;
ssl_certificate /ssl/sslcert.pem;
ssl_certificate_key /ssl/privkey.pem;
server_name _;
root /var/www/foo;
index index.html index.php;
}
这里是虚拟服务器配置:
server {
listen 5.6.7.8:443 ssl http2;
server_name .xn--bratwrste-u9a.de;
ssl_certificate /ssl/sslcert.pem;
ssl_certificate_key /ssl/privkey.pem;
root /var/www/bar;
index index.html index.php;
}
日志看起来不错:
"GET /foo.bar HTTP/2.0" 200 247 "https://xn--bratwrste-u9a.de/"
error.log 中也没有错误
nginx 的文档没有给我任何问题的答案,并且单独列出服务器名称也没有什么不同。
感谢您的任何建议。
编辑:
解决方法:将重写规则添加到默认服务器:
if ($host = xn--bratwrste-u9a.de) {
rewrite (.*) https://www.xn--bratwrste-u9a.de$1;
}
奇怪的是,这有效,但 server_name 不...