大型 WordPress Multisite 安装有超过 150 个域名,预计将达到 900 多个。
我想简化 nginx 服务器配置。目前,由于 Let's Encrypt 限制每个 SSL 证书 100 个,我们必须将服务器列表拆分为 100 个组。这很好用。
但是,为了确保 www. 和根域都能正常工作,我使用 if 语句来评估传入请求是否为根,然后重定向到 www。这也能正常工作,但需要对托管的每个域都执行此操作,因此目前有 75 多个 if 语句。
我确信有更好、更高效、更优雅的方法来实现这一点。我研究过不同的方法,但大多数解决方案似乎都有效,因为您可以在一个服务器块中为所有域处理所有传入域。同样,在我的例子中,我们目前有 3 个服务器块,以便 Let's Encrypt 正常工作。
示例配置...
##Serve first 100 Sites
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/domain.com-0010/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com-0010/privkey.pem; # managed by Certbot
server_name domain1.com www.domain1.com domain2.com www.domain2.com domain3.com www.domain3.com
if ($host = domain1.com) {
return 301 https://www.domain1.com$request_uri;
}
if ($host = domain2.com) {
return 301 https://www.domain2.com$request_uri;
}
if ($host = domain2.com) {
return 301 https://www.domain2.com$request_uri;
}
if ($host = domain3.com) {
return 301 https://www.domain3.com$request_uri;
}
...rest of config
}
##Serve second 100 Sites
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/domain.com-0020/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com-0020/privkey.pem; # managed by Certbot
server_name domain101.com www.domain101.com domain102.com www.domain102.com domain103.com www.domain103.com
if ($host = domain101.com) {
return 301 https://www.domain101.com$request_uri;
}
if ($host = domain102.com) {
return 301 https://www.domain102.com$request_uri;
}
if ($host = domain102.com) {
return 301 https://www.domain102.com$request_uri;
}
if ($host = domain103.com) {
return 301 https://www.domain103.com$request_uri;
}
...rest of config
}
答案1
我更喜欢将主www.
域拆分为其自己的server
块并重定向到另一个块:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate ...;
ssl_certificate_key ...;
server_name example1.com example2.com example3.com;
return 301 https://www.$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate ...;
ssl_certificate_key ...;
server_name www.example1.com www.example2.com www.example3.com;
... rest of config
}
这样重定向配置就与主配置明显区分开来了。不需要if
对每个发往主域的请求都进行处理,速度会稍微提高一些。