Назад | Перейти на главную страницу

Доступ к статическим файлам в каталоге Tomcat с помощью VirtualHost

Я запускаю веб-службу Java (JAX-WS) на Tomcat 8 из моего экземпляра AWS EC2 Linux, и у меня есть поддомен, указывающий на службу, так что я могу вызвать службу с URL-адресом http://services.example.com/api/myService1. Это конфигурация VirtualHost:

<VirtualHost *:80>
    ServerName services.example.com
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8080/Services/
    ProxyPassReverse / http://localhost:8080/Services/
</VirtualHost>

Теперь я хотел бы получить доступ к некоторым статическим файлам (изображениям), хранящимся на сервере. Где их хранить и как получить к ним доступ?

Я пробовал хранить их на /opt/tomcat/webapps/ROOT/example.jpg и называя их http://services.example.com/example.jpg но это не работает.

Например, создайте новый каталог /opt/static/ и chown это к www-data или эквивалент в вашей ОС и поместите туда свои статические данные. Это полностью обойдет tomcat для статических активов (хорошая вещь, IMO)

а затем измените определение vhost на это (я предполагаю, что все ваши вызовы api находятся в URL-адресе api - это также включит кеширование на стороне клиента для статических файлов.)

<VirtualHost *:80>
    ServerName services.example.com
    DocumentRoot /opt/static/

    #Cache static files for 1 month
    <FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
    Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>

    <Location "/api/">
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
        ProxyPass http://localhost:8080/Services/api
        ProxyPassReverse http://localhost:8080/Services/api
    </Location>
</VirtualHost>