ウェブサイト検索

Nginxを使用してすべてのトラフィックをhttpからhttpsにリダイレクトする方法


NGINXでホストされているウェブサイトがSSLを有効にしている場合、HTTPを完全に無効にし、すべての受信トラフィックをウェブサイトのHTTPSバージョンに強制するのがベストプラクティスです。これにより、重複コンテンツを避け、サイトのすべてのユーザーが安全なウェブサイトのバージョンのみを閲覧することが保証されます。また、検索エンジンは冗長性がなく、安全なウェブページを好むため、SEOの向上も期待できます。

このガイドでは、あなたがすでにLinuxシステムでNGINXを使用していると仮定し、すべてのHTTPトラフィックをHTTPSにリダイレクトする方法について説明します。たとえユーザーがhttp://リンクをクリックしても、そのサイトは正しい安全なページにユーザーを送信するべきであり、その処理は瞬時に行われ、ユーザーの介入なしに行われます。

NGINXでこのリダイレクションを設定する方法は2つあります。1つの方法は、個別のサイトのためにリダイレクションを構成できるものです。もう1つの方法は、サーバー上のすべてのNGINXサイトに対してHTTPをHTTPSにリダイレクトできるもので、複数のサイトを設定していて、各サイトに同じリダイレクションを適用する必要を避けたい場合に便利です。以下に両方の方法に対する手順を説明します。それでは始めましょう。

注
NGINXの代わりにApacheを使用していますか?HTTPトラフィックをHTTPSにリダイレクトする方法について、別のガイドを作成しました。

このチュートリアルでは、あなたは学びます:

  • 個々のNGINXウェブサイトのHTTPをHTTPSにリダイレクトする方法
  • すべてのNGINXウェブサイトのHTTPをHTTPSにリダイレクトする方法

NGINXでHTTPトラフィックをHTTPSにリダイレクトする

個別のサイトに対してHTTPをHTTPSにリダイレクトする

トラフィックをリダイレクトするために、NGINXサーバーの設定ファイルに変更を加える必要があります。好みのテキストエディタで開いてください。


sudo nano /etc/nginx/sites-available/your_conf_file

このファイルには、HTTP(ポート80)接続の設定を制御するブロックと、HTTPS(ポート443)接続の設定を制御するブロックの少なくとも二つが必要です。HTTP部分の下に、次の301リダイレクトコードを挿入してください。当然、例のドメインはあなたのサイトのドメインに置き換えてください。


server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

ご覧のように、このコードはポート80でexample.comおよびwww.example.comへの接続を待機しています。そして、その接続を同じURLのhttps://付きにリダイレクトします。

HTTPブロックの下に、まだ作成していない場合はHTTPSブロックが必要です。


server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen              443 ssl;
    server_name         example.com;
    ssl_certificate     example.com.crt;
    ssl_certificate_key example.com.key;
    # other configuration
}

しかし、https://www.example.com(www.に注意)への接続はどうですか?それらの接続もリダイレクトするには、301リダイレクトの別のブロックが必要です。完全な設定ファイルは次のようになります(ただし、あなたのものには追加の設定が含まれている場合があります):


server {
	# redirect all HTTP to HTTPS
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
	# redirect HTTPS www.
    listen              443 ssl;
    server_name         www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen              443 ssl;
    server_name         example.com;
    ssl_certificate     example.com.crt;
    ssl_certificate_key example.com.key;
    # other configuration
}

新しい変更を適用させるために、systemctl コマンドを使用して NGINX を再起動または再読み込みすることを確認してください。


sudo systemctl reload nginx

あなたのサイトは、http://やwww.が前置きされているかどうかに関わらず、常にhttps://example.comの形式のURLにリダイレクトされるべきです。

すべてのサイトのHTTPをHTTPSにリダイレクトする

NGINXでホストされているすべてのウェブサイトのトラフィックをリダイレクトするには、構成ファイルに次のコードを入力してください:


server {
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name _;
	return 301 https://$host$request_uri;
}

これは上記のコードとほぼ同じですが、変数$hostを使用しているため、NGINXがホストしている任意のURLに適用できます。この方法は少し便利かもしれませんが、各サイトが独自のサーバーブロックを持つときに持っている微細な制御を失うことになります。自分の判断で好きな方法を選んでください。

結論

ほとんどのケースでは、サイトがHTTPSを提供できる場合、HTTPを使い続ける理由はありません。HTTPSはより安全で、ユーザーに安心感をもたらし、サイトには少しのSEOの向上が期待できます。この記事では、すべてのトラフィックをHTTPSにリダイレクトし、HTTPを完全に排除する方法がいかに簡単であるかを見ました。これらのいずれの方法も、あなたのウェブサイト上でHTTPトラフィックをHTTPSに強制的に移行させるための実行可能な手段です。

関連記事: