Docker nginx + https サブドメイン設定の詳細なチュートリアル

Docker nginx + https サブドメイン設定の詳細なチュートリアル

今日はたまたま友人のサーバーの移転を手伝うことになり、サーバーの基本的な設備の設定を行ったのですが、設定中にいくつか問題が発生しました。現在の Google Chrome / Safari では http を https に強制変換してしまうことが判明しました。

最初は何が起こっているのかわからず、ドメイン名のレコードをリセットしました。さらに、pingを実行すると、ドメイン名をサーバーアドレスに正常に解決できます。そこで、http -> httpsのプロセスに注目しました。WeChatの組み込みブラウザを使用して、httpドメイン名にアクセスできることがわかりました。証明書を設定します。

ここで使用する証明書も無料の acme.sh で、github で入手できます。まずはダウンロードしてみましょう。

カール https://get.acme.sh | sh

次にbashをリロードします

ソース ~/.bashrc

このとき、 acme.sh --helpと入力すると、関連する出力を明確に確認できます。

acmeの設定

インストールが完了したら、証明書の作成を開始します。ここでは、DNS API を直接使用して、ドメイン名の検証やその他の操作を完了します。

詳細については、dnsapiを参照してください。

ゴダディを例に挙げてみましょう

まず、端末設定ファイル(サービスプロバイダーから取得)にキーとシークレットを設定します。

GD_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" をエクスポートします
GD_Secret="asdfsdfsdfsdfdfsdf" をエクスポートします

次に、コマンドを直接入力します

acme.sh --issue --dns dns_gd -d demo.com -d *.demo.com

ここで証明書ファイルが生成されます。通常は /root/.acme.sh/xxx.com/xxx.com.cer に保存されます。

Dockerボリュームのメンテナンスを容易にするために、これらの証明書を保存するためのフォルダを再作成します。

mkdir /opt/www/nginx/ssl

もう一度コマンドを入力して、証明書をsslディレクトリに配置します。

acme.sh --install-cert -d demo.com \
--key-file /opt/www/nginx/ssl/demo.com.key \
--fullchain-file /opt/www/nginx/ssl/demo.com.crt\

この時点で、/opt/www/nginx/sslの下に2つのファイルが表示されます。

この時点で、ドメイン名証明書の構成は完了です。次にdocker-compose.ymlを設定します

docker-compose を使用してコンテナを作成する

バージョン: '3.5'
サービス:
 アプリ:
  イメージ: nginx:1.19.8
  ポート:
   - 80:80
   -443:443
  ボリューム:
   - ./conf/nginx.conf:/etc/nginx/nginx.conf # 設定ファイル - /opt/www:/opt/www # プロジェクトディレクトリ - /opt/www/nginx/ssl:/opt/www/ssl # 証明書ファイル restart: always
ネットワーク:
 デフォルト:
  名前: デフォルトネットワーク

ymlファイルを書いたら、nginxの設定をしましょう。nginxの設定をする前に、まず鍵交換ファイルDHEパラメータファイルを設定する必要があります。

openssl dhparam -out /opt/www/nginx/ssl/dhparam.pem 2048

次に、 /.well-known/acme-challengeを設定します。このディレクトリはlet's encrypt最初にこのディレクトリを設定する必要があります。

まずディレクトリmkdir /opt/www/letsencryptを作成し、次に nginx 設定ファイルで次のサーバーを設定します。

サーバー{
    80 default_server をリッスンします。
    リッスン [::]:80 default_server;
    サーバー名_;

    場所 /.well-known/acme-challenge {
        ルート /opt/www/letsencrypt;
    }

    位置 / {
        301 https://$host$request_uri を返します。
    }
 }

上記の構成により、すべての http リクエストが https にリダイレクトされます。

次に独自のドメイン名を設定します。

サーバー{
    443 ssl http2 default_server をリッスンします。
    listen [::]:443 ssl http2 default_server;

    サーバー名 demo.com;

    ルート /opt/www/html;
    インデックス index.html index.htm index.php;

   # Diffie-Hellman 鍵交換 ssl_dhparam /opt/www/ssl/dhparam.pem;

    ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
    SSL_CIPHERS 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ecdsa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa- -RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-EECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHA-ECDHA HE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256:AES256-SMHA384 56-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!dss ';
    ssl_prefer_server_ciphers をオン;

    ssl_session_cache 共有:SSL:50m;
    ssl_session_timeout 1日;


    #証明書ファイル ssl_certificate /opt/www/ssl/demo.com.crt;
    ssl_certificate_key /opt/www/ssl/demo.com.key;

    # HSTS プリロード サポートを有効にする add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; 
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    アクセスログ /var/log/nginx/demo.com.access.log;
    error_log /var/log/nginx/demo.com.error.log;
 }

設定が必要なサブドメインがある場合は、上記の設定をコピーして、これらの場所を変更するだけです。その他の設定は変更せずにそのままにしておきます。 ドメイン名サービスプロバイダーもAレコードを追加する必要がある

サーバー{
    listen 443 ssl http2; #ここではデフォルトのサーバーは存在しないことに注意してください 
    listen [::]:443 ssl http2; #ここではデフォルトのサーバーは存在しないことに注意してください

    server_name example.demo.com; #サブドメイン access_log /var/log/nginx/example.demo.com.access.log;
    error_log /var/log/nginx/example.demo.com.error.log;
 }

最終的な nginx conf は次のとおりです。

イベント {
ワーカー接続 1024;
}

http {
 mime.types を含めます。
 デフォルトタイプ アプリケーション/オクテットストリーム;

 ファイル送信オン;

 キープアライブタイムアウト300;
 
 サーバー{
    80 default_server をリッスンします。
    リッスン [::]:80 default_server;
    サーバー名_;

    場所 /.well-known/acme-challenge {
        ルート /opt/www/letsencrypt;
    }

    位置 / {
        301 https://$host$request_uri を返します。
    }
 }
 
 サーバー{
    443 ssl http2 default_server をリッスンします。
    listen [::]:443 ssl http2 default_server;

    サーバー名 demo.com;

    ルート /opt/www/html;
    インデックス index.html index.htm index.php;

   # Diffie-Hellman 鍵交換 ssl_dhparam /opt/www/ssl/dhparam.pem;

    ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
    SSL_CIPHERS 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ecdsa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa- -RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-EECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHA-ECDHA HE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256:AES256-SMHA384 56-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!dss ';
    ssl_prefer_server_ciphers をオン;

    ssl_session_cache 共有:SSL:50m;
    ssl_session_timeout 1日;


    #証明書ファイル ssl_certificate /opt/www/ssl/demo.com.crt;
    ssl_certificate_key /opt/www/ssl/demo.com.key;

    # HSTS プリロード サポートを有効にする add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; 
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    アクセスログ /var/log/nginx/demo.com.access.log;
    error_log /var/log/nginx/demo.com.error.log;
 }

}

この時点で、設定は基本的に完了です。

次のコマンドを実行します

docker-compose -f docker-compose.yml アップ -d

dockerでnginxの+httpsマルチドメイン名設定を完了できます

これで、docker nginx + https サブドメイン構成の詳細なチュートリアルに関するこの記事は終了です。より関連性の高い docker nginx https 構成コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker を使用して Nginx をインストールし、ポート転送の問題と解決策を構成する
  • DockerはNginxをデプロイし、リバースプロキシを構成する
  • docker に基づいて nginxssl 設定を開始する
  • Dockerでnginxをデプロイし、設定ファイルを変更する方法
  • nginxはdockerコンテナ内に設定ファイルを自動的に生成します
  • Docker での nginx プラグインの設定とファイルの詳細な説明

<<:  JavaScript は div マウス ドラッグ効果を実装します

>>:  ウェブデザインと制作の一般的な原則をまとめる

推薦する

CSSスプライトの応用の詳細な説明

CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...

Docker基盤技術の適用に関する詳細な説明 名前空間Cgroup

Docker の基盤技術: Docker の基盤となる 2 つのコア テクノロジーは、名前空間とコ...

Faint: 「Web2.0 を使用して標準に準拠したページを作成する」

今日、ある人がウェブサイト開発プロジェクトについて話をしてくれました。具体的な要件について話すと、「...

Maxwell を使用して MySQL データをリアルタイムで同期する方法

目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...

複数のフィールドをグループ化するMySQLグループ

日常の開発タスクでは、データ テーブル内のグループ化フィールドに基づいて統計データを取得するために、...

HTML テーブル マークアップ チュートリアル (9): セル間隔属性 CELLSPACING

テーブルがコンパクトになりすぎないように、テーブル内のセル間に一定の距離を設定できます。基本的な構文...

Mysql での結合操作

結合の種類1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコー...

ウェブページの要素の検査とソースコードの表示の違いについて

Chrome ブラウザで Web ページを開くと、ページを右クリックすると 2 つの非常によく似たオ...

Dockerコンテナを使用してホストネットワークにアクセスする方法

最近、nginx をリバース プロキシとして使用し、docker で nginx を実行するシステム...

Nest.js 認証検証方法の例

目次0x0 はじめに0x1 RBAC 実装0x2 クレームベースの承認0x3 統合 CASL 0x4...

Vue3.0のさまざまなリスニング方法の包括的な概要

目次リスナー1.ウォッチエフェクト2.見る1.1 聴くための最初の方法1.2 聞く2つ目の方法1.3...

el-select のスタイルを変更する方法の詳細な説明: popper-append-to-body と popper-class

elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...

JavaScript で円形のプログレスバー効果を実装する

この記事では、円形のプログレスバー効果を実現するためのJavaScriptの具体的なコードを参考まで...

Ubuntu環境でのPHP関連のパスと変更方法

Ubuntu環境におけるPHP関連パスPHP パス /usr/bin/php phpize5 /us...