2012-05-18 5 views
1

Я построил установку с Apache HTTP и Tomcat, которые обмениваются данными через mod_proxy. Я вставил конфигурацию, которую я использую ниже. Проблема, которую я испытываю, - потеря сеанса, и я думаю, что это связано с неправильной конфигурацией прокси. Я читал много статей, но до сих пор не могу понять, что я делаю неправильно.Как правильно настроить Apache HTTP - конфигурация Tomcat

httpd.conf:

<VirtualHost MACHINE_IP:80> 
    ServerName www.mydomain.com 
    ProxyRequests Off 
    ProxyPass /apps/my_app http://MACHINE_IP:8080/my_app 
    ProxyPassReverse /apps/my_app http://MACHINE_IP:8080/my_app 
    Header set P3P "CP=\"HONK\"" 
</VirtualHost> 

<VirtualHost MACHINE_IP:443> 
    ServerName www.mydomain.com 
    ProxyRequests Off 
    ProxyPass /apps/my_app https://MACHINE_IP:8443/my_app 
    ProxyPassReverse /apps/my_app https://MACHINE_IP:8443/my_app 

    Header set P3P "CP=\"HONK\"" 
</VirtualHost> 

Tomcat (на MACHINE_IP) работает на обычных портах 8080 и 8843 и настраивается следующим образом (Я думаю, что это конфигурация по умолчанию):

<Server port="8005" shutdown="SHUTDOWN"> 

    <Service name="Catalina"> 

    <Connector port="8080" protocol="HTTP/1.1" 
       connectionTimeout="20000" 
       redirectPort="8443" 
       /> 

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
       maxThreads="150" scheme="https" secure="true" 
       clientAuth="false" sslProtocol="TLS" 
       keystoreFile="cert/tomcat.keystore" 
       keystorePass="password" 
       /> 

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

    <Engine name="Catalina" defaultHost="localhost"> 

     <Host name="localhost" appBase="webapps" 
      unpackWARs="true" autoDeploy="true"> 

     </Host> 
    </Engine> 
    </Service> 
</Server> 

Странно то, что когда я настраиваю любое прокси-имя и proxyPort в server.xml, а также доменное имя для хоста, все перестает работать. Вышеприведенный пример server.xml работает, но по какой-то причине происходит потеря сеанса.

ответ

3

Вы видите потеря сеанса, потому что вы изменили путь контекста для применения с

ProxyPass /apps/my_app https://MACHINE_IP:8443/my_app 

из /apps/my_app в HTTPD для /my_app в Tomcat. То, что Tomcat выдает сеансовые куки для пути /my_app, который не соответствует тому, что клиент запрашивает в форме httpd.

Исправить это использование ProxyPassReverseCookiePath

+0

Благодарим вас за ответ. Теперь проблема потери сеанса, похоже, исчезла. Могу ли я спросить вас, нужно ли мне добавить конфигурацию proxyName/proxyPort в Tomcat или внести какие-либо изменения в атрибут имени хоста? По моему мнению нет, поскольку Apache HTTP (который пересылает запросы) находится на одной машине. –

+1

Если у вас несколько хостов, определенных в Tomcat (т. Е. Вы занимаетесь виртуальным хостингом в Tomcat), имя единого хоста по умолчанию не имеет значения. mod_proxy должен заботиться об исправлении хоста и порта, но он не может обрабатывать все случаи. Было бы нецелесообразно определять proxyHost и proxyPort в Tomcat только для того, чтобы быть в безопасности. –

Смежные вопросы