ключи API Google Maps должны быть установлены для всего веб-сервера (как env var? внутри apache?) - PullRequest
1 голос
/ 26 мая 2010

У меня есть веб-сайт с множеством виртуальных хостов, и каждый зарегистрирован на несколько доменных имен (заканчивающихся на .org, .de), site1.mysite.de, site2.mysite.org

Тогда у меня разныесистемы шаблонов, основанные на нескольких языках программирования (perl и php), используемых на веб-сервере.

Для API Карт Google требуется уникальный ключ API Карт Google для каждого vhost.

Я хочу иметь что-то вроде переменной для веб-сервера $ goomapkey, которую я могу вызывать из своего кода.

В PHP-коде, теперь у меня есть грязное решение для анализа случаев, подобное

 $domain = substr($_SERVER['SERVER_NAME'], -3);
 if (".de" == $domain){
   //if ("xxxxxx" eq substr($ENV{SERVER_NAME}, 0, 5)){

   //  $gookey = "ABQIAAA...";
   //} else {
     //site1.de   
     $gookey = "ABQIAAAA1Js...";
   //}
 } elseif ("dev" == substr($_SERVER['SERVER_NAME'], 0, 3)){
   //dev.mysite.org
   $gookey = "ABQIAAAA1JsSb...";
 } else {
   //www.mysite.org
   $gookey = "ABQIAAAA1JsS...";
   //TODO: Add more keys for each virtual host, for my.machinename.de, IP-address based URL, ...
 }

... внутри моей CMS на основе php.Неидеальное решение, потому что оно только для php, и мне все еще нужно установить его в нескольких html-шаблонах внутри CMS, и слишком много случаев.

Я хочу, чтобы ключ API карт Google былбыть установлен веб-сервером apache, который проверяет запрос * в начале цикла запроса, прежде чем будет создан и оценен любой код шаблона страницы php.

  • Является ли переменная среды хорошим решением?

  • какую технологию следует использовать для установки переменной $ goomapkey?

Я бы предпочел mod_perl2 обработчик запросов Apache, но документация сбивает с толку(много изменений API в прошлом).Какой модуль Apache я могу использовать?

  • Есть ли встроенный модуль Apache, который делает то же самое?

Ответы [ 3 ]

4 голосов
/ 26 мая 2010

Конечно, это немного излишне только для нескольких доменов? Я имею в виду, что вам, очевидно, пришлось пройти процедуру подачи заявки на ключ для каждого домена, почему бы просто не использовать каждый ключ в каждом проекте независимо?

Наиболее элегантным решением было бы переключиться на Google Maps API v3, для которого больше не требуется ключ API.

1 голос
/ 26 мая 2010

Является ли переменная среды хорошим решением?

Я бы не решался использовать переменные окружения для хранения «ключа», за исключением того, что ключи API не являются секретными (любой может увидеть его с помощью «источника просмотра»), поэтому это кажется неопределенно разумным.

Считаете ли вы, что это «хорошая» идея - это другое дело - это нарушение наслоения, но и все остальное. Если ваш веб-фреймворк (или то, что вы используете) имеет какую-то конфигурацию сайта, это очевидное место для его размещения. Вы можете сделать так, чтобы код конфигурации загружал его из переменной среды, но если вы сохраните его в конфигурации, его будет гораздо легче изменить позже

Я бы предпочел что-то вроде

$apikeys = array(
  "site1.de" => "...",
  "dev.mysite.org" => "...", 
  "www.mysite.org" => "...",
  "" => "...", // default
);

Затем код перебирает массив, находит совпадение с самым длинным суффиксом и использует соответствующий ключ. У него есть преимущество в том, что его проще портировать между разными языками (вы даже можете написать genapikeys.pl, который пишет gmapapikeys.php). Я также не думаю, что есть какой-то смысл иметь ключ по умолчанию - IIRC Google Maps отклоняет ваш запрос, если ключ не соответствует «Referer».

Более общим решением было бы обратить имена хостов (то есть de.site1, org.mysite.www); тогда вы можете иметь "com.hostingcompany.www / mysite /".

Конечно, IP-адреса в обратном порядке, а IPv6 - это удовольствие. Однако я не уверен, что ключи API тоже поддерживают, так что это может быть неактуально.

0 голосов
/ 26 мая 2010

Если вы попытаетесь заполнить переменную через mod_perl2, она не будет доступна для PHP - аналогично, ваши включаемые файлы PHP недоступны для PERL.

Переменная среды выглядит хорошим компромиссомесли вы уже не загружаете данные из файлов данных / базы данных.

Есть ли встроенный модуль Apache, который делает то же самое?

Да - mod_env и директива SetEnv

C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...