nginx を https をサポートするように設定するためのサンプル コード

nginx を https をサポートするように設定するためのサンプル コード

1. はじめに

あなたのウェブサイトはまだインターネット上に公開されたままですか?ここでは、HTTPS の無料バージョンを構築します。無料、無料、無料。重要なので 3 回言います。

ハイパーテキスト転送プロトコル (HTTP) は、Web ブラウザと Web サイト サーバーの間で情報を転送するために使用されます。HTTP プロトコルはコンテンツをプレーン テキストで送信し、いかなる形式のデータ暗号化も提供しません。攻撃者が Web ブラウザと Web サイト サーバーの間の送信メッセージを傍受した場合、攻撃者はその中の情報を直接読み取ることができます。

したがって、HTTP プロトコルは、クレジットカード番号、パスワード、その他の支払い情報などの機密情報を送信するのには適していません。

HTTP プロトコルのこの欠陥を解決するには、別のプロトコル、Secure Sockets Layer (Hypertext Transfer Protocol) HTTPS が必要です。データ転送のセキュリティのために、HTTPS は HTTP に基づいて SSL プロトコルを追加します。SSL は証明書に依存してサーバーの ID を検証し、ブラウザーとサーバー間の通信を暗号化します。

2. HTTPSの利点

HTTPS は絶対に安全というわけではありませんが、ルート証明書と暗号化アルゴリズムを管理する組織は中間者攻撃を実行することもできます。ただし、HTTPS は現在のアーキテクチャでは依然として最も安全なソリューションであり、次のような主な利点があります。

(1)HTTPSプロトコルを使用すると、ユーザーとサーバーを認証し、データが正しいクライアントとサーバーに送信されることを保証できます。

(2)HTTPSプロトコルは、SSL+HTTPプロトコルによって構築されたネットワークプロトコルであり、暗号化された送信とID認証を実行できます。HTTPプロトコルよりも安全で、送信中にデータが盗まれたり変更されたりすることを防止できるため、データの整合性が保証されます。

(3)HTTPSは現在のアーキテクチャでは最も安全なソリューションです。絶対的に安全というわけではありませんが、中間者攻撃のコストは大幅に増加します。

(4)Googleは2014年8月に検索エンジンのアルゴリズムを調整し、「HTTPS暗号化を使用しているウェブサイトは、同等のHTTPウェブサイトよりも検索結果の上位に表示される」と述べました。

3. HTTPSのデメリット

HTTPS には大きな利点がありますが、いくつかの欠点も残っています。

(1)HTTPSプロトコルのハンドシェイクフェーズは時間がかかるため、ページの読み込み時間が約50%長くなり、消費電力が10%から20%増加します。

(2)HTTPS接続キャッシュはHTTPほど効率的ではないため、データのオーバーヘッドと電力消費が増加し、既存のセキュリティ対策にも影響を及ぼします。

(3)SSL証明書は有料です。証明書の性能が高ければ高いほど、料金も高くなります。個人のウェブサイトや小規模なウェブサイトでは、一般的にSSL証明書を使用する必要はありません。

(4)SSL証明書は通常、IPアドレスにバインドする必要があります。複数のドメイン名を同じIPアドレスにバインドすることはできません。IPv4リソースはこのような消費をサポートできません。

(5)HTTPSプロトコルの暗号化範囲も比較的限定されており、ハッカー攻撃、サービス拒否攻撃、サーバーハイジャックなどにはほとんど効果がありません。最も重要なのは、SSL 証明書のクレジット チェーン システムは安全ではなく、特に一部の国が CA ルート証明書を制御できる場合、中間者攻撃が依然として実行可能であることです。

4. certbotをダウンロードする

ここからgitを使ってダウンロードしてください。まだgitをインストールしていない場合は、インストール方法を確認してください。

ディレクトリを変更する

/usr/local に移動します

Gitリポジトリをクローンする

git クローン https://github.com/certbot/certbot.git

クローンが完了すると、certbotディレクトリが/usr/loca/に表示されます。

5. certbot を表示する

certbotディレクトリに変更する

cd /usr/local/certbot

ディレクトリがこのようになっている場合、インストールは成功したことを意味します。

certbot の一般的なコマンド 公式ドキュメントを見る

6. nginxをインストールする

nginxのインストールドキュメントを参照してください

7. https証明書を申請する

現在の証明書を表示

./certbot-auto 証明書

最初の実行ではいくつかの依存関係がインストールされます。途中で確認プロンプトが表示されます。Y と入力します。

証明書の申請を開始します (証明書の有効期間は 3 か月で、有効期限が切れると再申請する必要があります) 方法 1: DNS 検証を使用します。この方法では、ドメイン名を設定できる必要があります。個人的にはこの方法が気に入っています。/certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d your domain name --manual --preferred-challenges dns-01 certonly たとえば、次のようになります。

ワイルドカードドメイン名の設定

次のようにコードをコピーします
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.nl166.com --manual --preferred-challenges dns-01 certonly

特定のドメイン名を設定する

次のようにコードをコピーします
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d api.nl166.com --manual --preferred-challenges dns-01 certonly

セカンダリワイルドカードドメイン名の設定

次のようにコードをコピーします
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.api.nl166.com --manual --preferred-challenges dns-01 certonly

上の画像に示すように、初めてメールアドレスを入力するよう求められます。必要に応じて入力してください。その後、メールが送信されるので、クリックしてメールアドレスを確認する必要があります。そのため、実際のメールアドレスを入力し、必要に応じて確認してください。確認しないと、先に進むことができません。

次に、ドメイン名を確認し、必要に応じて TXT レコードを解決するように求められます。

保存して確認し、サーバーに戻って確認します

上記の2つのファイルは、httpsを構成するために使用される証明書です。

方法2: プラグインを使用する

まず当局者が何を言ったか見てみましょう

ここではnginxを使用します(適用後、nginxが自動的に再起動されます)この方法ではワイルドカードドメイン名を構成することはできず、1つずつ追加することしかできません。

./certbot-auto --nginx -d api2.nl166.com 

上記のエラーを解決するには、/usr/local/nginxをnginxの実際のインストール場所に置き換えてLNMPをインストールする必要があることに注意してください。

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

ln -s /usr/local/nginx/conf/ /etc/nginx

アプリケーションを再度実行する

HTTP トラフィックを HTTPS にリダイレクトし、HTTP アクセスを削除するかどうかを選択するよう求められます。必要に応じて選択できます。ここでは選択をキャンセルします (実際には、この手順は直接無視できます。テスト後、この手順を選択する前に URL https にアクセスできます)。

クエリ手順をスキップする場合は、certonly を追加できます。この方法では、他の操作は実行されずに証明書のみが生成さます。証明書の構成は、次のように手動で追加する必要があります。

./certbot-auto certonly --nginx -d api2.nl166.com 

上図のように、ポート 443 を listen するサーバーを設定すると、対応するドメイン名の設定ファイルが自動的に検索され、次の 2 行が追加されます。また、フォーマットが乱れ、} 番号のインデントが上記の { のインデントに対応していませんが、機能には影響しません。nginx のバージョンに応じて ssl on を追加するかどうかはわかりません。

私のバージョンの nginx ではこれが必要ないため、下位バージョンでは https アクセスを有効にするために ssl on; を追加する必要があります。

ドメイン名の443ポートが監視されていない場合は、次の場所に情報が追加されます

他の方法はご自身で探してみてください

8. nginx を https をサポートするように設定

# HTTPS サーバー
 #
 サーバー{
 443 ssl を聴く;
 サーバー名 api2.nl166.com;
 ルート /data/web/im.nl166.com;

 位置 / {
 インデックスindex.php;
 }

 #auth_basic "こんにちは世界";
 #auth_basic_user_file /usr/local/nginx/conf/auth/nl166.auth;

 場所 ~ \.php$ {
 fastcgi_params を含めます。
 fastcgi_pass unix:/tmp/php-fcgi.sock;
 fastcgi_index インデックス.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
 場所 ~ .*.(svn|git|cvs) {
 すべてを否定する;
 }

 ssl_certificate /etc/letsencrypt/live/api2.nl166.com/fullchain.pem; # Certbot によって管理されています
 ssl_certificate_key /etc/letsencrypt/live/api2.nl166.com/privkey.pem; # Certbot によって管理されています
 }

以前のバージョンでは、https アクセスを有効にするために ssl on; を追加する必要があります。

9. シェルスクリプトとスケジュールされたタスクを使用して証明書を定期的に更新する

注意: 操作回数の制限を回避するには、--dry-run パラメータを追加します。実行が正しく行われたら、これを削除して実際の更新操作を実行します。 方法1による更新

ドメイン名は /etc/letsencrypt/renewal/ ディレクトリ内の ****.conf です。**** は記入したいドメイン名です。例えば私が生成したときは *.nl166.com でしたが、実際に生成すると * はありませんでした。

/home/certbot-sh/au.sh DNSを更新するための独自のスクリプトに置き換えます

次のように:

次のようにコードをコピーします
./certbot-auto 更新 --cert-name nl166.com --manual-auth-hook /data/shell/crontab/auto_update_httpscert.sh --dry-run

更新コマンドをファイルに入れます。/data/shell/crontab/auto_update_httpscert.shに入れました。内容は以下のとおりです。元のauto_update_httpscert.shを/data/shell/cnl_update_httpscert.shに変更します。

システムのスケジュールされたタスクを追加する

crontab -e

#毎週日曜日の午前5時にhttps証明書を更新します

0 5 * * 0 sh /data/shell/crontab/auto_update_httpscert.sh

方法2の更新方法は次のとおりです。

./certbot-auto certonly --renew-by-default --nginx -d api2.nl166.com --dry-run 

システムスケジュールタスク操作参照方法1の追加

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • HttpとHttpsの両方をサポートするNginxの詳細な設定
  • NexusはHTTPSプロトコルをサポートするためにnginxプロキシを使用します
  • nginx + セカンダリドメイン名 + https サポートを使用する
  • SSL モジュール構成を使用して HTTPS アクセスをサポートする nginx の詳細な説明
  • HTTPS をサポートするために Nginx を構築および構成する方法
  • SSL モジュールを使用して nginx を HTTPS アクセスをサポートするように構成する方法
  • nginx で ssl モジュールを使用して HTTPS サポートを構成する方法の詳細な説明
  • CentOS7 構成 Nginx サポート HTTPS アクセス実装ソリューション
  • Nginxはhttpとhttpsの両方のアクセスをサポートするために同じドメイン名を設定します

<<:  MySQL でグループ化した後、各グループの最大値を取得する詳細な例

>>:  Nest.js パラメータ検証とカスタム戻りデータ形式の詳細な説明

推薦する

MySQL では SQL ステートメントはどのように実行されますか?

目次1. MySQLアーキテクチャの分析1.1 コネクタ1.2 クエリキャッシュ1.3 アナライザー...

Macにmysql5.7.18をインストールする詳細な手順

1. ツール今必要なツールは2つあります: MySQLサーバー (mysql-5.7.18)、MyS...

MySQL マルチマスターと 1 スレーブのデータバックアップ方法のチュートリアル

概要いずれかのデータベースに対する操作は他のデータベースに自動的に適用され、2 つのデータベースのデ...

シンプルなjQuery + CSSを使用してカスタムタグタイトルツールチップを作成します

導入シンプルな jQuery + CSS を使用して、ブラウザのデフォルトの動作を置き換えるカスタム...

シンプルなドラッグ効果を実現するJavaScript

この記事では、簡単なドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

MySQLクエリの文字セットの不一致の問題を解決する方法

問題を見つける最近、仕事で問題が発生しました。MySQL データベースにテーブルを作成するときに、ラ...

Windows 環境での MySQL 8.0 のインストール、設定、アンインストール

ソフトウェアバージョンウィンドウズ: ウィンドウズ10 MySQL: mysql-8.0.17-wi...

Zenコーディングリソース更新機能強化

公式サイト: http://code.google.com/p/zen-coding/ Zen コー...

nginxコンテナ設定ファイルの独立した実装

コンテナを作成する [root@server1 ~]# docker run -it --name ...

JavaScript 関数構文の説明

目次1. 通常の機能2. 矢印関数3. データパケットJSON 4. オブジェクト5. 約束6. 非...

Vueの学習手順

目次1. v-text (v-instruction name = "variable&q...

CSSメディアクエリのアスペクト比を小さくする方法

CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...

ユーザーのニーズがマーケティング指向のデザインにつながる

<br />それぞれのトピックについて、チーム内でメールで議論します。議論が白熱するにつ...

CSS 変数に基づくテーマ切り替えに最適なソリューション (推奨)

この要件を受け取ったとき、Baidu は、CSS リンクの置き換え、className の変更、le...