事前に一言: 突然、複数のドメイン名のアクセスを https に転送するというタスクを受け取りました。実際、Niginx の使い方は非常に簡単で、ドキュメントも充実しています (Tencent Cloud にしろ Alibaba Cloud にしろ)。この落とし穴に陥った理由は、Niginx サーバーに不慣れで、回り道をしたためです。 1. 迂回: Tomcat は SSL をサポートしています Tencent Cloud Tomcat サーバー証明書の構成 server.xmlファイルを変更する <コネクタ ポート="443" プロトコル="org.apache.coyote.http11.Http11NioProtocol" SSL 有効 = "true" スキーム="https" セキュア="true" keystoreFile="conf\ssl\生成された証明書名 (相対パスを使用します.jks)" キーストアタイプ="JKS" keystorePass="証明書に対応するパスワード" クライアント認証="false" sslプロトコル="TLSv1+TLSv1.1+TLSv1.2" 最大スレッド数="150" 暗号="TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA256"> </コネクタ> <!-- ポート 8009 で AJP 1.3 コネクタを定義します --> <コネクタ ポート="8209" プロトコル="AJP/1.3" リダイレクト ポート="8443" シークレット必須="" useBodyEncodingForURI="true" URIEncoding="UTF-8"/> keystoreType="JKS": この設定はAlibaba Cloudとは異なるので、変更することを忘れないでください。 <Engine defaultHost="自分のドメイン名" name="Catalina" jvmRoute="tomcat1" URIEncoding="UTF-8"> <クラスタークラス名="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> <レルムクラス名="org.apache.catalina.realm.LockOutRealm"> <レルム クラス名="org.apache.catalina.realm.UserDatabaseRealm" リソース名="UserDatabase"/> </レルム> <Host name="自分のドメイン名" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve クラス名="org.apache.catalina.valves.AccessLogValve" ディレクトリ="logs" プレフィックス="localhost_access_log" サフィックス=".txt" パターン="%h %l %u %t "%r" %s %b" /> </ホスト> </エンジン> 同僚から設定だけで済むと聞きました。同じことが起きました。サーバーを起動したらポート443も占有されてしまいました。本当に落とし穴でした。転送が不要な場合は、設定を変更できます。 nginx の起動に失敗しました。0.0.0.0:443 への bind() が失敗しました (10013: アクセス権限によって禁止されている方法でソケットにアクセスしようとしました 2. 話を元に戻しましょう 2.1 要件の概要 サーバー(Tencent Cloud サーバーの IP アドレス)に複数のサービスが展開されており、異なるドメイン名で異なるサービスにアクセスする必要がある場合、Nginx プロキシを介してドメイン名転送を実行し、SSL モジュールを構成することで https アクセスを実現できます。 (私のサーバーは Windows システムを使用しています。SSL モジュールがない場合は、自分で有効にする必要があります。デフォルトでサポートされています。) 1 台のサーバーに同時に 3 つのサービス (サービス A、サービス B、サービス C) を展開します。サービスは、次のドメイン名で構成する必要があります。
サービスには https 経由でアクセスし、http リクエストは https にリダイレクトされます。 2.2 サービスプロキシ設定 ポート 443 でリッスンするように Nginx を構成します (== Tomcat の構成のために長い間ここで行き詰まりましたが、失敗しました ==)、ドメイン名転送と https アクセスを実装します。この例で使用される証明書は、CRT 形式の証明書です。 (1)サービスAの構成 サーバー{ listen 443 ssl; #リッスンポート、Nginx1.5以降ではserver_nameの使用を推奨 pangsir01.domain.com; #リクエストドメイン名 ssl_certificate ssl/certificate name A.crt; #crt証明書パス、保存場所 Nginxのconf/sslフォルダ、絶対パスを使用できます ssl_certificate_key ssl/certificate name A.key; #crt証明書キーパス ssl_session_timeout 5m; #セッションタイムアウト ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #暗号化アルゴリズム ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSLプロトコル #すべてのリクエストを傍受する location / { proxy_http_version 1.1; #プロキシが使用するhttpプロトコル proxy_set_header Host $host; #ヘッダーにリクエストホスト情報を追加 proxy_set_header X-Real-IP $remote_addr; #ヘッダーにリクエストソースIP情報を追加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #プロキシレコードを追加 proxy_pass http://127.0.0.1:8001; #サービスAのアクセスアドレス} } (2)サービスBの構成 サーバー{ listen 443 ssl; #リッスンポート、Nginx1.5以降ではserver_nameの使用を推奨 pangsir02.domain.com; #リクエストドメイン名 ssl_certificate ssl/証明書名 B.crt; #crt証明書パス、保存場所 Nginxのconf/sslフォルダ、絶対パスを使用できます ssl_certificate_key ssl/証明書名 B.key; #crt証明書キーパス ssl_session_timeout 5m; #セッションタイムアウト ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #暗号化アルゴリズム ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSLプロトコル #すべてのリクエストを傍受する location / { proxy_http_version 1.1; #プロキシが使用するhttpプロトコル proxy_set_header Host $host; #ヘッダーにリクエストホスト情報を追加 proxy_set_header X-Real-IP $remote_addr; #ヘッダーにリクエストソースIP情報を追加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #プロキシレコードを追加 proxy_pass http://127.0.0.1:8002; #サービスBのアクセスアドレス} } (3)サービスCの構成 サーバー{ listen 443 ssl; #リッスンポート、Nginx1.5以降ではserver_nameの使用を推奨 pangsir03.domain.com; #リクエストドメイン名 ssl_certificate ssl/証明書名 C.crt; #crt証明書パス、保存場所 Nginxのconf/sslフォルダ、絶対パスを使用できます ssl_certificate_key ssl/証明書名 C.key; #crt証明書キーパス ssl_session_timeout 5m; #セッションタイムアウト ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #暗号化アルゴリズム ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSLプロトコル #すべてのリクエストを傍受する location / { proxy_http_version 1.1; #プロキシが使用するhttpプロトコル proxy_set_header Host $host; #ヘッダーにリクエストホスト情報を追加 proxy_set_header X-Real-IP $remote_addr; #ヘッダーにリクエストソースIP情報を追加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #プロキシレコードを追加 proxy_pass http://127.0.0.1:8003; #サービスBのアクセスアドレス} } 2.3 HTTPリクエストの自動転送 サーバー構成を追加し、ポート80をリッスンし、すべてのドメイン名をhttpsにリダイレクトします。 サーバー{ listen 80; #リッスンポート server_name a.domain.com b.domain.com c.domain.com; #ドメイン名を要求 return 301 https://$host$request_uri; #https アクセスにリダイレクトします。 } ここで私のニーズは満たされました。次のコンテンツは拡張コンテンツです。記録してください。 3. WebSocketのSSL設定 サービス A で websocket が使用されている場合 (アクセス インターフェイスが /websocket)、ws プロトコルを wss プロトコルに置き換える必要があります。サービス A のサーバー構成に場所構成を追加して、別のプロキシの websocket をインターセプトできます。 変更後のサービス A の構成: サーバー{ listen 443 ssl; #リッスンポート server_name pangsir01.domain.com; #リクエストドメイン名 ssl_certificate ssl/証明書名 A.crt; #crt証明書パス ssl_certificate_key ssl/証明書名 A.key; #crt証明書キーパス ssl_session_timeout 5m; #セッションタイムアウト ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #暗号化アルゴリズム ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #SSLプロトコル #すべてのリクエストを傍受 location / { proxy_http_version 1.1; #プロキシが使用するhttpプロトコル proxy_set_header Host $host; #ヘッダーにリクエストホスト情報を追加 proxy_set_header X-Real-IP $remote_addr; #ヘッダーにリクエストソースIP情報を追加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #プロキシレコードを追加 proxy_pass http://127.0.0.1:8001; #サービスAのアクセスアドレス} #Websocketリクエストの場所をインターセプトする /websocket { プロキシパス http://127.0.0.1:8001; プロキシ_http_バージョン 1.1; proxy_set_header アップグレード $http_upgrade; proxy_set_header 接続「アップグレード」; } } Nginxドメイン名転送httpsアクセスの実装に関するこの記事はこれで終わりです。より関連性の高いNginxドメイン名転送httpsアクセスコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL の group by と order by を一緒に使用する方法
>>: WeChat ミニプログラム 宝くじ番号ジェネレーター
MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...
VMware で Linux 仮想マシンを作成し、VMware と仮想マシンのネットワークを設定する...
目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...
<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...
1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...
圧縮アップロード画像、スクラッチカード、ポスター作成、チャートプラグインなど、フロントエンド開発にお...
この記事では、写真の自動再生効果を実現するためのJSの具体的なコードを参考までに紹介します。具体的な...
Linux システムでは、ユーザーが手動で作成したさまざまなアカウントに加えて、システムまたはプログ...
序文MRR は Multi-Range Read の略で、ランダム ディスク アクセスを削減し、ラン...
昨日、円形のプログレスバー (Vue 円形プログレスバーを参照してください) についてブログを書きま...
「通常 1em=16px」と言うのはなぜですか?ユーザーのブラウザによってレンダリングされるデフォル...
1. mycatとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベ...
序文JS の this ポインターは、初心者にとって常に頭痛の種でした。今日は、これが地面に落ちたと...
序文「High Performance MySQL」では、インデックスでは範囲フィールドの後の部分が...
1. キャッシュ - クエリキャッシュ次の図は、MySQL 公式サイトから提供されています: MyS...