Nginx+tomcatでhttps化した後に400 Bad Requestが発生する問題
会社のソフトウェア製品は二次元コードに基づいているため、あなたはWeChatを使用してコードをスキャンしてOPENIDフォームを取得し、ビジネスを開始する必要があり、その後パパTXは12月末前にすべてのhttpプロトコルページにアクセスできなくなります通知を発行したので、ワイルドカードSSL証明書の非情な購入、ここで簡単に説明しますnginx + tomcat構成httpsプロセスとは、問題が発生しました。
システム環境 セントス6.8
ソフトウェアバージョン:nginx (1.12.1) tomcat (7.0.78)
nginxとtomcatのインストールはここでは割愛させていただきますので、さっそく本題に入りましょう。
三流運用保守と言われる私にとっては、httpsの設定も初めてなので、いろいろと落とし穴があり、数日かけて自分で情報を確認し、プロジェクトの本番環境を整えました
この会社のプロジェクトは一般的にバックエンドとWAPサイドで構成されており、通常は2つのtomcatを使って別々にデプロイしますが、ユーザー数が少ないプロジェクトでは1つのtomcat内にデプロイすることもあります。
nginxのSSL設定は以下の通りです。
## メインプロジェクトの設定
サーバー
<未定義
は443をリッスンします。
sslをオンにします。
サーバー名 test-2.****.com;
ルート /www/html;
index index.html index.htm;
ssl_certificate /etc/nginx/cert/214334620590810.pem;
ssl_certificate_key /etc/nginx/cert/214334620590810.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4.AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2。
ssl_prefer_server_ciphers をオンにします。
は、/etc/nginx/default.d/*.confをインクルードします。
場所 / {
<未定義
proxy_pass http://127.0.0.1:8083;
proxy_redirectをオフにする。
proxy_set_header ホスト $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}.
}
##http 強制的にhttpsへジャンプ
サーバ {
<未定義
は80を聴く。
サーバー名 test-2.****.com;
return 301 https://$server_name$request_uri;
}
この部分の設定は基本的にこれで、sslの部分はアリユンの設定ドキュメントを直接参照し(証明書はアリユンで直接購入しているので、サーバーも何もかもアリユンのもの)、強制ジャンプはその後に行います。
tomcatの設定は非常に間抜けです!
tomcat6 のデプロイメントを使用している古いプロジェクトがたくさんありますが、以前の開発者のほとんどが退職してしまったため、tomcat7 以上のデプロイメントに切り替えるとエラーが報告されます。
もちろんhttpsの設定もうまくいかなかったので、tomcat7の設定について本題を説明します。
(注意!この設定はtomcat 6には適用されません!)
tomcatの設定ファイルserver.confの変更についてWebで情報を調べ、開発者のアドバイスを聞きながら変更した結果 修正後 以下のように読み取れます。
......
<Connector port="8095" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
proxyPort="443"
URIEncoding="UTF-8" />
......
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />
......
修正後の tomcat と nginx の再起動は問題なく、プロジェクトを分けて展開した tomcat も元のドメインにアクセスすると正常に https に飛びますが、問題は tomcat が 2 つのプロジェクトを展開した場合、アクセスすると 400 Bad Request というエラーが発生することです!
例えば、元のアクセス test.***.com/manage は正常にアクセスできますが、https の設定後、ブラウザが直接 test.***.com/manage ドメイン名を入力すると自動的に http://test.haha.com:443/manage/ になり、400 Bad Request と表示されます。もっとすごいのは test.***.com/manage/ (最後にスラッシュがある!)と入力しても正常に https にジャンプできる場合ですが、私は不可解です〜。
私は初心者なので、nginxの設定の問題が疑われているので、回り道の多くは、研究nginxの設定の一日後にうっかりtomcat server.conf元の設定とないproxyPort = "443" この行、tomcatを再起動後にこの行を削除しようとする心理を持って、問題は解決されます〜。
なぜだか、よくわからないけど。
関連
-
[解決済み】Raspberry Piサーバーに対して小規模なDDoS攻撃を実行する【終了しました
-
[解決済み】Docker Nginxが停止しました。[emerg] 1#1: ホストがアップストリームで見つかりません。
-
[解決済み] nginxリクエストで許容されるurlの長さを設定する方法 (エラーコード: 414, uri too large)
-
ブラウザエラー net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK) 解決策
-
Nginxエージェントのリソース: net::ERR_NAME_NOT_RESOLVED の読み込みに失敗しました。
-
nginx スタートアップ・エラー。nginx.serviceのジョブは、制御プロセスがエラーコードで終了したため失敗しました。
-
linux システムでの Nginx のインストール: make: *** `install' をターゲットとするルールがありません。停止します。
-
OSError: [Errno 98] アドレスはすでに使用中です。
-
NginxのRequest Entity Too Largeの解決法
-
Nginx] エラー413 Request Entity Too Largeの解決方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] nginxのエラー "conflicting server name "を無視する [終了しました]。
-
[解決済み] どのヘッダテストツールでもnginxが400 bad request headersを投げるのを修正する方法は?
-
[解決済み] Certbot /.well-known/acme-challenge
-
[解決済み] Nginx 無効なPID番号
-
[解決済み] NGINXを設定して、サブルートで場所(同じサーバー名の下)に応じて異なるシングルページアプリケーション(SPA...すなわち静的ファイル)をデプロイする方法
-
[解決済み] バックグラウンドでリクエストするようにnginxを設定する
-
Gitはいくつかのバグフィックスを行いました。マージされていないファイルがあるため、Pullができない。
-
nginxの問題解決:上流からの応答ヘッダーの読み込み中に上流が接続を早々に切断した
-
アップストリームエラーの読み込み中に、アップストリームが接続を早々に切断した