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 設計エラーをご存知ですか?

推薦する

Centos6にMysql5.7をインストールする方法

環境セントロス6.6 MySQL 5.7インストールシステムがインストールされている場合は、まずアン...

純粋な JS を使用して vue.js で双方向バインディング機能を実装する方法

目次まず、双方向バインディングを実装するアイデアについて説明します。これらの機能を実装するための j...

Vueはページキャッシュ機能を実装する

この記事の例では、ページキャッシュ機能を実装するためのVueの具体的なコードを参考までに共有していま...

CSS における z-index: 0 と z-index: auto の違い

最近、スタック コンテキストについて学習しています。学習の過程で、z-index が 0 の場合と ...

JSタイマーを使用して要素を移動する

JS タイマーを使用して、要素に移動する効果のあるメソッドを作成します。実装のアイデアは、まず要素の...

Vue lazyload 画像遅延読み込み例の詳細な説明

ドキュメント: https://github.com/hilongjw/vue-lazyload 1...

MySQLカーソルの使い方と機能の詳細な説明

[mysqlカーソルの使い方と機能]例:現在、テーブル A、B、C の 3 つのテーブルがあります。...

MySQL パスワードは正しいが、ローカルにログインできない -1045

MySQLパスワードは正しいが、ローカルでログインできない -1045 ユーザー 'roo...

Reactプロジェクトの新規作成からデプロイまでの実装例

新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...

MySQL インデックスの設計と最適化の方法

目次インデックスとは何ですか?左端のプレフィックス一致の原則key_lenの計算方法インデックスの最...

display または visibility を通じて HTML 要素を表示または非表示にする

場合によっては、特定の条件に基づいて Web ページ内の HTML 要素を表示するか非表示にするかを...

JavaScript が Xiaomi のカルーセル効果を模倣

この記事は、透明度を変えてカルーセルにするXiaomiカルーセルを真似て書いたものです。初心者なので...

フォアマン Ubuntu16 クイックインストール

クイックスタートガイドForeman インストーラーは、完全に機能する Foreman セットアップ...

CentOS 7.4 にソースコードから MySQL 8.0 をインストールするための詳細なチュートリアル

目次1. 環境2. 準備3. MySQL 8.0.11をインストールするMySQL 8 の公式バージ...

MySQL 5.7.19 Winx64 ZIP アーカイブのインストールと使用に関する問題の概要

今日はMySQLのインストール方法を学びましたが、その過程でいくつか問題が発生しました。関連記事をい...