Nginx の構成と HTTP 実装コード分析との互換性

Nginx の構成と HTTP 実装コード分析との互換性

OpenSSL を使用して SSL キーと CSR ファイルを生成する

HTTPS を設定するには、秘密鍵 example.key ファイルと証明書 example.crt ファイルが必要です。証明書ファイルを申請する場合は、example.csr ファイルが必要です。OpenSSL コマンドを使用すると、example.key ファイルと証明書 example.csr ファイルを生成できます。

CSR: 証明書署名要求。申請者の DN (識別名) と公開キー情報を含む証明書署名要求ファイル。サードパーティの証明機関が証明書に署名するときに提供する必要があります。 CSR を受け取った後、証明機関はルート証明書の秘密キーを使用して証明書を暗号化し、証明書の暗号化情報と申請者の DN および公開キー情報を含む CRT 証明書ファイルを生成します。

キー: 証明書申請者の秘密キー ファイル。証明書内の公開キーとペアで使用されます。HTTPS の「ハンドシェイク」通信プロセスでは、証明書の公開キーによって暗号化されたクライアントから送信された乱数情報を復号化するために秘密キーが必要です。これは、HTTPS 暗号化通信プロセスで非常に重要なファイルであり、HTTPS を構成するときに使用されます。

OpenSSl コマンドを使用して、システムの現在のディレクトリに example.key ファイルと example.csr ファイルを生成します。

openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=ShenZhen/L=ShenZhen/O=Example Inc./OU=Web Security/CN=example.com"

上記コマンドの関連フィールドの意味は次のとおりです。

  • C:国、ユニットが所在する国。2桁の国名略称。例:CNは中国
  • ST フィールド: 州/県、ユニットが所在する州または県
  • L フィールド: 地域、ユニットが所在する市および郡
  • O フィールド: 組織、この Web サイトの組織名。
  • OU フィールド: 組織単位、下位部門の名前。証明書の種類、証明書製品名、認証の種類、検証内容など、その他の証明書関連情報を表示するためにもよく使用されます。
  • CN フィールド: 共通名、Web サイトのドメイン名。

csr ファイルを生成したら、それを CA 組織に提供します。署名に成功すると、example.crt 証明書ファイルが取得されます。SSL 証明書ファイルを取得したら、Nginx 構成ファイルで HTTPS を構成できます。

HTTPSを構成する

基本設定

HTTPS サービスを有効にするには、構成ファイルの情報ブロック (サーバー ブロック) で、listen コマンドの ssl パラメータを使用し、次に示すようにサーバー証明書ファイルと秘密鍵ファイルを定義する必要があります。

	
サーバー{
  #ssl パラメータ listen 443 ssl;
  サーバー名 example.com;
  #証明書ファイル ssl_certificate example.com.crt;
  #秘密鍵ファイル ssl_certificate_key example.com.key;
  ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  #...
}

証明書ファイルは、サーバーに接続している各クライアントに公開エンティティとして送信されます。秘密鍵ファイルは、セキュリティ エンティティとして、特定の権限制限のあるディレクトリ ファイルに保存し、Nginx メイン プロセスにアクセス権があることを確認する必要があります。

次に示すように、秘密鍵ファイルは証明書ファイルと同じファイルに配置することもできます。

ssl_certificate www.example.com.cert;
ssl_certificate_key www.example.com.cert;

この場合、証明書ファイルの読み取り権限も制限する必要があります。これにより、証明書と秘密鍵が同じファイルに保存されていても、クライアントには証明書のみが送信されるようになります。

ssl_protocols コマンドと ssl_ciphers コマンドを使用すると、接続を SSL/TLS の拡張バージョンとアルゴリズムのみに制限できます。デフォルト値は次のとおりです。

ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

これら 2 つのコマンドのデフォルト値は何度か変更されているため、DH アルゴリズムの定義など、定義する必要がある追加の値がない限り、明示的に定義することはお勧めしません。

#DHファイルを使用する
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
#アルゴリズムを定義する
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
#...

HTTP を HTTPS に強制する

また、サーバー ブロックを構成し、ポート 80 をリッスンし、書き換えを追加します。

サーバー{ 
  聞く 80;
  server_name サーバーのIP;   
  ^(.*)$ https://$host$1 permanent を書き換えます。#http を https に強制します
}

サーバー構成リファレンス

サーバー{ 
  聞く 80;
  server_name サーバーのIP;   
  ^(.*)$ https://$host$1 permanent を書き換えます。#http を https に強制します
}
サーバー{
  charset utf-8; #サーバーエンコーディング listen 443 ssl; #リッスンアドレス server_name server ip; #証明書にバインドされたウェブサイトのドメイン名 server_tokens off; #nginx のバージョン番号を非表示 #ssl 構成 ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; #証明書の公開鍵 ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; #証明書の秘密鍵 ssl_session_timeout 5m;
  ssl_ciphers SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers をオフ;
  ssl_dhparam /etc/nginx/dhparams.pem;  

  #リクエスト ヘッダー add_header Strict-Transport-Security max-age=63072000;
  add_header X-Frame-Options SAMEORIGIN;
  add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" 常に;
  add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
  add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  add_header Set-Cookie "HttpOnly";
  add_header Set-Cookie "Secure";
  
  #リクエストメソッドの制限## これらのリクエストメソッドのみを許可します ##
   $request_method !~ ^(GET|POST|DELETE|PUT|PATCH)$ の場合 {
     444を返します。
   }
  
  #アクセスパスの一致する場所 / {
    root /usr/share/nginx/html; #サイトディレクトリインデックス index.html index.htm;
  }
  場所 /test/ {
     proxy_pass http://127.0.0.1:8100/; #ローカルポート8100を転送
  }
 
  #パスへのアクセスを禁止# location /dirdeny {
  # すべて拒否;
  # 403 を返します。
  #}

  #エラーページの構成 error_page 502 503 504 /error502.html;
    場所 = /error502.html{
    ルート /usr/share/nginx/html;
  }
  エラーページ 500 /error.html;
   場所 = /error.html{
      ルート /usr/share/nginx/html;
    }
  エラーページ 404 /notfind.html;
   場所 = /notfind.html{
      ルート /usr/share/nginx/html;
    }
}

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

以下もご興味があるかもしれません:
  • nginx 基本チュートリアル
  • Nginx 設定入門チュートリアル
  • Windows での nginx HTTP サーバーの入門チュートリアル
  • Nginx ロードバランシングとは何か、そしてそれをどのように設定するか
  • Nginx 最適化サービスで Web ページ圧縮を実装する方法
  • nginx を最適化する 6 つの方法
  • Nginx がフロントエンド リソースへのクロスドメイン アクセスの問題をどのように解決するかの詳細な説明
  • proxy_pass を設定した後に Nginx が 404 を返す問題を解決する
  • Nginx をベースに特定の IP への短期アクセス数を制限する
  • Nginx サービス クイック スタート チュートリアル

<<:  MySQL での %% のようなファジークエリの実装

>>:  HTML テーブル マークアップ チュートリアル (4): 境界線の色属性 BORDERCOLOR

推薦する

MySQL パーティションテーブルの正しい使用方法

MySQL パーティションテーブルの概要数億、あるいは数十億ものレコードを格納するテーブルに遭遇する...

Nginx での Frp による https への強制リダイレクト設定の詳細な説明

自宅のルーターが300Mの帯域幅を80Mに強制的に減らしたため、3205Uソフトルーターを購入しまし...

mysqldump でデータベースをバックアップするときに特定のライブラリを除外する例

例: mysqldump –all-databases を使用すると、すべてのライブラリがエクスポー...

Vue で $attrs と $listeners を使用するチュートリアル

目次導入例要約する導入$属性すべての親コンポーネントのプロパティを継承します (props を通じて...

Sublime / vscode による HTML コード生成の迅速な実装

目次基本的なHTML構造div とクラス名のショートカット キーを生成するクラス名を持つdiv ID...

色の16進数カラーコード表表示と16進値の比較表示で簡単に検索できます

さまざまな色の16進コード表[パート1] 赤とピンク、およびそれらの 16 進コード。 #99003...

MySQL 1対多関連クエリのページングエラー問題の解決方法

XML価格照会のクエリデータにはリストが含まれているため、コレクションが必要です <結果マップ...

vue+canvasでタイムラインを描く方法

この記事では、参考までにvueキャンバスのタイムライン描画の具体的なコードを紹介します。具体的な内容...

最新のウェブフロントエンドフレームワーク10選を紹介(翻訳)

Web 開発の世界では、フレームワークは非常に一般的です。新しいフレームワークやテンプレートが毎日の...

JavaScript のアンチシェイクとスロットリングの違いと実装

目次1. 手ぶれ補正2. スロットリング3. まとめ序文:フロントエンド開発者には、次の 2 つの要...

mysql 8.0.19 winx64.zip インストール チュートリアル

この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...

Nginx 経由で Tomcat9 クラスターを構築し、セッション共有を実現する

Nginx を使用して Tomcat9 クラスターを構築し、Redis を使用してセッション共有を実...

MySQL 学習チュートリアル クラスター化インデックス

クラスタリングは、実際には InnoDB データベース エンジンに関連しています。したがって、インデ...

Struts2 ジャンプ後に CSS と JS が無効になる問題の解決策のアイデアと実装手順

struts2 アクションの実行後にジャンプした jsp が表示されると、css が機能しません。問...