标签: arr

将工件发布到IIS上的远程TeamCity服务器时出现问题

我对TeamCity有一个相当奇怪的问题.我有一个TeamCity安装,带有本地和远程构建代理.TeamCity服务器隐藏在IIS后面,带有应用程序请求路由(ARR),以启用SSL等.我感觉这可能是问题的一部分,但我不确定.怀疑IIS是问题的一部分的另一个原因是,我试图在Azure Web App上托管TeamCity,并且得到了完全相同的行为.

问题是,在构建之后,当构建代理尝试将工件发布到服务器时,我从TeamCity服务器返回404.TeamCity认为这是一个可恢复的错误(请参阅日志),并且有时会再次尝试.最终,发布失败了.

如果我将本地代理配置为通过访问TeamCity http://localhost,一切顺利.但是,当通过公共地址(通过IIS提供)访问时,我得到404s.404内容看起来像标准的IIS 404页面.

我尝试将代理记录详细程度设置为DEBUG,但它仍然不输出它尝试调用的实际URL.

有没有人有任何关于如何解决这个问题的线索?让TeamCity代理输出它获得404的URL将是一个良好的开端.

[Publishing artifacts] Publishing 1 file [F:/tc/ba3/temp/buildTmp/out/_PublishedWebSites/**/* => dist.zip] using [WebPublisher]
[15:34:15][Publishing artifacts] Publishing 1 file [F:/tc/ba3/temp/buildTmp/out/_PublishedWebSites/**/* => dist.zip] using [ArtifactsCachePublisher]
[15:35:10]
[Publishing artifacts] Recoverable problem publishing artifacts (will retry): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>404 - File or directory not found.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} …
Run Code Online (Sandbox Code Playgroud)

iis teamcity arr

12
推荐指数
1
解决办法
1725
查看次数

Tomcat 8 + IIS 8上带有ARR 3的Websockets无法正常工作

我在互联网上搜寻,试图找到任何可能遇到这个问题的人,但却空手而归.所以这里:

我们有一个java Web应用程序(基于Spring MVC 4).它位于Microsoft IIS后面,充当使用应用程序请求路由(ARR)v3的负载平衡器/反向代理.

这种IIS正在执行与负载平衡ARR 3个不同的环境(所有运行的相同的Java代码): dev.example.com,demo.example.comqa.example.com.

该应用程序通过SockJS和stompjs使用WebSockets向用户的浏览器提供通知,当应用程序服务器在Tomcat 7上时,这一切都运行良好.将qa.example.com环境升级到Tomcat 8后,WebSocket连接停止工作 - 它回退到XHR POST要求.

我想强调的是,IIS,只是qa应用程序服务器没有进行任何更改.

以下是来自dev环境(工作)的示例请求/响应:

Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cache-Control: no-cache
Connection: Upgrade
Cookie: <cookies snipped>
Host: dev.example.com
Origin: https://dev.example.com
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: E7aIek0X6qcO9PAl1n6w4Q==
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

响应

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: Upgrade …
Run Code Online (Sandbox Code Playgroud)

java iis tomcat websocket arr

12
推荐指数
1
解决办法
1957
查看次数

AAR Android嵌入依赖

我想创建一个嵌入了其中一个依赖项的AAR.

依赖关系不会被部署到公共maven仓库,因此我希望它被嵌入.

我不想手动将依赖项复制到libs目录,因为它位于私人可访问的maven仓库中.

embed android arr

11
推荐指数
0
解决办法
245
查看次数

如何跟踪应用程序请求路由添加的开销?

我们有一个需要启用SSL的Delphi SOAP服务.我选择使用IIS ARR反向代理来进行SSL卸载以便于配置(与OpenSSL和手动证书+密码短语管理相比).ARR有效,但它增加了大量的开销...... 对于18个服务请求(总压缩约60Kb),响应时间从不到2秒变为19秒.

我将时间戳记录添加到客户端和服务器,以便在发送和接收消息时使用.它显示在从客户端发送和服务接收之间通过ARR向每个请求路由添加大约1秒.响应很快被路由回来,只有通过ARR的请求路由很慢(见下图).

如何跟踪开销的来源?ARR不适合这个用例吗?我尝试调整和禁用大多数设置,包括缓存.我尝试使用干净的IIS设置的不同主机,包括生产Windows Server 2012.SSL本身不是开销,只是让ARR HTTP反向代理导致延迟.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8987/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

来自Fiddler的请求和回复样本:

客户端和服务器时间戳网格

I0IS跟踪显示ARR的开销

iis iis-7 soap iis-arr arr

9
推荐指数
2
解决办法
2833
查看次数

IIS:URL重写/ signalr /和/ api /到端口8080

我有一个在端口8080上运行的自托管API.在端口80上是我的网络服务器(IIS 7.5),我的网站无法触及.我添加了一个应用程序"MyApiTestsite".现在对/ api /或/ signalr/I的所有请求都要转发到端口8080:

http://mycompany/MyApiTestsite           -> untouched
http://mycompany/MyApiTestsite/signalr/* -> http://mycompany:8080/signalr/*
http://mycompany/MyApiTestsite/api/*     -> http://mycompany:8080/api/*
Run Code Online (Sandbox Code Playgroud)

我已经安装了ARR(这甚至是必要的吗?)和URL Rewrite.

这是我到目前为止的规则(对于SignalR):

<rule name="Rewrite SignalR to port 8080" patternSyntax="Wildcard" stopProcessing="true">
  <match url="signalr/*" />
  <serverVariables>
    <set name="SERVER_PORT" value="8080" />
  </serverVariables>
  <action type="Rewrite" url="{R:0}" appendQueryString="true" logRewrittenUrl="false" />
</rule>
Run Code Online (Sandbox Code Playgroud)

我检查了日志文件,规则得到匹配.但是,它根本不起作用:

  • 我不知道如何摆脱RelativePath(我的应用程序) MyApiTestsite
  • 如果我检查日志,端口没有被替换

日志:

RULE_EVALUATION_END RuleName="Rewrite SignalR to port 8080", RequestURL="MyApiTestsite/signalr/hubs", QueryString="", StopProcessing="true", Succeeded="true"

URL_REWRITE_END RequestURL="/MyApiTestsite/signalr/hubs"

GENERAL_CHILD_REQUEST_START SiteId="4", RequestURL="http://mycompany:80/MyApiTestsite/signalr/hubs", RequestVerb="GET", RecursiveLevel="1"
Run Code Online (Sandbox Code Playgroud)

更新: 我现在根据这篇文章尝试过.但是,它仍然无效.URL似乎很好,但MvcHandler接管并返回404:

URL_REWRITE_END RequestURL ="http:// mycompany:8080/signalsr/hubs"

USER_SET AuthType ="",UserName ="",SupportsIsInRole ="true" …

iis url-rewriting self-hosting signalr arr

8
推荐指数
1
解决办法
4927
查看次数

在我的应用程序中添加尾部斜杠时,IIS ARR规则无法按预期工作

我有一个应用程序池,我想在ARR服务器下运行,该服务器应该作为我所有应用程序的路由器.我已经定义了一组应该在瀑布中应用的规则,但某些方法并没有正确运行.

第一个规则应该处理尾部斜杠,其他规则应该映射我的应用程序以使用重写URL解析我的内部DNS服务器,但问题似乎发生在第一个规则期间.

默认行为是,如果我尝试使用http:// myapp启动我的应用程序将返回404代码,如果我尝试通过添加斜杠(http://www.myapp/)来运行它,一切正常.所以基本上我的规则应该检查没有斜杠的Url模式:如果资源是一个目录,它应该在Url的末尾添加斜杠.

所以捕获url的模式是以下正则表达式:

.*[^/]$
Run Code Online (Sandbox Code Playgroud)

这应该抓住没有/最后的网址,我成功测试了它.

对于与正则表达式匹配的每个url,我应该检查它是否是一个目录,并且在这种情况下我应该设置尾部斜杠,所以:

{REQUEST_FILE} -> Is a directory
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我还尝试添加以下规则但没有成功:

{REQUEST_FILE} -> Is not a file
Run Code Online (Sandbox Code Playgroud)

适用的规则如下:

重定向到(重写导致相同的行为):

{R:O}/
Run Code Online (Sandbox Code Playgroud)

似乎没有添加/到我的网址,我不知道如何检查哪些步骤未能成功.接下来的规则基本上遵循这种模式:

mywebapp/* redirect to  www.mydnsappaddress/{R:1}
Run Code Online (Sandbox Code Playgroud)

编辑:我添加了web.config示例,以显示规则的文本版本.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Trailing Slash" enabled="false" stopProcessing="true">
                    <match url=".*[^/]$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" />
                    </conditions>
                    <action type="Redirect" url="{R:0}/" />
                </rule>
                <rule name="app1" enabled="false" patternSyntax="Wildcard">
                    <match url="sites/doc/*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="http://mypersonaldnsaddress/{R:0}" …
Run Code Online (Sandbox Code Playgroud)

regex iis rewrite web-applications arr

7
推荐指数
1
解决办法
708
查看次数

这个 ARR 警告会导致我的 404 吗?

我在 URL 重定向/重写期间收到 404,我无法确定是什么导致了它。

警告是:

REWRITE_DISABLED_KERNEL_CACHE

这是我的规则:

<rule name="TFS Redirect" stopProcessing="true">
  <match url="^((?!tfs).)*$" />
  <conditions>
    <add input="{HTTP_HOST}" pattern="tfs.domain.com" />
  </conditions>
  <action type="Redirect" url="http://tfs.domain.com/tfs" />
</rule>
<rule name="TFS Rewrite" stopProcessing="true">
  <match url="^tfs(.*)" />
  <action type="Rewrite" url="http://server3:8080/{R:0}" />
</rule>
Run Code Online (Sandbox Code Playgroud)

重定向规则似乎有效,因为tfs.domain.com/tfs当我浏览到tfs.domain.com.

但是后来我得到了 404。我查看了失败的请求日志,但它们并没有透露太多信息。有这个问题,但恐怕我对讨论的意思完全不知所措。也许这就是我问题的解决方案,但我不知道他们在说什么。不幸的是,这超出了我的想象。

那么......是ARR警告导致404吗?如果没有,我怎样才能找到这个问题的根本原因?

紧凑视图

编号 事件名称 详细信息 时间
--- ------------------------------- ---------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------- -------------
1. GENERAL_REQUEST_START SiteId="1", AppPoolId="DefaultAppPool", ConnId="1610612761", RawConnId="0", RequestURL="http://tfs.domain.com:80/favicon.ico", RequestVerb="获取”01:03:35.718
2. GENERAL_SET_REQUEST_HEADER HeaderName="AspFilterSessionId", HeaderValue="", Replace="true" 01:03:35.718
3. GENERAL_ENDPOINT_INFORMATION RemoteAddress="192.168.0.1", RemotePort="54278", LocalAddress="192.168.0.12", LocalPort="80" …

iis url-routing arr

7
推荐指数
1
解决办法
4253
查看次数

ARR请求无法路由,因为它已达到Max-Forwards限制.服务器可以在请求路由拓扑中自引用自身

我有两个安装了IIS 7.5的Windows 2008 R2 Standard Server(Server1和Server2).在Server1上,我安装了Web Farm Framework 2.2并创建了服务器Farm"myFarm.com".我还在Server1上安装了ARR.

在服务器场中,我已将Server2和Server1添加为辅助服务器.我已使用默认选项配置ARR.负载均衡配置为"循环,以便请求可以随机发送到两个服务器.

为了测试我的设置,我创建了一个Test.ASPX页面并将其部署在两个服务器中.这是一个简单的页面,它返回执行服务器页面的serverName.这样我就知道负载平衡是否有效.

然后我打开了Internet Explorer,并试图从托管Web Farm和ARR的server1浏览我的Test.ASPX页面.每次我点击页面请求只进入Server2.我让我的server2在webfarm中运行不健康,检查Server1是否处理了请求.当我试图在浏览器中点击Test.aspx时,我很惊讶地添加了以下错误:

请求无法路由,因为它已达到Max-Forwards限制.服务器可以在请求路由拓扑中自引用自身.

从错误消息中可以看出,当我的server2不可用时,ARR正在向Server1发送请求,Server1再次将请求发送给自身,从而导致环回.我找不到阻止这种环回的方法.

我在搜索后找到的解决方案之一是我不应该将Web1添加到Web场,因为它托管ARR,但我只有两台服务器,我不想只为ARR使用一台服务器.

一旦我标记我的server2健康请求开始由server2执行.

有人可以建议应该配置什么来解决此错误?

谢谢

arr

6
推荐指数
2
解决办法
9462
查看次数

url在应用程序池中重写和ARR

我试图弄清楚如何使用URL重写和应用程序请求路由(ARR)来重写同一服务器上的不同应用程序池.

在简化版本中,这就是我所拥有的:REST服务API使用2个虚拟目录Service.A和B实现,因此虚拟目录是访问资源A和B的URL的一部分

获取[https://] api.mycompany.com/Service.A/A

获取[https://] api.mycompany.com/Service.B/B

我想要实现的是为没有虚拟目录名的api提供一个外部URL,显然不需要进行代码重构(合并解决方案文件和构建)

获取[https://] api.mycompany.com/A

获取[https://] api.mycompany.com/B

我实现了一个url重写规则来匹配路径中的/ A并用/Service.A/A替换,在默认网站级别的web.config中使用这样的代码,这很好.

    <rewrite>

            <rule name="AddServicePrefix" enabled="true">

                <match url="^A[/]?.*" />

                <action type="Rewrite" url="/Service.A/{R:0}" />

            </rule>

    </rewrite>
Run Code Online (Sandbox Code Playgroud)

问题是,当我为Service.A(从默认网站的应用程序池)分配不同的应用程序池时,这将立即失败并出现403错误,但这是我们要求运行应用程序/虚拟目录的要求在不同的应用程序池下,以最小化任何池出现故障或回收时的影响.

我做了一些研究.下面的上一篇文章基本上说"如果你想将请求重新路由到另一个应用程序池,你必须跳一跳,无论是跳过winsock还是命名管道还是其他什么"没有太多细节.我也通过ARR指南,但无法弄清楚如何在这种情况下使用ARR.

http://forums.iis.net/t/1151510.aspx?Rewrite+across+application+pools+

有帮助吗?建议和评论我是否朝着正确的方向前进?

谢谢!

哦,忘记提及环境:目前在开发环境中,Windows 7上的IIS 7.5,Url Rewrite 2.0和ARR 3.0,由Web Platform Installer安装.

iis reverse-proxy url-rewriting arr

6
推荐指数
0
解决办法
1090
查看次数

使用ARR如果缺少cookie,你如何重写网址?

我知道我可以使用{HTTP_COOKIE}规则条件部分中的变量基于cookie的值重写URL .此规则获取一个名为ServerProxy的cookie,并重写到该服务器URL.

<rule name="SendTrafficToServerProxyCookieValue" stopProcessing="true">
    <match url="(.*)" />
    <action type="Rewrite" url="http://{C:1}/{R:0}" />
    <conditions>
        <add input="{HTTP_COOKIE}" pattern="ServerProxy=(.*)" />
    </conditions>
</rule>
Run Code Online (Sandbox Code Playgroud)

如果ServerProxycookie不存在或未设置,我想将流量定向到名为的身份验证服务器authenticate.app.如何编写可以执行此操作的重写规则?

asp.net iis arr

6
推荐指数
1
解决办法
635
查看次数