2013-04-24 2 views
0

NGINX가 특정 국가 코드를 감지하도록 설정하려고합니다. 나는 지금 당장 제대로 작동하고있다. if ($geoip_country_code = IE) { rewrite ^(.*) http://link.com/for/Ireland ; 이것은 내 nginx.conf 파일이 아닌 내 실제 사이트 설정 파일에있다.NGINX GeoIP 및 서버 수준의 모바일 감지

내가하고 싶은 것은 아일랜드와 모바일 인 경우 두 번째 링크로 이동하는 경우와 같이 모바일 체크를 추가하는 것입니다. 이 수준에서도 가능합니까? 아니면 서버 수준에서 국가를 감지 한 다음 페이지가로드되고 모바일 탐지 스크립트를 사용하는 것과 같은 표준 방식으로 모바일을 처리해야합니다. 나는 내가이 방법으로 그것을 할 수 있다는 것을 알고 있지만, 나는 나의 NGINX 설정에서 같은 탐지 장치에 탐지를 추가 할 수 있기를 원한다.

모든 도움과 정보를 제공해 주셔서 감사합니다.

답변

0

모바일 용 사용자 에이전트의 놀라운 차이로 인해 nginx 구성보다 코드 리디렉션을 사용하는 것이 훨씬 낫습니다. 특히, nginx에서 if 진술을 호출하는 비용은 중요하지 않습니다.

This website은 구식이고 그리 오래되지 않은 모바일 사용자 에이전트의 비 한정적인 목록을 가지고 있습니다. 당신은 목록이 실제로 아주 gianormous다는 것을 빨리, 빨리 볼 것이다. 이제 아이폰, 아이팟, 아이 패드에 집중하겠습니다. AppleWebKit/420 + (도마뱀 붙이와 같은 KHTML) 버전/3.0 모바일

모질라/5.0 (; CPU 종류; 맥 OS X와 ​​같은 CPU 엔 장치 유형을) : 그들은 구별하기 매우 쉽다/1A543a Safari/419.3

따라서이 문제는 문제가되지 않습니다. 그러나이 문자열은 사파리의 데스크톱 사용자 에이전트를 포함한 다른 것들과 매우 유사합니다 ... 그리고 이것은 가장 쉬운 전화를위한 것입니다. 안드로이드는 그렇게 단순하지 않습니다. 예를 들어 보자, HTC의 욕망 :

모질라/5.0 (리눅스, U, 안드로이드 2.1 갱신 1, 드 드, HTC 디자 이어 1.19.161.5 빌드/ERE27) AppleWebKit/530.17 (KHTML, 도마뱀 붙이 등) 버전/4.0 모바일 사파리/530.17

OS 식별자가 세 번째 필드로 변경되었습니다. 즉, iPhone 및 일부 Android와 일치시키기 위해 최소 두 개의 정규 표현식 엔진 호출이 필요합니다.

MOT - V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0

: 음, 모토로라 드로이드 가자 ... 때문에, 어떤 말인지

... Waaat?

결론 : 가양 성 (false positive)에 신경 쓰면 사용자 에이전트 데이터베이스가 필요합니다. 그렇지 않다면, 사용자 에이전트에서 정규식을 사용하여 nginx에 대한 광범위한 검사를 수행하고 키워드 iPad, iPhone, iPod, Android, Windows Phone을 검색하십시오. 그것은 모든 모바일 사용자의 약 80-85 %를 표시합니다. 모두과 일치하려면 제조업체에서 사용자 에이전트를 다시 작성해야하므로 user-agent의 DB를 사용해야합니다.

+0

이런 식으로 내 문제에 대한 자세한 답변을 보내 주셔서 감사합니다. 내 실제 웹 사이트 코드 대 내 설정에 변수를 내 국가에 대한 검사를 통합하는 방법을 알아내는 것이 더 나을 것이라고 생각합니다. –

+0

국가는 nginx에서 괜찮습니다. 코드의 놀라운 복잡성으로 인해 코드에서 수행하려는 사용자 에이전트 부분입니다. –

1

http://detectmobilebrowsers.com을 살펴보십시오. 그것은 nginx에 대한 코드 스 니펫을 가지고 있습니다. 최근에 그런 nginx 구성을했는데 잘 작동합니다.