none
Задержка 15-20 секунд при открытии первой страницы браузера. RRS feed

  • Вопрос

  • Коллеги, добрый день. Наблюдаю проблему которую пока не могу самостоятельно решить. Суть проблемы в следующем- Пользователи придя на работу запускают интернет браузер начинается открываться домашняя страница и вот суть в том, что идет задержка при открытии самой первой страницы где то 15-20 секунд после того как первая ссылка загрузилась все работает без проблем и без задержек. При анализе проблемы выявил, что задержка происходит только лишь в том случае когда стоит Использовать сценарий автоматической настройки в настройках браузера (Use automatic configuration script), если снять эту галку то страницы  грузится моментально без задержек проблема сразу исчезает, суть именно в скрипте. Убрать его нет возможности использование скрипта необходимо клиентам ибо много локальных адресов куда клиенты обращаются. Если не будет скрипта в котором указаны доменные имена (при обращении к которым TMG эти запросы не обрабатывает), пользователям будут не доступны локальные ресурсы(Те к которым пользователи обращаются через браузер).

    В Самом скрипте указано лишь, что бы запросы идущие на адреса *.corp.contoso.com и *.contoso.com TMG сервером не обрабатывались.

    За ранее всех благодарю за идеи как можно решить данную проблему.

    7 сентября 2012 г. 8:07

Ответы

  • Привет!

    Задержка из-за того, что клиент не может по указанному в скрипте IP-адресу найти TMG. Это проблема получается когда VPN-клиенты получают IP-адреса с DHCP-сервера и TMG в скрипте указывает свой IP для RRAS интерфейса. Вам надо сделать так, чтобы в скрипте вместо IP-адреса прописывалось FQDN-имя, для этого воспользуйтесь статьёй http://blogs.technet.com/b/isablog/archive/2008/06/26/understanding-by-design-behavior-of-isa-server-2006-using-kerberos-authentication-for-web-proxy-requests-on-isa-server-2006-with-nlb.aspx . Либо просто сохраните Ваш скрипт в другое место, отредактируйте как надо и укажите его новый адрес в браузере.

    • Помечено в качестве ответа Kudryavtsevvg 10 сентября 2012 г. 6:21
    10 сентября 2012 г. 6:11
  • Привет!

    Задержка из-за того, что клиент не может по указанному в скрипте IP-адресу найти TMG. Это проблема получается когда VPN-клиенты получают IP-адреса с DHCP-сервера и TMG в скрипте указывает свой IP для RRAS интерфейса. Вам надо сделать так, чтобы в скрипте вместо IP-адреса прописывалось FQDN-имя, для этого воспользуйтесь статьёй http://blogs.technet.com/b/isablog/archive/2008/06/26/understanding-by-design-behavior-of-isa-server-2006-using-kerberos-authentication-for-web-proxy-requests-on-isa-server-2006-with-nlb.aspx . Либо просто сохраните Ваш скрипт в другое место, отредактируйте как надо и укажите его новый адрес в браузере.

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

    Обратил внимание на вот это :

    function MakeProxies(){ this[0]=new Node("172.16.0.10",1606555374,1.000000); -где 172.16.0.10 это не IP адрес прокси сервера, а IP адрес  Internal интерфейса, в Routing and Remote Access. Это известная проблема и статья выше показывает как с ней бороться, у меня проблема возникла из за того, что IP адреса моим VPN клиентам выдаются DHCP сервером из той же под сети(172.16.0.0/16), что и сам TMG сервер(172.16.100.254), при отключении VPN доступа и пересоздании скрипта значение this[0]=new Node выставляется в правильный IP адрес 172.16.100.254 как только включаем VPN доступ, то пересоздав скрипт, возвращаемся опять к неверному значению MakeProxies (172.16.0.10).

    Решение:

        • Копируем в текстовый файл следующее содержание:

    Const fpcCarpNameSystem_DNS = 0

                          Const fpcCarpNameSystem_WINS = 1

                          Const fpcCarpNameSystem_IP = 2

                          Dim oISA: Set oISA = CreateObject( "FPC.Root" )

                          Dim oArray: Set oArray = oISA.GetContainingArray

                          Dim oWebProxy: Set oWebProxy = oArray.ArrayPolicy.WebProxy

                          If fpcCarpNameSystem_DNS = oWebProxy.CarpNameSystem Then

                    WScript.Echo "ISA is already configured to provide DNS names in the WPAD script"

                    WScript.Quit

                    End If

                         oWebProxy.CarpNameSystem = fpcCarpNameSystem_DNS

                        oWebProxy.Save true

    WScript.Echo "ISA was configured to provide DNS names in the WPAD script..."

     

    Либо с ссылки : http://blogs.technet.com/b/isablog/archive/2008/06/26/understanding-by-design-behavior-of-isa-server-2006-using-kerberos-authentication-for-web-proxy-requests-on-isa-server-2006-with-nlb.aspx

    1. Меняем формат файла с .txt на .vbs
    2. Переименовываем файл к примеру «For TMG скрипта смена IP на имя DNS»
    3. Перемещаем данный скрипт на  TMG сервер и применяем его после применения появится окно, что скрипт применился!
    4. Перезагружаем сервер (обязательно!!!) или рестарт службы (не пробовал, может не сработать).
    5. Теперь заходим в сам скрипт, который нам создал TMG и видим, что значение изменилось с IP адреса на DNS имя и стало:

    function MakeProxies(){

    this[0]=new Node("HQ-PROXY.corp.contoso.com",1606555374,1.000000);

     

    Все готово проблема устранилась так как клиенты обращаются по DNS имени к TMG серверу и DNS возвращает правильный IP адрес – Задержка больше не наблюдается!

    Надеюсь, решение поможет многим как оно помогло и мне.


    • Помечено в качестве ответа Kudryavtsevvg 10 сентября 2012 г. 6:21
    • Изменено Kudryavtsevvg 10 сентября 2012 г. 6:24 Изменение
    10 сентября 2012 г. 6:20

Все ответы

  • много букв, а теперь по делу )) :
    тмг один или в массиве?
    на скрипт браузеры через что настроены?
    в скрипте тмг прописан по имени или ип?
    7 сентября 2012 г. 8:27
    Отвечающий
  • День добрый,

    1. TMG- Один

    2. На скрипт, браузеры настроены через TMG клиент.

    3. TMG клиенты настраиваются по средством WPAD (Маркер в AD)., Соответственно в клиентах TMG указано имя сервера FQDN.

    (HQ-Proxy.corp.contoso.com).

    7 сентября 2012 г. 8:49
  • тмг клиент тут не при делах, в браузере скрипт по какому урлу вписан? если скрипт скачать и открыть блокнотом там сам тмг как вписан?

    можно попробовать и браузер через wpad настраивать, это проще

    7 сентября 2012 г. 9:13
    Отвечающий
  • 1.В Браузере http://HQ-PROXY.corp.contoso.com:8080/array.dll?Get.Routing.Script

    2. Вот второй пункт я не нашел кидаю сюда весь скрипт естественно оригинальное имя домена меняю на contoso.com

    //Copyright (c) 1997-2006 Microsoft Corporation
    BackupRoute="DIRECT";
    UseDirectForLocal=true;
    ConvertUrlToLowerCase=false;
    function MakeIPs(){
    }
    DirectIPs=new MakeIPs();
    cDirectIPs=0;
    function MakeCARPExceptions(){
    this[0]="*.windowsupdate.com";
    this[1]="windowsupdate.microsoft.com";
    this[2]="*.windowsupdate.microsoft.com";
    this[3]="*.update.microsoft.com";
    this[4]="download.windowsupdate.com";
    this[5]="download.microsoft.com";
    this[6]="*.download.windowsupdate.com";
    this[7]="wustat.windows.com";
    this[8]="ntservicepack.microsoft.com";
    this[9]="forefrontdl.microsoft.com";
    }
    CARPExceptions=new MakeCARPExceptions();
    cCARPExceptions=10;
    function MakeNames(){
    this[0]="*.contoso.com";
    this[1]="*.corp.contoso.com";
    }
    DirectNames=new MakeNames();
    cDirectNames=2;
    HttpPort="8080";
    cNodes=1;
    function MakeProxies(){
    this[0]=new Node("172.16.0.10",1606555374,1.000000);
    }
    Proxies = new MakeProxies();
    function Node(name, hash, load){
     this.name = name;
     this.hash = hash;
     this.load = load;
     this.score = 0;
     return this;
    }
    function IpSubnet(ip, mask, prefix){
     this.ip = ip;
     this.mask = mask;
     this.prefix = prefix;
     var isIpV4Addr = /^(\d+.){3}\d+$/;
     this.isIpv6 = !isIpV4Addr.test(ip);
     return this;
    }
    var pfDnsResolve, pfMyIpAddress, pfIsInNet;
    function DnsResolve(name){
     return dnsResolve(name);
    }
    function DnsResolveEx(name){
     return dnsResolveEx(name);
    }
    function IsInNet(ip, subnet){
     var isIpV4Addr = /^(\d+.){3}\d+$/;
     if(subnet.isIpv6 || !isIpV4Addr.test(ip)){
      return false;
     }
     return isInNet(ip, subnet.ip, subnet.mask);
    }
    function IsInNetEx(ip, subnet) {
     var isIpV4Addr = /^(\d+.){3}\d+$/;
     if(subnet.isIpv6 || !isIpV4Addr.test(ip)){
      return false;
     }
     return isInNetEx(ip, subnet.prefix);
    }
    function MyIpAddress(){
     return myIpAddress();
    }
    function MyIpAddressEx(){
     return myIpAddressEx();
    }
    function ExpMatch(str, exp){
     if (ConvertUrlToLowerCase)
     {
      str = str.toLowerCase();
     }
     return shExpMatch(str, exp);
    }
    function FindProxyForURL(url, host){
     pfDnsResolve = DnsResolve;
     pfMyIpAddress = MyIpAddress;
     pfIsInNet = IsInNet;
     return ImplementFindProxyForURL(url, host);
    }
    function FindProxyForURLEx(url, host){
     pfDnsResolve = DnsResolveEx;
     pfMyIpAddress = MyIpAddressEx;
     pfIsInNet = IsInNetEx;
     return ImplementFindProxyForURL(url, host);
    }
    function ImplementFindProxyForURL(url, host){
     var hash=0, urllower, i, fIp=false, ip, iparray, nocarp=false, skiphost=false;
     var list="", pl, j, score, ibest, bestscore;
     urllower = url.toLowerCase();
     if((urllower.substring(0,5)=="rtsp:") ||
       (urllower.substring(0,6)=="rtspt:") ||
       (urllower.substring(0,6)=="rtspu:") ||
       (urllower.substring(0,4)=="mms:") ||
       (urllower.substring(0,5)=="mmst:") ||
       (urllower.substring(0,5)=="mmsu:"))
      return "DIRECT";
     if(UseDirectForLocal){
      if(isPlainHostName(host))
       fIp = true;}
     for(i=0; i<cDirectNames; i++){
      if(ExpMatch(host, DirectNames[i])){
       fIp = true;
       break;}
      if(ExpMatch(url, DirectNames[i]))
       return "DIRECT";
     }
     if(cDirectIPs == 0){
      if(fIp)
       return "DIRECT";}
     else{
      ip = host;
      if(fIp)
       ip = pfDnsResolve(host);
      iparray = ip.split(";");
      for(j=0; j<iparray.length; j++){
       if(IsIPv6Addr(iparray[j]))
        return "DIRECT";
       for(i=0; i<cDirectIPs; i++){
        if(pfIsInNet(iparray[j], DirectIPs[i]))
         return "DIRECT";}}
      if(isPlainHostName(host))
       return "DIRECT";
     }
     if(cCARPExceptions > 0){
      for(i = 0; i < cCARPExceptions; i++){
       if(ExpMatch(host, CARPExceptions[i])){
        nocarp = true;}
       if(ExpMatch(url, CARPExceptions[i])){
        nocarp = true;
        skiphost = true;
        break;
     }}}
     if(!skiphost)
      hash = HashString(host,hash);
     if(nocarp)
      hash = HashString(pfMyIpAddress(), hash);
     pl = new Array();
     for(i = 0; i<cNodes; i++){
      Proxies[i].score = Proxies[i].load * Scramble(hash ^ Proxies[i].hash);
      pl[i] = i;
     }
     for(j = 0; j < cNodes; j++){
      bestscore = -1;
      for(i = 0; i < cNodes-j; i++){
       score = Proxies[pl[i]].score;
       if(score > bestscore){
        bestscore = score;
        ibest = i;
      }}
      list = list + "PROXY " + Proxies[pl[ibest]].name + ":" + HttpPort + "; ";
      pl[ibest] = pl[cNodes-j-1];
     }
     list = list + BackupRoute;
     return list;
    }
    var h_tbl = new Array(0,0x10D01913,0x21A03226,0x31702B35,0x4340644C,0x53907D5F,0x62E0566A,0x72304F79,0x8680C898,0x9650D18B,0xA720FABE,0xB7F0E3AD,0xC5C0ACD4,0xD510B5C7,0xE4609EF2,0xF4B087E1);
    function HashString(str, h){
      for(var i=0; i<str.length; i++){
       var c = str.charAt(i);
       if(c ==':' || c == '/') break;
       c = CharToAscii(c.toLowerCase());
       h = (h >>> 4) ^ h_tbl[(h ^ c) & 15];
       h = (h >>> 4) ^ h_tbl[(h ^ (c>>>4)) & 15];
       h = MakeInt(h);
     }
     return h;
    }
    function Scramble(h){
     h += ((h & 0xffff) * 0x1965) + ((((h >> 16) & 0xffff) * 0x1965) << 16) + (((h & 0xffff) * 0x6253) << 16);
     h = MakeInt(h);
     h += (((h & 0x7ff) << 21) | ((h >> 11) & 0x1fffff));
     return MakeInt(h);
    }
    function CharToAscii(c){
     return c.charCodeAt(0);
    }
    function MakeInt(x){
     x %= 4294967296;
     if(x < 0)
      x += 4294967296;
     return x;
    }
    function IsIPv6Addr(ip){
     return (ip.indexOf(":") > -1);
    }

    3. Вариант браузер через WPAD не подходит ибо пользователям нужен TMG клиент(Специфичное ПО которое не работает без TMG клиента(Бухгалтерия)) соответственно скрипт этот тоже должен быть.

    7 сентября 2012 г. 9:37
  • Привет!

    Задержка из-за того, что клиент не может по указанному в скрипте IP-адресу найти TMG. Это проблема получается когда VPN-клиенты получают IP-адреса с DHCP-сервера и TMG в скрипте указывает свой IP для RRAS интерфейса. Вам надо сделать так, чтобы в скрипте вместо IP-адреса прописывалось FQDN-имя, для этого воспользуйтесь статьёй http://blogs.technet.com/b/isablog/archive/2008/06/26/understanding-by-design-behavior-of-isa-server-2006-using-kerberos-authentication-for-web-proxy-requests-on-isa-server-2006-with-nlb.aspx . Либо просто сохраните Ваш скрипт в другое место, отредактируйте как надо и укажите его новый адрес в браузере.

    • Помечено в качестве ответа Kudryavtsevvg 10 сентября 2012 г. 6:21
    10 сентября 2012 г. 6:11
  • Привет!

    Задержка из-за того, что клиент не может по указанному в скрипте IP-адресу найти TMG. Это проблема получается когда VPN-клиенты получают IP-адреса с DHCP-сервера и TMG в скрипте указывает свой IP для RRAS интерфейса. Вам надо сделать так, чтобы в скрипте вместо IP-адреса прописывалось FQDN-имя, для этого воспользуйтесь статьёй http://blogs.technet.com/b/isablog/archive/2008/06/26/understanding-by-design-behavior-of-isa-server-2006-using-kerberos-authentication-for-web-proxy-requests-on-isa-server-2006-with-nlb.aspx . Либо просто сохраните Ваш скрипт в другое место, отредактируйте как надо и укажите его новый адрес в браузере.

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

    Обратил внимание на вот это :

    function MakeProxies(){ this[0]=new Node("172.16.0.10",1606555374,1.000000); -где 172.16.0.10 это не IP адрес прокси сервера, а IP адрес  Internal интерфейса, в Routing and Remote Access. Это известная проблема и статья выше показывает как с ней бороться, у меня проблема возникла из за того, что IP адреса моим VPN клиентам выдаются DHCP сервером из той же под сети(172.16.0.0/16), что и сам TMG сервер(172.16.100.254), при отключении VPN доступа и пересоздании скрипта значение this[0]=new Node выставляется в правильный IP адрес 172.16.100.254 как только включаем VPN доступ, то пересоздав скрипт, возвращаемся опять к неверному значению MakeProxies (172.16.0.10).

    Решение:

        • Копируем в текстовый файл следующее содержание:

    Const fpcCarpNameSystem_DNS = 0

                          Const fpcCarpNameSystem_WINS = 1

                          Const fpcCarpNameSystem_IP = 2

                          Dim oISA: Set oISA = CreateObject( "FPC.Root" )

                          Dim oArray: Set oArray = oISA.GetContainingArray

                          Dim oWebProxy: Set oWebProxy = oArray.ArrayPolicy.WebProxy

                          If fpcCarpNameSystem_DNS = oWebProxy.CarpNameSystem Then

                    WScript.Echo "ISA is already configured to provide DNS names in the WPAD script"

                    WScript.Quit

                    End If

                         oWebProxy.CarpNameSystem = fpcCarpNameSystem_DNS

                        oWebProxy.Save true

    WScript.Echo "ISA was configured to provide DNS names in the WPAD script..."

     

    Либо с ссылки : http://blogs.technet.com/b/isablog/archive/2008/06/26/understanding-by-design-behavior-of-isa-server-2006-using-kerberos-authentication-for-web-proxy-requests-on-isa-server-2006-with-nlb.aspx

    1. Меняем формат файла с .txt на .vbs
    2. Переименовываем файл к примеру «For TMG скрипта смена IP на имя DNS»
    3. Перемещаем данный скрипт на  TMG сервер и применяем его после применения появится окно, что скрипт применился!
    4. Перезагружаем сервер (обязательно!!!) или рестарт службы (не пробовал, может не сработать).
    5. Теперь заходим в сам скрипт, который нам создал TMG и видим, что значение изменилось с IP адреса на DNS имя и стало:

    function MakeProxies(){

    this[0]=new Node("HQ-PROXY.corp.contoso.com",1606555374,1.000000);

     

    Все готово проблема устранилась так как клиенты обращаются по DNS имени к TMG серверу и DNS возвращает правильный IP адрес – Задержка больше не наблюдается!

    Надеюсь, решение поможет многим как оно помогло и мне.


    • Помечено в качестве ответа Kudryavtsevvg 10 сентября 2012 г. 6:21
    • Изменено Kudryavtsevvg 10 сентября 2012 г. 6:24 Изменение
    10 сентября 2012 г. 6:20