1

ワイルドカード DNS サブドメイン レコードがあります。ドメインのみの検証 SSL 証明書を使用します。そのようにnginx書き換えルールを設定する必要があります:

http://site.com   => https://site.com

http://*.site.com => http://*.site.com

だいたいこんな感じかな

server {
    listen  80;
    server_name site.com *.site.com;
    if ($host ~* "^([^.]+(\.[^.]+)*)\.site.com$"){
        set $subd $1;
        rewrite ^(.*)$ http://$subd.site.com$1 permanent;
        break;
    }
    if ($host ~* "^site.com$"){
        rewrite ^(.*)$ https://site.com$1 permanent;
        break;
    }
    #rewrite    ^ https://$server_name$request_uri? permanent;
    charset utf-8;
}

server {

    listen   443;

    server_name  site.com;
    ssl On;
    ssl_certificate     /root/site.com.crt;
    ssl_certificate_key /root/site.com.key;

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:8888;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/site$fastcgi_script_name;
        fastcgi_param  QUERY_STRING     $args;
        include fastcgi_params;
    }

    location / {
        root   /var/www/site;
        index  index.php index.html;
        if ($host !~ ^(site.com)$ ) {
            return 444;
        }
        try_files $uri $uri/ /index.php?$args;
    }
}

無限にループします。これを機能させる正しい方法は何ですか?

4

1 に答える 1

3

サーバー ブロックを 2 つの部分に書き直す必要があります。ドメイン「site.com」のみの最初の部分と、その後の https へのリダイレクトの 2 番目の部分、他のすべてのドメイン「*.site.com」

server {
    listen  80;
    server_name site.com;
    rewrite ^(.*)$ https://site.com$1 permanent;
}

server {
    listen  80;
    server_name *.site.com;
    #etc... rewrites not necessary
}

したがって、nginx.conf は次のようになります。

サーバー {
    80を聞いてください。
    server_name site.com;
    ^(.*)$ https://site.com$1 永久に書き換えます。
}
サーバー {
    80を聞いてください。
    サーバー名 *.site.com;
    文字セット utf-8;
    #など...
}

サーバー {

    聞く 443;

    server_name site.com;
    SSL オン;
    ssl_certificate /root/site.com.crt;
    ssl_certificate_key /root/site.com.key;

    場所 ~ \.php$ {
        fastcgi_pass 127.0.0.1:8888;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/site$fastcgi_script_name;
        fastcgi_param QUERY_STRING $args;
        fastcgi_params を含めます。
    }

    位置 / {
        ルート /var/www/site;
        インデックス index.php index.html;
        if ($ ホスト !~ ^(site.com)$ ) {
            444 を返します。
        }
        try_files $uri $uri/ /index.php?$args;
    }
}
于 2012-08-13T11:12:45.380 に答える