web-dev-qa-db-ja.com

強制www。 nginx.confのhttps(SSL)

SSL証明書を購入した後、すべてのページをセキュリティで保護されたhttpsおよびwwwに強制しようとしています。

https://www.exampl.com は機能していて安全ですが、正確に入力した場合のみです。 www.example.comまたはexample.comはまだhttpを指しています。

Nginxをプロキシとして使用し、そこに書き換えを入力する必要があります。 PuTTY経由でのSSH/rootアクセスがあります。 PuTTYに入力してnginx.confにアクセスしました。

今何?このページでnginxコマンドを入力しますか?カーソルのある場所から始めますか?最初にコマンドラインはありますか?

HTTPS:

。htacess –nginxに入力する必要があることがわかる前に与えられた元のコード

RewriteEngine On 
RewriteCond %{HTTP_Host} ^example.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Nginxコードコンバーター–これは、コンバーターで表示される方法です。すべてが正しい行にありますか?

# nginx configuration location / {
if ($http_Host ~* "^example.com"){
rewrite ^(.*)$ http://example.com/$1 redirect; } }

その後

[〜#〜] www [〜#〜]

。htacess –nginxに入力する必要があることがわかる前に与えられた元のコード

#Force www:
RewriteEngine on
RewriteCond %{HTTP_Host} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

Nginxコードコンバーター–これは、コンバーターで表示される方法です。すべてが正しい行にありますか?

# nginx configuration location / { 
if ($http_Host ~* "^example.com"){ 
rewrite ^(.*)$ http://www.example.com/$1 redirect; } 

}

保存しますか?再起動?

どんな助けでも大歓迎です。私はこれを何週間も戦い続けてきました。私のホスティング会社はできる限りの支援をしてくれましたが、今はその場で学習しています…。それとも、開発者を止めて雇うべきですか? $$$

ありがとう

12
Ender17

WWWおよびHTTPSリダイレクトを実装する最良の方法は、Nginx構成に新しいserverセクションを作成することです。

server {
    listen      80;   #listen for all the HTTP requests
    server_name example.com www.example.com;
    return      301         https://www.example.com$request_uri;
}

https://example.com から https://www.example.com へのリダイレクトも実行する必要があります。これは、次のようなコードで実行できます。

server {
    listen              443 ssl;
    server_name         example.com;

    ssl_certificate     ssl.crt; #you have to put here...
    ssl_certificate_key ssl.key; #   ...paths to your certificate files
    return      301     https://www.example.com$request_uri;
}

そしてもちろん、変更するたびにNginx設定をリロードする必要があります。ここにいくつかの便利なコマンドがあります:

構成のエラーをチェックします:

Sudo service nginx configtest

リロード設定(これで「作業」を変更するには十分です):

Sudo service nginx reload

ウェブサーバー全体を再起動します:

Sudo service nginx restart

重要な注意:

serverセクションはすべてhttpセクション内(またはhttpセクションに含まれるファイル内)にある必要があります。

http {
    # some directives ...
    server {
        # ...
    }
    server {
        # ...
    }
    # ...
}
32
Oleg

次の解決策は明確かつ単純で、すべて1つのサーバーブロックで定義されています。したがって、この設定では、すべてを https://www.domain.tld に強制します。そのため、両方のハンドラーは、ここではHTTPS以外でHTTPS以外のWWWです。 IFは2つありますが、SSLブロック全体を2回複製して処理したくない場合は、これがその方法です。

server {
    listen 80;
    listen 443 ssl;

    server_name domain.tld www.domain.tld;

    # global HTTP handler
    if ($scheme = http) {
        return 301 https://www.domain.tld$request_uri;
    }

    # global non-WWW HTTPS handler
    if ($http_Host = domain.tld){
        return 303 https://www.domain.tld$request_uri;
    }
}

そしてIFを避けるためのさらに良い解決策:

# Redirect all traffic from HTTP to HTTPS
server {
    listen 80;

    server_name example.com www.example.com;

    # Destination redirect base URI
    set $RURI https://www.example.com;

    location / {return 301 $RURI$request_uri;}
}

# Redirect non-WWW HTTPS traffic to WWW HTTPS
server {
    listen 443 ssl;
    # NOTE: SSL configuration is defined elsewhere
    server_name example.com;
    return 301 $scheme://www.$Host$request_uri;
}

# MAIN SERVER BLOCK
server {
    listen 443 ssl;
    # NOTE: SSL configuration is defined elsewhere
    server_name www.example.com;
}
10
stamster

サイト対応のディレクトリがある場合は、「http」トップディレクティブを使用しないでください。サイトが有効なディレクトリに次のファイルを(任意の名前で)作成するだけです。

server {
    listen      80;   #listen for all the HTTP requests
    server_name example.com www.example.com;
    return      301         https://www.example.com$request_uri;
}

行をコメント化します

listen 80; 

ここで、server_nameはwww.example.comを提供する他のファイルと同じです

0
David Noriega