Настройка Access-Control-Allow-Origin на сервере.

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 997
Благодарностей
4 465
Баллы
113
Столкнулся с интересной проблемой.
В ходе написания шаба под доргены ВК очень часто не получалось скопировать текст с картинками так чтобы потом вставить в ВК. Текст вставляется, а картинка должна подтягиваться в ВК, но этого не происходит. Например с Википедии или магазина Амазон всё норм. Но мне нужно в основном со своего сайта.

Написал в сапорт ВК и получил ответ, что нужно менять Access-Control-Allow-Origin. Перелопатил десяток статей и в общем вся важная инфа здесь в неск. строках https://stackoverflow.com/questions/7015782/how-do-i-use-access-control-allow-origin-does-it-just-go-in-between-the-html-he

Стал пробовать.
1. В HTML тегах не работает - <meta http-equiv="Access-Control-Allow-Origin" content="*">. Хэдер не получает нужного параметра.
2. PHP скриптом -
<?php header("Access-Control-Allow-Origin: http://example.com"); ?> вроде успех, хэдер получает нужный параметр, но при копировании-вставке в ВК опять не подтягиваются картинки почему-то.
3. Залез в Апач и модифицировал apache.conf как указано на стэковерфло, но ничего в хэдере запроса не появилось.
4. Чисто для тестов поставил Хром расширение (п. 4 в ответе по ссылке) и, о чудо, все заработало как надо.

Так что проблема теоретически решаема, но в Зенно мы хрома пока не имеем и тем более его расширений. Мне бы очень хотелось решить через способ п. 2 или, в край, п 3, но пока никак.
Что посоветуете?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 869
Баллы
113
По п.2 - ты выставил этот хедер для php-страницы, в которую вставил данный код. На картинку (которая имеет другой URL - это не сработает).

Что ты хочешь в итоге добиться этим всем? Хочешь качать проблемные картинки себе на сервер и вставлять ссылки в статьи уже на своем домене?

vk в итоге копирует картинку к себе на сервер или в статье в итоге будет ссылка на исходную картинку (тот урл, что ты вставил)?
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 997
Благодарностей
4 465
Баллы
113
Хочешь качать проблемные картинки себе на сервер и вставлять ссылки в статьи уже на своем домене?
Нет, копировать текстовку с картинками на своем домене. Затем вставлять в ВК статьи.
vk в итоге копирует картинку к себе на сервер или в статье в итоге будет ссылка на исходную картинку (тот урл, что ты вставил)?
Автоматом сохраняет себе.
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 869
Баллы
113
Тогда нужно смотреть в сторону проксирования изображений через свой php-скрипт, единственное что тут будет траблой - если "копировать текстовку с картинками на своем домене" - придется все ссылки на картинки подменять на прокси-скрипт, в духе:
(только "http://domain/image.jpeg" лучше сделать в urlencode, а в скрипте делать urldecode, т.к. может попасться амперсанд и он будет некорректно обработан)
 
  • Спасибо
Реакции: Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 997
Благодарностей
4 465
Баллы
113
(только "http://domain/image.jpeg" лучше сделать в urlencode, а в скрипте делать urldecode, т.к. может попасться амперсанд и он будет некорректно обработан)
Ну свои картинки я сам формирую, так что не попадется.
За идею спасибо, пока не знаю что за проксирование изображений, надо погуглить.
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 869
Баллы
113
Так, стоп) Я невнимательно стартпост прочитал)

Мне почему-то показалось, что картинки из разных мест вставляются, где CORS закрытый. А если все картинки на твоем сайте, то вообщем-то не надо проксирования. Нужно копать в сторону п.3, чтоб для картинок отдавался корректный заголовок. Скорее всего у тебя на сервере стоит apache2 + nginx (для статики) и как раз картинки идут через nginx, поэтому конфиги нужно править под него. И да, на всякий случай (вдруг): после изменения конфигов - apache2/nginx нужно перезапускать, чтобы конфиги вступили в силу (но это не относится к .htaccess!). И на всякий случай перед изменением лучше сделать бекапы конфигов, nginx так очень просто "угомонить" простой опечаткой
 
  • Спасибо
Реакции: Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 997
Благодарностей
4 465
Баллы
113
Вчера вечерок посвятил как раз этому и не получилось)
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 869
Баллы
113
Вчера вечерок посвятил как раз этому и не получилось)
В nginx решается добавлением вот такого локейшена в server {}: https://serverfault.com/a/176729 (только там форматы файла нужно изменить)

Вот ещё примеры:
nginx: https://enable-cors.org/server_nginx.html
apache: https://enable-cors.org/server_apache.html

Если совсем всё туго, лучше обратиться к саппорту хостинга )
 
  • Спасибо
Реакции: Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 997
Благодарностей
4 465
Баллы
113
А куда конкретно эти локейшены для nginx прописываются?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 869
Баллы
113
А куда конкретно эти локейшены для nginx прописываются?
Прописываются в "контекст" "server { ... }" для нужного домена (глобально лучше не прописывать).

И местоположение конфига зависит от того, какая OS и каким образом установлен nginx (по сути можно сконфигурировать так, что он будет лежать у черта на куличках), но чаще всего конфиг для конкретного сайта лежит тут:
/etc/nginx/sites-enabled/домен_сайта.conf
или
/etc/nginx/sites-available/домен_сайта.conf
(по сути эти папки - одно и тоже, т.к. одна из них просто ссылка на другую, но опять же - смотря как сконфигурировано)


Главный конфиг от nginx обычно находится:
Там тоже могут быть "server {}" для необходимого домена, но так делают реже.


Если на серваке стоит VestaCP, то nginx-конфиги для сайтов она складывает в:
/home/пользователь_весты/conf/web/домен_сайта.nginx.conf
 
  • Спасибо
Реакции: Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 997
Благодарностей
4 465
Баллы
113
Лорд, ну ты шариш, конечно, мощно.
Спасибо. Завтра займусь.
 
  • Спасибо
Реакции: Lord_Alfred

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)