Передача настраиваемого заголовка или переменных Nginx в SSI

Я создаю веб-приложение с использованием SSI, чтобы максимально сократить использование сервера (поскольку это маленький VPS), одна из проблем, которые я face предоставляет мобильным пользователям различное содержимое / стиль. Я использую собственный заголовок detect-mobile.html . Я включаю его в остальные части страниц. но я смог использовать его только в директиве только в запрошенном файле HTML, например, index.html . Я не могу использовать его во включенных файлах footer.html или header.html SSI не распознал его. Вот код, который я использую в detect-mobile.html .

<!--#if expr="$HTTP_USER_AGENT=/iPhone/" -->
  <!--#set var="MOBILEDEVICE" value="Yess" -->
<!--#elif expr="$HTTP_USER_AGENT=/Android/" -->
  <!--#set var="MOBILEDEVICE" value="Yess" -->
<!--#elif expr="$HTTP_USER_AGENT=/iPod/" -->
  <!--#set var="MOBILEDEVICE" value="Yess" -->
<!--#else -->
  <!--#set var="MOBILEDEVICE" value="Noo" -->
<!--#endif -->

Я попытался добавить свой собственный заголовок из nginx

set     $ismobile Noo;  
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") 
       { set   $ismobile  Yess ;    }
proxy_set_header HTTP_CF_ISMOBILE $ismobile; #
add_header 'HTTP_ISMOBILE' $ismobile; 

, но SSI не может его прочитать

Кроме разрешенного SSI переменные [ 1 ], такие как HTTP_USER_AGENT, я хочу передать некую настраиваемую переменную, такую ​​как авторизация, в будущем, возможно ли это в SSI. Поскольку директива страны облачной вспышки работает! как они это делают!

Насколько я знаю, сейчас единственный возможный способ для меня: файл SSI html может читать переменную через пользовательский QUERY_STRING перенаправление, например rewrite ^ http: //example.com$uri? M = 1 постоянный;

0
задан 9 May 2019 в 20:07
2 ответа

Хорошо, после долгих поисков я обнаружил, что Nginx не принимает заголовок подчеркивания при прокси-сервере на другой сервер (так как я использую прокси-сервер cloudflare), поэтому я меняю мой заголовок выглядит так

add_header               'ISMOBILE'         $ismobile  ; 

, когда я повторяю его в файле SSI, я получил правильное значение, которое для меня удивительно

<!--#echo var = "ISMOBILE" -->  

это полный код, который я использую для обнаружения мобильного устройства с использованием только HTML SSI и сервера nginx (без PHP Javascript и т. д. )

set     $itismobile Noo;  
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") 
       { set   $itismobile  Yess ;    }

Ссылка на код мобильного UA [[113976 2] 1 ] Изменить: мне вообще не нужно было устанавливать значение заголовка, SSI может напрямую читать специальную переменную nginx.

<!--#echo var = "itismobile" -->  

print Noo на рабочем столе и Yess на мобильном устройстве

0
ответ дан 5 December 2019 в 02:59

Похоже, вы устанавливаете заголовок, передаваемый прокси, как «HTTP_CF_ISMOBILE». Поскольку доступ к заголовкам HTTP осуществляется в SSI с использованием префикса «HTTP_», вам может потребоваться доступ к нему как к переменной «HTTP_HTTP_CF_ISMOBILE».

proxy_set_header HTTP_CF_ISMOBILE $ ismobile;

В качестве альтернативы вы можете предоставить переменную в своем nginx без префикс HTTP

proxy_set_header CF_ISMOBILE $ismobile;
0
ответ дан 5 December 2019 в 02:59

Теги

Похожие вопросы