Apacheでhttpとhttpを簡単に切り替えるにはどうすればいいですか?
YMUシステムでは、Apache 2.xをフロントエンドWebサーバとして使用し、静的コンテンツの保存と取得、およびバックエンドWebサーバ(Tomcat)への動的コンテンツの転送に使用します.同時にApache 2.xもTomcatサーバ間の負荷イコライザを負担する.
パフォーマンスの観点から、YMUシステムのほとんどのページはhttpプロトコル伝送を採用している.登録、ログイン、パスワードの変更などのセキュリティ要件の高いページでは、httpsプロトコルを使用して転送する必要があります.
httpプロトコルとhttpプロトコルの間でどのように変換しますか?最も直接的な方法は絶対経路を採用することであり,この方法の利点は間接的明瞭であり,欠点は移植性が悪いことである.比較的良い方法は、Apacheのrewriteモジュールを使用して相対パスを変換し、プロトコル変換の目的を達成することである.
http/http切り替えに関する説明は、Apacheの公式ドキュメントにあります.
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を変更します.
ははは、大功が成し遂げられた!
パフォーマンスの観点から、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の後に増加すると仮定します.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]
次のようになります.
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]
注意:
4. また、ルールに従ってページのURLを変更します.
ははは、大功が成し遂げられた!