Apacheでhttpとhttpを簡単に切り替えるにはどうすればいいですか?


YMUシステムでは、Apache 2.xをフロントエンドWebサーバとして使用し、静的コンテンツの保存と取得、およびバックエンドWebサーバ(Tomcat)への動的コンテンツの転送に使用します.同時にApache 2.xもTomcatサーバ間の負荷イコライザを負担する.
 
パフォーマンスの観点から、YMUシステムのほとんどのページはhttpプロトコル伝送を採用している.登録、ログイン、パスワードの変更などのセキュリティ要件の高いページでは、httpsプロトコルを使用して転送する必要があります.
 
httpプロトコルとhttpプロトコルの間でどのように変換しますか?最も直接的な方法は絶対経路を採用することであり,この方法の利点は間接的明瞭であり,欠点は移植性が悪いことである.比較的良い方法は、Apacheのrewriteモジュールを使用して相対パスを変換し、プロトコル変換の目的を達成することである.
 
http/http切り替えに関する説明は、Apacheの公式ドキュメントにあります.RewriteEngine on<o:p></o:p> RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L]<o:p></o:p> RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L]<o:p></o:p>
 
httpd.confで直接定義すると、次の問題が発生します.
  • ページでこれらの特殊なURL(login.html:SSL)をクリックすると、ブラウザはプロトコルエラーを報告し、SSLの前の内容(login.html)をプロトコルとしています.
  • 「:」を「」または他の文字に変更すると、httpはhttpに移動できますが、httpはhttpに移動できません.何が原因ですか.多くのドキュメントを見て、rewriteルール設定は仮想ホスト向けであり、443ポートは別の仮想ホストに構成されているため、ルールが失効し、sslプロファイル(httpd-ssl.conf)に転送ルールを設定する必要があります.

  •  
    次に、構成手順を例に挙げて説明します.相対パスurlの後に増加すると仮定します.sslはhttpsプロトコルでurlをロードすることを表す.urlの後ろに_nosslはhttpsページでhttpプロトコルに戻るために使用されます.構成手順は次のとおりです.
     
    1.       Apacheをコンパイルすると、rewriteモジュール(mod_rewrite.so)が生成されます.
    2.       httpd.confにrewriteモジュールをロードし、http->httpsの変換ルールを定義します.
    LoadModule rewrite_module modules/mod_rewrite.so
     

    RewriteEngine On                                                         
    #RewriteLog "/usr/local/apache2/logs/rewrite.log"
    #RewriteLogLevel 10
    RewriteRule ^/(.*)_ssl$ https://%{SERVER_NAME}/$1 [R,L]

    RewriteRule ^/(.*)_nossl$ http://%{SERVER_NAME}/$1 [R,L]
    次のようになります.
  • RewriteEngine On:変換エンジンを開く;
  • RewriteLog:デバッグ用のログファイルを定義します.
  • RewriteLogLevl:ログレベルを設定し、0は出力しないことを示します.数字が大きいほど、出力情報が詳細になります.
  • RewriteRule:
  • の変換ルールを定義します.
  • ^/(.*)_ssl$:で始まるsslの終わり;
  • https://%{SERVER_NAME}/$1:$1はURL中/後と_sslの前の部分の内容;
  • [R,L]:Rはリダイレクトを表す.Lは最後のルールを表し、すなわち条件に合致すれば、次のルールに一致しない.


  • 3.      
    にある
    ssl
    プロファイル
    (conf/extra/httpd-ssl.conf)
    で定義
    https->http
    の変換ルール:
    LoadModule rewrite_module modules/mod_rewrite.so
     

    ……

    RewriteEngine On
    RewriteRule ^/(.*)_nossl$ http://%{SERVER_NAME}/$1 [R,L]


       RewriteRule ^/(.*)_ssl$ https://%{SERVER_NAME}/$1 [R,L]
    注意:
  • sslプロファイルはhttpd.confに含まれますが、LoadModuleは必要です.
  • ...はVirtualHostの内部で定義する必要があります.

  •  
    4.       また、ルールに従ってページのURLを変更します.
     
    ははは、大功が成し遂げられた!