带有WordPress多站点子域的Nginx通配符SSL

时间:2019-03-11 作者:Elkrat

我有一个保护*的通配符证书。实例com和我需要删除所有子域请求的规范www,例如:www.subdomain1。实例com=>子域1。实例com公司

我复习了这个问题:https://stackoverflow.com/questions/11323735/nginx-remove-www-and-respond-to-both

但他们建议的第一个服务器块是:

server {
  server_name www.example.com;
  return 301 $scheme://example.com$request_uri;
}
不适用于www.subdomain。实例com公司

如何捕获并返回www*的方案。实例com?

我复习了另一个问题:https://serverfault.com/questions/249952/wildcard-vhosts-on-nginx其中他们使用正则表达式来匹配服务器名称,但我不确定如何将其应用于我的情况。

以下是我当前的设置:

server {
    listen [::]:80 ipv6only=off;
    server_name example.com *.example.com;
    return 301 https://$host$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;
    server_name example.com *.example.com;

    root /usr/share/nginx/webroot;
    index index.php index.html index.htm;

    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    #subdomain multi site with wp in \'wp\' subdir
    if (!-e $request_filename) {
    # Redirect wp-* files/folders
    rewrite ^(/[^/]+)?(/wp-.*) /wp/$2 last;

    # Redirect other php files
    rewrite ^(/[^/]+)?(/.*\\.php) /wp/$2 last;
    }

    ...(etc)
}

1 个回复
最合适的回答,由SO网友:Richard Smith 整理而成

可以在中使用正则表达式server_name 指令,但通配符名称(例如。*.example.com) 优先考虑。看见this document 有关详细信息。

例如:

server {
    listen [::]:80 ipv6only=off;
    server_name ~^(www\\.)?(?<name>(.+\\.)?example\\.com)$;
    return 301 https://$name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    server_name ~^www\\.(?<name>(.+\\.)?example\\.com)$;
    return 301 https://$name$request_uri;
}

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    ...
}
第一个server 阻止匹配项http 请求任何子域,并使用重定向到非www变体https.

第二个server 阻止匹配项https 对以开头的子域的请求www. 并重定向到非www变体。

第三个server 块不需要server_name 指令(因为它是默认服务器)并处理所有https 对主域和非www子域的请求。

相关推荐

MultiSite有SSL证书,但媒体库仍为http://

我们的多站点WordPress安装的URL为https://xx.com 对于主域,例如,https://yy.xx.com 作为子网站。我们正在使用WP的内置域映射功能。媒体库链接仍显示为http://xx 尽管如此,子域上使用的任何图像都被标记为不安全。只有一个子域(我们最近的一个子域)具有与结构的媒体库链接https://zz.xx.com. SSL证书可能是在创建其他子域之后安装的,但在ZZ之前:我不确定。我如何获得WP媒体库链接,所有链接都显示为https://-最好是URL中的子域?理想情况下