2

ショッピング カートを設定する Web アプリケーションがあります。このアプリケーションは、それぞれが独自のドメインを持つさまざまな Web サイトにサービスを提供します。仮想ホストは、各ドメインを Tomcat 6 サーバーに転送し、その特定の Web サイトの静的リソースへのパスを設定するために使用されます。これらの静的リソースは Web アプリケーションに保存できないため、サーバーに保存され、Apache を介して提供されます。

最初にコンテキスト ルートで JkMount を使用し、[P, L] を使用して URL 書き換えを行い、URL からコンテキスト パス "mywebapp" を取得します。そのため、誰かがこのアプリケーションにアクセスするときにsomedomain.com、Web アプリケーションが処理するドメインではsomedomain.com/mywebapp/store/cart なく、ブラウザ見somedomain.com/store/cartます。これまでのところ、これは非常にうまく機能しています。問題は、すべてのリクエストでセッションがリセットされ、その理由がわからないことです。

サービス提供のフロント エンドから apache を削除すると、セッションはリセットされず、正常に動作します (予想どおり)。しかし、セッションを失うことなくアプリケーションに転送するように仮想ホストを設定することはできないようです。私はこの問題について多くのことを読みましたが、私の専門は JavaEE であり、Apache Web サーバーについての知識はほとんどありません。そのため、修正の調査を開始する方法さえわかりません。

ProxyPassing と呼ばれるものについて聞いたことがありますが、それが何を意味するのか、どのように機能するのかはわかりません。私が見たほとんどの例では、ドメインを追加する Tomcat server.xml に変更が加えられています。これは、ドメイン (一致する仮想ホスト) が動的に追加され、Apache を再起動できますが、JavaEE を再起動できないため、実際には実行できません。新しいサイトが追加されるたびにアプリケーション。

これを修正するためのアイデア、または根本的な原因にたどり着くためのアイデアはありますか? 代替アプローチはありますか?

UDPATE : 動的 Web サイトの 1 つに仮想ホスト エントリを投稿します。

    <VirtualHost *:80>
    ServerAdmin test@test.com
    DocumentRoot "C:/wamp/www"
    ServerName jawesome.com
    ServerAlias www.jawesome.com
    ErrorLog "logs/jawesome_com-error.log"
    CustomLog "logs/jawesome_com-access.log" common

    Alias /files/ "C:/static/1/uploaded_files/"
    <Directory "C:/static/1/uploaded_files">
                Options FollowSymLinks Indexes MultiViews
                Order allow,deny
                Allow from all
    </Directory>

    JkMount /webapp ajp13
    JkMount /webapp/* ajp13

    RewriteEngine on
    #RewriteLogLevel 9
    #RewriteLog "/usr/local/apache/logs/testrewrite.log"

    RewriteCond %{REQUEST_URI} !^/(webapp/.*|files/.*)$
    RewriteRule ^/(.*)$ /webapp/$1 [P,L]
</VirtualHost>
4

2 に答える 2

2

JSESSIONID Cookie から削除するPath必要があります。1 つのオプションは、Tomcat セットアップでそれを削除することです。emptySessionPath="true"AJP コネクタに追加します。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" emptySessionPath="true"/>

唯一の問題は、この同じドメインで他のアプリを実行している場合、それらのアプリがこのセッション ID を共有することです。しかし、あなたの設定には何も表示されません。

于 2011-03-08T14:15:02.570 に答える
0

私は、それぞれ独自の認証メカニズムを備えた複数のJavaWebアプリケーションを管理しているチームに所属しています。いくつかのApacheサーバーの負荷が分散されており、ProxyPassを使用してトラフィックをバックエンドWebアプリに転送しています。これまでのところ、ProxyPassはうまく機能します。

これは、Tomcatサーバーで実行されている「mywebapp」との間の着信要求をプロキシする例です。

<VirtualHost *:80>
ServerName somedomain.com
    ProxyRequests Off
<Proxy *>
    Order deny,allow
        Allow from all
</Proxy>

ProxyPass /mywebapp http://tomcat-server:8080/mywebapp
ProxyPassReverse /mywebapp http://tomcat-server:8080/mywebapp
<Location />
    Order allow,deny
    Allow from all
</Location>
...
# can put rewrite rules here
...
</VirtualHost>

また、書き換えルールを使用しており、このようなプロキシパス定義で正常に機能します。

これがお役に立てば幸いです。

于 2011-03-08T02:01:27.790 に答える