2009/6/12 Sergej Kandyla
<sk.paix@xxxxxxxxx>
Alexey V. Karagodov пишет:
ну так научены жизнию делать нетривиальные кастыли ;) (увы...)
Вообще мне кажется что это сам томкат в хедерах подставляет url="" href="http://test.ru/test/" target="_blank">http://test.ru/test/
по крайней мере я много раз выхватывал эту граблю, пытаясь натравить [https] -> nginx -> tomcat [http]
собственно это и не грабля а нормальное поведение, и лечится добавлением в томкат поддержки SSL. Например, у меня, так
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystorePass="123456" />
имхо это будет правильнее, чем пытаться сделать кастыль на базе nginx.
Я тоже долго воевал с похожей проблемой, только у меня не просто tomcat был, а jboss и приложение было написано с использованием struts (это какой-то java фреймворк), да еще и использовался secureplugin, он же struts-sslext. Этот зверь по указаным правилам редиректил на http или https (в зависимости от того есть что ценное на странице или нет).
В jboss я сделал два порта, один - обычной http, а другой такой:
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true" />
(т.е. secure=true и scheme=https, но никаких keystore не объявлено). sslext и сам tomcat наивно полагали что там у него https, все редиректы и ссылки генерировал с https, коннектор работал как обычный http.
В какой-то из новых версий jboss обновился и tomcat, и это перестало работать - в такой конфигурации tomcat вообще к порту не биндился. Тогда пришлось убрать secure=true и scheme=https и немножнко переписать sslext.jar (убрать одно из условий в одном if'е).
Если кому-то нужно, могу дать исходники и объяснить подробнее.
PS: no top posting please