事前に一言: 突然、複数のドメイン名のアクセスを 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 ミニプログラム 宝くじ番号ジェネレーター
需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...
目次Vue CLIはVueプロジェクトを構築しますVue プロジェクトをマークダウン エディターに変...
<br />少し前に、ビジネス上の必要性から、ラップトップに Souba をインストール...
ステップ1: システムのアーキテクチャを確認する dpkg --print-architecture...
複数行のテキストがオーバーフローすると省略記号が表示されますこの記事では 2 つの方法を推奨します。...
cmdにnet start mysqlと入力すると、プロンプトが表示されます: サービス名が無効です...
ログローテーションは、Linux システムでは非常に一般的な機能です。ログローテーションは、システム...
今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...
質問1:エラーを報告する書き込み方法: GRANT OPTION を使用して、'123123...
目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...
MySQL 5.7.18 でパスワードを変更する方法: 1. まずMySQLサーバーをシャットダウン...
今夜、数日間悩まされていた問題を解決しました。本当に解決したかどうかはわかりませんが、解決されている...
仕事のプロジェクトのニーズにより、曲の再生が必要となり、さまざまな資料を参考にして、NetEase ...
目次1. 前に書く2. ポップアップウィンドウを実装するためのオーバーレイ2.1 vueページのad...
フロントエンドテストページコード: <テンプレート> <div> <i...