Всплывающие окна портала: полное руководство
Я вручную внедряю портал Wi-Fi. У меня все работает довольно хорошо, НО единственная заминка: я хочу, чтобы все увидели всплывающий портал своих мобильных ОС (или компьютерных ОС) для безупречного опыта.
Так как у каждого из них есть свой собственный извращенный способ сделать это, я, по-видимому, не могу получить последовательный кроссплатформенный опыт.
Чтобы это произошло, могу ли я получить некоторую помощь, чтобы описать (1) какие URL-запросы от WiFi-клиентов необходимо перенаправить на страницу входа в систему и / или (2) какую конфигурацию веб-сервера nginx или apache можно использовать для перенаправления WiFi клиенты на страницу входа?
В этом примере моей страницей входа в портал является http://captiveportal.lan/. Вот некоторые из операционных систем, для которых я пытаюсь решить эту проблему.
Android 4/5/6
- Apache:
RedirectMatch 302 /generate_204 http://captiveportal.lan
- nginx:?
Предыдущие версии Android
- Апач:
- nginx:?
iOS 8
Apache.htaccess:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^CaptiveNetworkSupport(.*)$ [NC]
RewriteRule ^(.*)$ http://captiveportal.lan [L,R=302]
nginx:?
Предыдущие версии iOS
- Апач:
- nginx:?
Телефон с операционной системой Виндоус
- Apache:
RedirectMatch 302 /ncsi.txt http://captiveportal.lan
- nginx:?
Windows 7 \ 8 \ 10
- Apache: см. Windows Phone (работает на Win7).
- nginx:?
Mac OS
- Апач:
- nginx:?
Amazon Kindle - есть ли у него всплывающее окно?
- Апач:
- nginx:?
2 ответа
Все мобильные ОС просто проверяют веб-страницу, чтобы решить, находятся ли они за захваченным порталом или нет.
Механизм такой:
- GET / POST http://foo.com/bar.html
- Если bar.html == [ожидаемое содержимое] > Открыть Интернет
- If bar.html!= [Ожидаемое содержимое] > Портал авторизации
- Если bar.html[status]!= SUCCESS > Нет сети
Кроме того, для iOS вам необходим домен для вашей сети WiFi, так как предполагается, что бездоменная сеть без доступа является домашней сетью и просто помечает ее как Нет сети вместо Captive Portal.
Просто убедитесь, что явно перенаправили следующие URL-адреса на ваш портал с успешным HTTP:
Android / Chromebook:
- clients3.google.com
iOS 6:
- gsp1.apple.com
- *.akamaitechnologies.com
IOS 7:
- www.appleiphonecell.com
- www.airport.us
- *.apple.com.edgekey.net
- *.akamaiedge.net
- *.akamaitechnologies.com
iOS 8/9:
Windows
- ipv6.msftncsi.com
- www.msftncsi.com
Многие поставщики также начали использовать пользовательский агент "CaptiveNetworkSupport", хотя это не так часто, как метод URL-адреса выше. Просто проверьте этот UA и всегда предоставьте ему свою страницу портала... но она не работает на 100%.
Я использую метод URL, и он работает нормально.
Amazon Kindle (Fire)
Amazon Kindle (Fire) делает следующий запрос, и если он не может быть извлечен, "... он предполагает, что пользователь должен войти в систему, и открывает экран входа в систему".
iOS 8.4
Для последней версии iOS мне приходилось сопоставлять все URI для запросов к http://captive.apple.com/ не просто "/hotspot-detect.html".
Клиенты iOS 8.4 отправляют запросы со случайно сгенерированными URI (например, "/xmqPyZUv/3r8jTjv8.html" и "/7exN0TV7q0COX0/eKlBU8baU2tape/fjXUzDHBdE6W0O/BGbw7iYU2DVBTXThTh1"):