Ускорьте изображения в Tomcat 6 - PullRequest
3 голосов
/ 21 сентября 2008

В tomcat 6 у меня есть сервлет, работающий с openbluedragon, все компилируется и работает на сервере, за исключением изображений, они действительно сильно отстают Любые предложения по оптимизации для обслуживания изображений?

Вот мой server.xml:

    <Service name="Catalina">

      <Connector port="8009" protocol="AJP/1.3" />
      <Connector port="8080" maxThreads="100" protocol="HTTP/1.1" connectionTimeout="20000" />
      <Engine name="Standalone" defaultHost="hostname.whatever" jvmRoute="ajp13">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      <Host name="hostname.whatever"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        ...context
      </Host>

    </Engine>
  </Service>

Ответы [ 3 ]

4 голосов
/ 22 сентября 2008

Другой вариант - использовать apache в качестве внешнего интерфейса, связывая tomcat с mod_jk. Таким образом, вы можете позволить apache обслуживать статический контент (например, изображения, CSS, Javascript) и позволить tomcat генерировать динамический контент. Может потребоваться немного усилий, чтобы отделить статический контент от динамического, но он прекрасно работает для меня.

В Unix использование apache в качестве внешнего интерфейса является хорошим вариантом, поскольку, будучи привязанным к порту 80, вы часто вынуждены запускаться от имени пользователя root. Apache знает, как отбрасывать разрешения root после привязки порта, а Tomcat - нет. Вы не хотите, чтобы общедоступный сервер работал от имени пользователя root.

(Это похоже на ответ обратного прокси, но не включает прокси, но mod_jk)

4 голосов
/ 14 января 2009

Вы обслуживаете один и тот же набор изображений снова и снова? В этом случае добавление фильтра сервлета, который добавляет разумный заголовок Expires, может сэкономить tomcat много работы. Это не увеличит скорость обслуживаемого изображения, а только уменьшит количество запросов, которые он должен обработать. Много примеров для этого в Интернете.

3 голосов
/ 21 сентября 2008

Если у вас есть возможность, вы можете добавить обратный прокси-сервер до подачи заявки. На работе у меня есть веб-сервер Apache, который получает все входящие HTTP-соединения. Основываясь на URL-адресе, он либо перенаправляет запрос на другой сервер, либо передает сам контент. Я использовал этот подход, чтобы ускорить подачу статического контента на сайт Trac. Директивы ProxyPass и ProxyPassReverse - хорошее место, чтобы начать поиск, если вы хотите пойти по этому пути.

В качестве простого примера, если у вас есть виртуальный каталог с именем / images, Apache может обработать любой запрос на что-либо в этом каталоге и перенаправить все остальное в ваш экземпляр Tomcat. Синтаксис довольно всеобъемлющий. Если есть какой-либо метод определения статического контента, этот подход будет работать.

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

Могут даже быть кэшированные обратные прокси, которые автоматически это выяснят. Я не знаком ни с одним из них.

...