6 заметок с тегом

iis

Экспорт и импорт сайтов и пулов приложений из/в IIS

When using multiple IIS server in a Load Balanced Environment it will be alot of work to create all your website twice with the same settings on each webserver. Therefor it is possible to export and import your configuration from one webserver to the other. This will also be usefull when your upgrading from IIS 7 (Windows Server 2008) to IIS 7.5 (Windows Server 2008 R2).

When you create a website in IIS 7 or 7.5 a unique application pool will also be created and used by this website, that’s why you need to import these application pools first on the second webserver before importing the website(s).

To Export the Application Pools on IIS 7:

%windir%\system32\inetsrv\appcmd list apppool /config /xml > c:\apppools.xml

This will export all the application pools on your webserver, therefor you need to edit the apppools.xml and remove the application that you do not need to import for example:

  • DefaultAppPool
  • Classic .NET AppPool
  • SecurityTokenServiceApplicationPool

And other apppools that already exist on the second webserver, appcmd doesn’t skip already existing apppools, it just quit’s and doesn’t import any.

To import the Application Pools:

%windir%\system32\inetsrv\appcmd add apppool /in < c:\apppools.xml

All the AppPools in the xml will be created on your second webserver.

To Export all your website:

%windir%\system32\inetsrv\appcmd list site /config /xml > c:\sites.xml

This will export all the websites on your webserver, therefor you need to edit the sites.xml and remove the websites that you do not need to import for example:

  • Default Website

And all other websites that already exist on the second webserver.

To Import the website:

%windir%\system32\inetsrv\appcmd add site /in < c:\sites.xml

It’s also possible to export a single website or application pool all you need to do is add the name of the Application Pool or Website to the command line:

To export/import a single application pool:

%windir%\system32\inetsrv\appcmd list apppool “MyAppPool” /config /xml > c:\myapppool.xml

Import:

%windir%\system32\inetsrv\appcmd add apppool /in < c:\myapppool.xml

To export/import a single website:

%windir%\system32\inetsrv\appcmd list site “MyWebsite” /config /xml > c:\mywebsite.xml

Import:

%windir%\system32\inetsrv\appcmd add site /in < c:\mywebsite.xml

(c) microsoftpro.nl

 27   2014   iis   web   windows

Используем WinDbg для поиска причины падения w3wp.exe

Выкатили свежее веб приложение, которое себя отлично вело на предпродакшн серверах, а оно начало «крашить» w3wp.exe. Пытались «оддебажить» Debug Diagnostic Tool v2.0, но никаких результатов вменяемых мы не получили. И вот в один прекрасный день я наткнулся на замечательную статью и уже из нее узнал о существовании WinDbg. Дальнейший поиск вывел меня на еще одну статью.
IIS складывает дампы в папку c:\ProgramData\Microsoft\Windows\WER\ReportQueue\ и там уже AppCrash_w3wp.exe_<некий хеш> в которой находятся файлы, например:

WER87FF.tmp.dmp
WER4CC3.tmp.hdmp
WER4C63.tmp.appcompat.txt
Report.wer
WER4CB2.tmp.WERInternalMetadata.xml

Для отладки запускаем установленную WinDbg и дальше Ctrl+D (File — Open crash Dump...) и указываем файл с расширением .hdmp.
Открывшийся дамп предстает перед нами в таком виде:

Подгружаем SOS модули для .NET
Для .NET 2.0 | 3.0 | 3.5

.loadby sos mscorwks

Для .NET 4.0

.loadby sos clr

Для вывода Stack Trace вводим команду:

!clrstack

и получаем вывод типа:

Для вывода потоков вводим команду:

!threads

и получаем список потоков:

В этом списке потоков я обнаружил строку:

129    9  e08 000000554889dba0  1029220 Preemptive  000000507063E940:0000005070640758 00000055488f41c0 1     MTA (Threadpool Worker) System.StackOverflowException 0000004cb0501188 (nested exceptions)

Вот он тот самый «эксепшн» StackOverflow который мы и искали.
«Открываем» нужный нам поток командой:

~129s

А теперь смотрим что у него внутри:

!clrstack

и начинаем анализировать вывод:

Скачать WinDbg

WinDbg 6.12.0002.633 (x64)
WinDbg 6.12.0002.633 (x86)

 9   2014   iis   windows

URL Rewrite some.domain.com to domain.com/some

Как в IIS прописать правило URL Rewrite для перенаправления (rewrite) some.domain.com в domain.com/some?
Решение:

<rule name="CName to URL" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^(?!www)(.*)\.domain\.com$" />
    </conditions>
    <action type="Redirect" url="http://domain.com/{C:1}/{R:0}" />
</rule>

Этим правилом мы перенаправляем http://some.domain.com на http://domain.com/some. Оно так же поддерживает запросы, например, http://some.domain.com/aboutus?more=info перенаправит на http://domain.com/some/aboutus?more=info.

То же самое можно сделать применив перезапись (rewrite):

<rule name="CName to URL - Rewrite" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^(?!www)(.*)\.domain\.com$" />
    </conditions>
    <action type="Rewrite" url="/{C:1}/{R:0}" />
</rule>

Для посетителя запрос будет выглядеть как http://some.domain.com/aboutus/, а для сервера это будет запрос в папку /some/aboutus/.

 5   2014   iis   web   windows

Подобие IIS Web farm на Mikrotik

Задача: Заменить IIS Web farm на mikriotik.
Минус реализации: Если на одном из серверов упадет веб-сервер, то этот сервер не исключается, т. к. используются icmp запросы.

IP — Web Proxy
Chack «Enable»
Src. Address: xxx.xxx.xxx.xxx (external mikrotik)
Port: 8080
Cache Administrator: webmaster
Max. Cache Size: unlimited KiB
Uncheck «Cache On Disk»
Max. Client Connections: 600
Max. Server Connections: 600
Max Fresh Time: 00:00:01
Uncheck «Serialize Connections» & «Always From Cache»
Cache Hit DSCP (TOS): 4
Cache Drive: system

IP — Web Proxy — Access
Add
Dst. Port: 80
Action: allow
Comment: Enable HTTP Connection

Add
Dst. Port: 23-25
Action: deny
Comment: block telnet & spam e-mail relaying

DNS — Static — min 2 servers
Add
Name: example.contos.com
Address: xxx.xxx.xxx.xxx (internal server)
TTL: 00:00:05

Tools — Netwatch — min 2 servers
Add
Host
Host: xxx.xxx.xxx.xxx (internal server)
Interval: 00:00:05
Timeout: 100 ms
Status: up
Up
/ip dns static enable numbers=[find where address=xxx.xxx.xxx.xxx (internal server)]
Down
/ip dns static disable numbers=[find where address=xxx.xxx.xxx.xxx (internal server)]

IP — Firewall — Nat
Add
General
Chain: dstnat
Dst: Address: xxx.xxx.xxx.xxx (external mikrotik)
Protokol: 6 (tcp)
dst. Port: 80
Action
Action: redirect
To Ports: 8080

 7   2013   iis   mikrotik

Invalid object name ’tempdb.dbo.ASPStateTempApplications’

Если вы используете IIS совместно с базой ASPState и в одно прекрасное утро видите в браузере ошибку Invalid object name ’tempdb.dbo.ASPStateTempApplications’, то на SQL сервере нужно выполнить следующий скрипт:

USE [ASPState]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[CreateTempTables]
SELECT 'Return Value' = @return_value
GO
 5   2013   iis   windows

Увеличение лимита на размер загружаемых на сервер файлов в IIS7

По умолчанию лимит на файл, который можно загрузить на сервер по HTTP составляет 30000000 байт, что несколько меньше, чем 30Мб. В случаях, когда необходимо загружать большие файлы, например, видео, такое лимит недостаточен и его нужно увеличить. Сделать это можно одним из приведенных ниже способов. В примерах ниже увеличиваем лимит до 100Мб.

Способ 1

В II7 Manager выбрать сайт, для которого нужно увеличить лимиты, затем открыть Request Filtering, на правой панели выбрать Edit Features… и затем изменить максимально допустимый размер принимаемого контента.

Увеличение лимита на размер загружаемых на сервер файлов в IIS7

Способ 2

Добавить в web.config файл в корневой директории веб-сайта следующие строки (секция system.webServer):

<system.webServer> 
   <security> 
      <requestFiltering> 
         <requestLimits maxAllowedContentLength="104857600" /> 
      </requestFiltering> 
   </security> 
</system.webServer>

Способ 3

Выполнить из командной строки следующую команды:

cd c:\Windows\System32\inetsrv

appcmd set config "Default Web Site" -section:requestFiltering -requestLimits.maxAllowedContentLength:104857600 -commitpath:apphost
 5   2013   iis   windows