IIS7 и ARR като обратен прокси за Subversion

Използвам IIS7 и разширението Application Request Routing, за да действам като обратен прокси към Subversion, работещ на Apache.

Проксито работи добре и аз мога да изследвам сървъра и дори да извърша "проверка". Не мога обаче да преглеждам файлове, които обикновено са забранени от ASP.NET - например .cs, .csproj и т.н. Файлове, с които ASP.NET не би се занимавал - като .txt - са добре.

Опитах се да редактирам глобалния web.config, за да премахна съпоставянето на забранения манипулатор за тези файлове, но изглежда нямаше значение. Има ли някакъв начин да се позволи на модула за пренаписване на URL адреси в IIS7 да работи, като същевременно се позволи изобразяването на всички файлови разширения?


person Paul Stovell    schedule 27.09.2009    source източник


Отговори (3)


IIS7 има файл applicationHost.config, който има раздел за сигурност който ограничава файловите разширения:

<requestFiltering>
  <fileExtensions allowUnlisted="true" applyToWebDAV="true">
    <add fileExtension=".cs" allowed="false" />
    <add fileExtension=".csproj" allowed="false" />
    <add fileExtension=".vb" allowed="false" />
    <add fileExtension=".vbproj" allowed="false" />
    ....
  </fileExtensions>

Повече информация:

http://learn.iis.net/page.aspx/143/how-to-use-request-filtering/

Добавих подобен раздел към web.config на моя сайт и използвах <clear /> възел, за да премахна всички разширения. Сега мога да обслужвам .cs, .csproj файлове и други, но все още не мога да обслужвам .config файлове.

Редактиране: Премахването на възлите на hiddenSection коригира това и за файловете web.config. Ето моя локален файл web.config:

<system.webServer>
  <security>
    <requestFiltering>
      <fileExtensions allowUnlisted="true" applyToWebDAV="true">
        <clear />
      </fileExtensions>
      <verbs allowUnlisted="true" applyToWebDAV="true" />
      <hiddenSegments applyToWebDAV="true">
        <clear />
      </hiddenSegments>
    </requestFiltering>
  </security>
</system.webServer>
person Paul Stovell    schedule 27.09.2009
comment
Това е отговорът. Благодаря ти! - person Alexandr; 07.04.2017

Накарах го да работи с моя web.config, изглеждащ така:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{CACHE_URL}" pattern="^(https?)://" />
                    </conditions>
                    <action type="Rewrite" url="{C:1}://localhost:8080/{R:1}" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8080/(.*)" />
                    <action type="Rewrite" value="http{R:1}://svn.mysite.com/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        <add input="{RESPONSE_CONTENT_ENCODING}" pattern="[^(gzip)]" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
        <security>
        <requestFiltering>
          <fileExtensions allowUnlisted="true" applyToWebDAV="true">
            <clear />
          </fileExtensions>
          <verbs allowUnlisted="true" applyToWebDAV="true" />
          <hiddenSegments applyToWebDAV="true">
            <clear />
          </hiddenSegments>
        </requestFiltering>
      </security>
    </system.webServer>
</configuration>
person InActive    schedule 25.11.2012

В допълнение към отговора на Paul Stovell, бих препоръчал активиране на двойно избягване. Срещнах грешки при извличане на файлове, съдържащи знак + в името на файла. Двойното екраниране елиминира този проблем:

    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="SVNIn" stopProcessing="false">
                        <match url="(.*)" />
                        <action type="Rewrite" url="http://localhost:8082/svn/{R:1}" />
                    </rule>
                </rules>
            </rewrite>
            <security>
                <requestFiltering allowDoubleEscaping="true">
                    <fileExtensions allowUnlisted="true" applyToWebDAV="true">
                        <clear />
                    </fileExtensions>
                    <verbs allowUnlisted="true" applyToWebDAV="true" />
                    <hiddenSegments applyToWebDAV="true">
                        <clear />
                    </hiddenSegments>
                </requestFiltering>
            </security>
        </system.webServer>
    </configuration>
person Macharius    schedule 25.02.2021