Nginx ベースの HTTPS ウェブサイトを設定する手順

Nginx ベースの HTTPS ウェブサイトを設定する手順

序文:

まず、なぜ現在 HTTPS プロトコルを使用しているのかを簡単に説明します。

実際、HTTPS プロトコルを使用する最大の理由は、HTTP プロトコルが安全ではないことです。HTTP データ転送はプレーンテキスト転送データであり、つまり、クライアントがユーザー名とパスワードを入力すると、それらが表示されます。一方、HTTPS プロトコルは暗号文を使用してデータを送信するため、送信中にデータが暗号化されます。

HTTPS は、データ転送のセキュリティの問題に対して、暗号化アルゴリズム、具体的には対称暗号化アルゴリズムと非対称暗号化アルゴリズムを組み合わせたハイブリッド暗号化アルゴリズムを使用することで解決します。

暗号化アルゴリズム:

  • 対称暗号化: 暗号化と復号化の両方に同じキーが使用されます。一般的な対称暗号化アルゴリズムには、DES、3DES、AES などがあります。
  • 非対称暗号化: 暗号化と復号化には、公開鍵と秘密鍵という 2 つの異なる鍵を使用する必要があります。一般的に使用される非対称暗号化アルゴリズムは RSA アルゴリズムです。

1. HTTPS の概要

HTTPS は実際には HTTP + SSL/TLS の 2 つの部分で構成されており、暗号化された情報を処理するためのモジュールが HTTP に追加されていることを意味します。サーバーとクライアント間の情報伝送は TLS 経由で暗号化されるため、送信されるデータは暗号化されたデータになります。

HTTPS プロトコルの原則:

ここに画像の説明を挿入

  • クライアントは HTTPS プロトコル経由でサーバーのポート 443 にアクセスします。
  • サーバーはクライアントに応答し、公開鍵である証明書を送信します。
  • 証明書を受け取った後、クライアントは CA に証明書が有効かどうかを判断するよう要求します。無効な場合、クライアントは証明書が安全ではないことを示す警告メッセージを表示します。
  • 証明書が有効な場合、クライアントはランダムな値を生成します。
  • クライアントはサーバーから送信された証明書を使用してランダム値を暗号化し、それをサーバーに送信します。
  • サーバーはそれを受信すると、ローカルの秘密鍵を使用してそれを復号化し、クライアントのランダム値を取得します。サーバーがデータを送信するとき、ランダム値を使用してデータを暗号化します。つまり、公開鍵を生成します。ランダム値は秘密鍵です。
  • サーバーは暗号化されたデータをクライアントに送信します。
  • データを受信した後、クライアントはランダムな値を使用してデータを復号化し、データを正常に送信します。

2. NginxはHTTPSウェブサイト設定を実装する

1. Nginxをインストールする

[root@Nginx ~]# yum -y インストール pcre-devel zlib-devel popt-devel openssl-devel openssl
[root@Nginx ~]# wget http://www.nginx.org/download/nginx-1.18.0.tar.gz
[root@Nginx ~]# ls
anaconda-ks.cfg nginx-1.18.0.tar.gz
[root@Nginx ~]# tar zxf nginx-1.18.0.tar.gz -C /usr/src/
[root@Nginx ~]# cd /usr/src/nginx-1.18.0/
[root@Nginx nginx-1.18.0]# useradd -M -s /sbin/nologin nginx
[root@Nginx nginx-1.18.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--ファイル付きAIO\
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http_flv_module \ で始まる
--http_ssl_module \ で始まる
--with-pcre && make && make install
[root@Nginx nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@Nginx nginx-1.18.0]# cd
[root@Nginx ~]# nginx
[root@Nginx ~]# netstat -anpt | grep 80

2. サーバー証明書キーファイルを作成する

[root@Nginx ~]# openssl genrsa -des3 -out server.key 1024
...
server.key のパスフレーズを入力してください: # パスワードを入力してください検証中 - server.key のパスフレーズを入力してください: # パスワードを確認してください

3. サーバー証明書のアプリケーションファイルを作成する

[root@Nginx ~]# openssl req -new -key server.key -out server.csr
server.key のパスフレーズを入力してください: # 先ほど作成したパスワードを入力してください...
国名(2文字コード)[XX]:CN # 国コード。中国はCNと入力します。
州または県名 (フルネーム) []:BeiJing # 省のフルネーム。 ピンイン地域名 (例: 市) [デフォルトの市]:BeiJing # 市のフルネーム。 ピンイン組織名 (例: 会社) [デフォルトの会社 Ltd]:Coco # 会社の英語名組織単位名 (例: セクション) []: # 空白のままにすることができます共通名 (例: 自分の名前またはサーバーのホスト名) []:www.Coco.com # ドメイン名電子メール アドレス []:[email protected] # 電子メール アドレス。自由に入力してください...
チャレンジパスワード []: # これはオプションです 任意の会社名 []: # これはオプションです

サーバーキーファイルをバックアップする

[root@Nginx ~]# cp server.key server.key.org

ファイルのパスワードを削除する

[root@Nginx ~]# openssl rsa -in server.key.org -out server.key
server.key.org のパスフレーズを入力してください: #

4. 証明書ファイルを生成する

[root@Nginx ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
署名OK
件名=/C=CN/ST=北京/L=北京/O=Coco/CN=www.Coco.com/[email protected]
秘密鍵の取得

5. Nginxのメイン設定ファイルを変更する

[root@Nginx ~]# mkdir -p /usr/local/nginx/conf/ssl
[root@Nginx ~]# cp server.crt server.key /usr/local/nginx/conf/ssl/
[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
サーバー{
    listen 443; # リスニングポート ssl on; # SSLを有効にする
    ssl_certificate ssl/server.crt; # PS: ここでは相対パスを使用しています。絶対パスを使用することもできます。 ssl_certificate_key ssl/server.key; # システムは /usr/local/nginx/conf/ ディレクトリで server_name www.Coco.com を検索します。 # 証明書に対応するドメイン名...
}
[root@Nginx ~]# nginx -s reload # Nginxサービスを再起動します

nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" : バージョンが1.15以上なので、正常に起動できます。

検証: 先ほど設定したドメイン名にアクセスしますhttps://www.Coco.com/

ここに画像の説明を挿入

クライアント アクセスをhttpからhttpsにリダイレクトする機能を実装します。

構成ファイルにserverを追加する必要がある理由は、 httpプロトコルはポート 80 を使用し、 httpsプロトコルはポート 443 を使用するためです。

httpからhttpsにリダイレクトする場合は、2 つの仮想ホスト (異なるポートに基づく) を構成してから、 rewriteを使用してリダイレクトする必要があります。

誤った設定:

同じserverで複数のポートを開くことに論理的な問題はありませんが、 rewriteを構成するときに問題が発生します。

問題: クライアントがhttpアクセスするとジャンプしますが、 httpsにアクセスするとジャンプするため、リダイレクトが多すぎます。

サーバー{
    聞く 80;
    聞く 443;
    サーバー名 www.Coco.com;
    ルートhtml;
    インデックス index.html index.htm;
    ^(.*)$ https://$host$1 を永続的に書き換えます。
}

ここに画像の説明を挿入

正しい構成:

簡単に言えば、ポート 80 とポート 443 を区別するには、異なるポートに基づいて仮想ホストを構成する必要があります。

この方法では、ポート 80 へのアクセスをリダイレクトし、ポート 443 へのアクセスを直接行うことができます。

[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
サーバー{
    聞く 80;
    サーバー名 www.Coco.com;
    ^(.*)$ https://$host$1 を永続的に書き換えます。
    ...
}
サーバー{
    聞く 443;
    sslオン;
    ssl_certificate ssl/server.crt;
    ssl_certificate_key ssl/server.key;
    サーバー名 www.Coco.com;
    ...
}
[root@localhost ~]# nginx -s リロード

検証: http://www.Coco.comにアクセスしてください

ここに画像の説明を挿入

Nginx をベースにした HTTPS ウェブサイトの設定手順についてはこれで終了です。Nginx HTTPS ウェブサイト設定の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx の https ウェブサイト設定の実装の詳細な説明
  • Nginx で HTTPS を設定する方法

<<:  純粋な CSS3 でモバイルの拡大と縮小の効果を実装するためのサンプル コード

>>:  よくある MySQL 設計エラーをご存知ですか?

推薦する

Nginx操作応答ヘッダー情報の実装

前提条件: ヘッダー情報操作をサポートするには、ngx_http_headers_module モジ...

MySQLはデータテーブル内の既存のテーブルを分割します

目次操作方法操作プロセス既存のテーブルにパーティション テーブルを作成し、データを新しいテーブルに移...

webpackでHMRを手動で実装するいくつかの方法

目次1. はじめに2. GitHub 3. 基本構成プロジェクトディレクトリパッケージ.json c...

JS の配列トラバーサルについて、一般的なループをいくつ知っていますか?

序文基本的なデータ構造として、配列とオブジェクトはさまざまなプログラミング言語で重要な役割を果たしま...

Webフロントエンド開発エンジニアが習得すべきコアスキル

Web フロントエンド開発に含まれる内容は、主に W3C 標準の構造、動作、パフォーマンスです。では...

MySQLインスタンスを安全にシャットダウンする方法

この記事では、mysqld プロセスをシャットダウンするプロセスと、MySQL インスタンスを安全か...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

公式 MySQL Web サイトから Ubuntu Linux 用の最新バージョンの MySQL を...

Linuxでファイルの作成時間を表示する方法

1. はじめにLinux でファイルの作成時刻が見つかるかどうかは、ファイル システムの種類によって...

Linuxにソフトウェアをインストールするいくつかの方法の詳細な説明

1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...

win10 64 ビット システムに複数の JDK バージョンをインストールする際の切り替え問題と解決策の概要

コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...

CSS を使用して要素のスクロールバーを非表示にするサンプルコード

どの要素でもスクロールできるようにしながら、スクロールバーを非表示にするにはどうすればよいでしょうか...

CSS3 弾性拡張ボックスの詳細な説明

使用フレキシブル ボックスはフロントエンドの Web ページ レイアウトで重要な役割を果たしますが、...

MySQL 8.0.15 のインストールと設定方法のグラフィック チュートリアル (Windows 10 X64)

最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...

cocoscreatorプレハブの詳しい説明

目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...

LeetCode の SQL 実装 (183. 注文をしたことがない顧客)

[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...