Page 1 of 1

Apache2 CORS (Access-Control-Allow-Origin) для woff/ttf/woff2 шрифтов (enable mod_headers) из под httpS

Posted: Thu Apr 27, 2017 9:20 am
by LAlf
Доброго времени.

Установлена Vesta CP v.0.9.8-17 c Apache2 (без nginx).

Столкнулся с проблемой, что woff/woff2/ttf шрифты не загружаются в Chrome (скорее всего будет также и в других браузерах) из httpS (причем с сертификатом от CloudFlare).

В chrome developer tools будет что-то вроде:
Image

Т.е. хром постоянно выдает canceled на такие запросы из-за:
Image

По сути получается, что почему-то CORS запросы работают не так как нужно (если что - на соседнем сайте на http - всё ок).

Нагуглил вот такое решение: https://github.com/fontello/fontello/wi ... erve-fonts

Code: Select all

<FilesMatch ".(eot|ttf|otf|woff|woff2)">
  Header set Access-Control-Allow-Origin "*"
</FilesMatch>
Но, к сожалению, при попытке добавить это в .htaccess - появляется 500 ошибка, в логе отображается следующее:
[Thu Apr 27 11:58:43.329575 2017] [core:alert] [pid 23102] [client Х.Y.Z.A:17004] /home/admin/web/DOMAIN/public_html/public/.htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
Т.е. почему-то по дефолту в Apache2 не включен модуль mod_headers.c (почему?).

Проверяю список включенных модулей:
root@m:/home/adminas/conf/web# apache2 -l
Compiled in modules:
core.c
mod_so.c
mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.c
Смотрю можно ли установить:
adminas@m:~/web/DOMAIN/public_html/public$ a2enmod
Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_fcgi authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter fcgid file_cache filter headers heartbeat heartmonitor ident include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_prefork mpm_worker negotiation php7.0 proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_html proxy_http proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite rpaf ruid2 sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc
Which module(s) do you want to enable (wildcards ok)?
Включаю:
root@m:/home/adminas/conf/web# a2enmod headers
После чего делаю ребут апача, проверяю заново список модулей и... Модуль там не появился! Судя по всему, я не правильно интерпретировал вывод apache2 -l.

Но! 500 ошибка перестала валится, значит он работает. Но шрифты всё так же не загружаются. Я не правильный заголовок ставлю?

В связи со всем этим квестом у меня вопрос: что я делаю не так и как (возможно) лучше мне включить CORS для https запросов для woff/woff2/ttf шрифтов? Лучше какое-то универсальное решение через .htaccess, чтобы и на http горя не хапнуть, и на httpS всё заработало.

PS: кеш в cloudflare сбрасывал, не помогло. Думал ответ сервера закешировался там.

Re: Apache2 CORS (Access-Control-Allow-Origin) для woff/ttf/woff2 шрифтов (enable mod_headers)

Posted: Thu Apr 27, 2017 11:44 am
by LAlf
Проблема решилась, добавил нужные mime-types из мануала с github (есть в посте выше) + http://stackoverflow.com/questions/7748 ... over-https и всё заработало. Толком не понял что помогло в итоге, т.к. сейчас когда убрал и то и другое - всё равно всё грузится хорошо.

Если найду точное решение - напишу.

Re: Apache2 CORS (Access-Control-Allow-Origin) для woff/ttf/woff2 шрифтов (enable mod_headers) из под httpS

Posted: Sun Apr 30, 2017 9:31 pm
by LAlf
Судя по всему - когда тестировал, где-то что-то закешировалось.
Проверил на новом сайте - вот такое решение в .htaccess (есессно, с предварительно включенным mod_headers на сервере в апаче):

Code: Select all

<FilesMatch ".(eot|ttf|otf|woff|woff2)">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>
- работает.