标签: reverse-proxy

IIS7应用程序请求路由(arr反向代理)与托管模块相结合 - 超时

我正在尝试构建一个代理服务器来处理对内部站点的请求(隐藏原点),但同时检查数据包并异步后处理它们.

例如,假设所有对http://www.foo.com的 SOAP调用都将转到http://192.168.1.1,同时存储在数据库中进行后期分析.内部服务器是一个黑盒子,所以更改它的内容超出了这个问题的范围.

无论如何,我已经配置了ARR,使用反向代理,使用通配符制作URL重写过滤器,所有工作都完美无瑕.然后,我尝试添加一个用C#编写的托管HttpModule,并挂钩到Application_BeginRequest和Application_EndRequest.我能够在最终请求(应用程序池处于集成模式)中访问请求标头,响应标头,甚至能够通过在Response.Filter上设置过滤器来读取输出流中的响应内容,该过滤器将所有写入缓存在附加内存流中.

问题是,当我尝试读取(在模块BeginRequest处理程序内)来自请求的输入流时,ARR会停留一段时间并抛出一个

HTTP错误502.3 - 错误网关操作超时处理程序ApplicationRequestRoutingHandler错误代码0x80072ee2

所以它超时了.

查看失败的请求跟踪我看到:

MODULE_SET_RESPONSE_ERROR_STATUS警告ModuleName ="ApplicationRequestRouting",Notification ="EXECUTE_REQUEST_HANDLER",HttpStatus ="502",HttpReason ="Bad Gateway",HttpSubStatus ="3",ErrorCode ="2147954402",ConfigExceptionInfo =""SET_RESPONSE_ERROR_DESCRIPTION警告ErrorDescription ="操作时间到"

现在网上的任何类似帖子都没有帮助,因为这不是超时错误(代理有120秒设置,页面答案不到100毫秒),以及我评论试图读取FORM数据的处理程序代码的那一刻或者InputStream数据,一切都可以作为魅力.

即使我在读取后将输入流的位置设置为0,我仍然会有超时.如果我在EndRequest上读取输入流,它将获得0个字节,即使它是POST请求.(这显然是错的)

ARR是否有一个错误,我尝试在尝试重新路由之前尝试读取输入流?

使用的东西:Windows Server 2008 R2 IIS 7.5 ARR v2 .Net Framework 3.5模块

想法?谢谢/ Cosmin

iis-7 timeout reverse-proxy httpmodule

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

NGINX反向代理:许多html状态代码400响应,为什么?

我们最近实现了一个基于nginx的反向代理.

在调试我们的访问日志时,我们看到了相当多的状态代码400结果.

他们看起来像这样:

[07/Sep/2011:05:49:04 -0700] - "400" 0 "-" "-" "-"
Run Code Online (Sandbox Code Playgroud)

我们已启用调试错误日志记录,它们通常对应于以下内容:

2011/09/07 05:09:28 [info] 5937#0: *30904 client closed prematurely connection while reading client request line
Run Code Online (Sandbox Code Playgroud)

我们已经尝试过提高一些缓冲区,正如我们能够谷歌的几页所提到的那样.

http://www.ruby-forum.com/topic/173362

要么

http://blog.craz8.com/articles/2009/06/17/nginx-400-bad-request-errors-due-to-cookies-and-what-to-do-about-them

无济于事.

为什么会这样?

这是一个strandard nginx反向代理 - > apache后端服务器.

值得一提的是,我们网站上独特的内容类型相当少.我们已使用许多浏览器对此进行了测试,并未亲自接收这400个结果中的任何一个.

谢谢!


进一步详细说明日志中类似条目的URL:

http://blog.rayfoo.info/2009/10/weird-web-server-access-log-entries

reverse-proxy nginx

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

以编程方式将节点添加到负载均衡器,如Haproxy?

我非常肯定这个问题已经解决了,但我找不到任何关于它的信息......

sysadmins如何以编程方式将新节点添加到现有且正在运行的负载均衡器?假设我有一个负载均衡器正在运行并已经在两个EC2实例之间说我的API服务器,突然出现流量峰值,我需要负载均衡器中的第三个节点但是我睡着了...如果我会很好有什么监控可能RAM使用和一些关键性能指标告诉我何时应该有另一个节点,甚至更好,如果它可以单独向负载均衡器添加一个新节点...

我相信这对于node-http-proxy分发来说是可能的,甚至是微不足道的,但我想知道这是否可以与HAproxy和/或Nginx一起使用......我知道亚马逊的弹性负载平衡可能是我最好的选择,但我想自己做(我想从rackspace,EC2,Joyent和其他人那里生成实例,因为它很方便).

再一次,产生一个节点很容易,我想知道如何将它添加到haproxy.cfg或与Nginx类似的东西,而无需重新加载整个代理,并以编程方式进行.Bash脚本是我最好的选择,但它仍然需要重新加载整个代理,这是坏的,因为它失去了连接...

proxy reverse-proxy load-balancing nginx haproxy

12
推荐指数
2
解决办法
5369
查看次数

nginx + nodejs + php

我有一个特殊的URI方案,这给我带来了一些麻烦.我需要运行nodejs来提供以下服务:

domain.com
var.domain.com
var.domain.com/foo/
Run Code Online (Sandbox Code Playgroud)

我有这个工作没有问题express.vhost()用于提供子域.但是,一旦URI类似于以下内容,我需要提供静态内容和php:

var.domain.com/foo/bar
var.domain.com/foo/bar/index.php
Run Code Online (Sandbox Code Playgroud)

/bar/是我服务器上的某个目录.从那个url下来(比如说/bar/images/favicon.ico)的所有东西都会像你的典型目录方案一样.通常我会在某个端口上运行典型的proxy_pass到节点,但正如你在这里看到的,我需要nodejs作为端口80上的主要处理程序,并让它将请求传递给在其他端口上运行的nginx(或者反过来可能/更简单吗?).

这种类型的方案是否可以使用(nginx/php)/ nodejs配置?

php reverse-proxy nginx node.js

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

如何在没有指定证书文件的情况下代理SSL后端?

我有一个Play 2.1.x应用程序,它使用JKS签名.这取决于,运行和可用的domain.com:9443,我要代理其与nginx的,因为会出现在同一台机器上更多的应用程序,(因此不能只是口运行443),我增加了nginx的配置中,希望proxy_passhttps让我只是代理它到客户端

upstream backend-secure {
    server 0.0.0.0:9443;
}

server {
        listen 443 ssl;
        server_name domain.com;

        proxy_redirect          off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;


        location / {
                proxy_pass  https://backend-secure;
        }

}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当https://domain.com我尝试在浏览器中打开时,我只能登录nginx/error.log:

服务器在SSL端口握手时定义没有"ssl_certificate",客户端:123.123.123.123,服务器:0.0.0.0:443

有没有办法让它工作或只有选项是使用nginx SSL +使用http后端的常用方法?

编辑:如果重要的话,这是EV,多域证书.

ssl reverse-proxy nginx playframework-2.1

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

与gunricorn + nginx的Flask重定向(url_for)错误

我的烧瓶应用程序中的重定向(url_for)函数出现问题.

任何重定向(url_for("index"))行将应用程序从domain.com/app重定向到ip-addr/app,其中ip-addr是我自己的客户端机器ip,而不是服务器的.

这让我很困惑,我不知道问题究竟发生在哪里,因为它只发生在服务器而不是任何本地测试.

细节:

我正在使用http://flask.pocoo.org/snippets/35/中的反向代理设置.我的nginx配置是这样设置的

location /app {
                proxy_set_header X-Script-Name /app;
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Host $proxy_add_x_forwarded_for;
                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Scheme $scheme;
                proxy_connect_timeout 60;
                proxy_read_timeout 60;
                proxy_pass http://localhost:8000/;
        }
Run Code Online (Sandbox Code Playgroud)

我有一个gunicorn运行我的烧瓶应用程序作为一个暴发户的任务.任何提示?

编辑:

所以我挖了一下,发现这个git报告有类似的问题,https://github.com/omab/django-social-auth/issues/157.

Nginx - Gunicorn通过localhost(127.0.0.1:1234)为Nginx服务.不幸的是,当我使用社交平台进行身份验证时,重定向URL social-auth将它们发送到127.0.0.1:1234/twitter/complete,这显然无法通过客户端的浏览器解析.

看来我的Flask应用程序没有得到备忘录来更新其重定向路由.

python reverse-proxy nginx flask gunicorn

12
推荐指数
3
解决办法
7836
查看次数

如何在Apache代理后面运行IPython

我想在Apache(反向)代理后面运行一个IPython笔记本Web服务器,而不是URL

https://my.server:XXXX

(其中XXXX是某个端口号)我可以使用

https://my.server/py0

我知道IPython使用websockets,我怀疑这是我的设置中缺少的部分,但我根本找不到关于如何配置它的适当详细描述.不幸的是,除此之外,IPython网络服务器设置文档没有太多关于代理的说法:

在代理后面,特别是如果您的系统或浏览器设置为自动检测代理,笔记本Web应用程序可能无法连接到服务器的websockets [...]

所以我决定自己尝试并将以下内容放入/etc/apache2/sites-enabled/default-ssl.conf:

            SSLProxyEngine On
            SSLProxyVerify none
            SSLProxyCheckPeerCN off
            SSLProxyCheckPeerName off
            ProxyPass       /py0/ https://localhost:10000/
            ProxyPassReverse        /py0/ https://localhost:10000/
Run Code Online (Sandbox Code Playgroud)

通过URL"直接"访问IPython https://my.server:10000与广告一样完美.

URL https://my.server/py0(没有尾部斜杠)返回"404 Not found".

与尾部斜杠相同的https://my.server/py0/是"工作",因为它转发到https://my.server/login?next=%2F它,然后"自己找不到" - 显然是因为/ py0 /部分丢失了.也许我应该告诉IPython它怎么样

也许相关的版本号:Ubuntu 14.04 LTS,Apache 2.4.7.

也许是相关的问题:nyx背后的IPython.但是,由于我的设置中的其他所有内容都由Apache处理完全满意,我不想再运行Nginx.

是否有任何好的灵魂在Apache之后成功配置了IPython笔记本网络服务器?如果是,那么请前进并分享您的知识:-)非常感谢!

apache proxy reverse-proxy ipython

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

Laravel在反向代理后面路线

好的,为了开发目的,我们有一个专用的Web服务器.它目前没有直接连接到互联网,所以我在另一台服务器上设置了一个apache反向代理,该服务器转发到开发服务器.

这样,我就可以访问服务器了.

问题是,Laravel中的路由现在以内部服务器IP地址或服务器计算机名称为前缀.

例如,我访问http://subdomain.test.com但是使用route()帮助程序生成的所有路由都显示以下url:http://10.47.32.22而不是http://subdomain.test.com.

反向代理设置如下:

<VirtualHost *:80>
    ServerName igateway.somedomain.com

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://10.47.32.22:80/
    ProxyPassReverse / http://10.47.32.22:80/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我已经设置了实际的域名config\app.php.

如何设置在路由中使用的默认URL?我不希望它使用内部地址,因为这违背了反向代理的要点.

我已经尝试将所有路线封闭在一个Route::group(['domain' ...组中,这也不起作用.

apache routing reverse-proxy laravel laravel-5

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

IIS 8中的Websockets反向代理

我正在尝试通过IIS上的反向代理连接到websockets服务器(websockify).IIS和websockets服务器驻留在同一物理服务器上(Windows Server 2012 R2,IIS 8.5,ARR 3,启用了Websockets).我已经看到了一些关于这个的问题,并建议这应该适用于IIS 8和ARR 3,但目前还没有实际的解决方案.我在IIS中有一些http/https反向代理的经验,但这是我第一次尝试使用websockets.

例如:

原始网址:ws://10.2.1.10/websockify

反向代理需要将其转换为:ws://10.2.1.10:5901/websockify

web.config中的一般示例规则:

<rewrite>
     <rules>               
        <rule name="WS reverse proxy" stopProcessing="true"> 
          <match url="(.*)" />
          <conditions> <add input="{CACHE_URL}" pattern="^(.+)://" /> 
          </conditions> 
          <action type="Rewrite" url="{C:1}://10.2.1.10:5901/websockify"/>       
        </rule>
     </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

根据失败的请求跟踪,URL似乎被翻译,但由于某种原因,它没有到达10.2.1.10:5901的websocket服务器.

最终目标是合并noVNC/websockify,以便为网络上的多个VNC服务器提供基于浏览器的客户端访问.任何帮助理解如何反向代理websockets表示赞赏.

iis reverse-proxy websocket websockify novnc

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

在Nginx上以及其他Nginx反向代理后面运行的Angular App

我目前正在尝试为两个Angular应用创建反向代理。我希望都可以通过启用SSL的docker主机的443端口访问应用程序(例如https://192.168.xx/app1https://192.168.xx/app2),以便用户没有输入每个应用程序的端口号。

我的设置是,应用程序的每个部分都在其自己的Docker容器中运行:-容器1:Angular App 1(端口80暴露在端口8080上的主机上)-容器2:Angular App 2(端口80暴露在端口Port上的主机上) 8081)-容器3:反向代理(端口443暴露)

Angular应用程序和反向代理都在nginx上运行。这些应用程序的构建如下:ng build --prod --base-href /app1/ --deploy-url /app1/

应用程序的Nginx设置是这样的:

server {
  listen 80;
  sendfile on;

  default_type application/octet-stream;

  gzip on;
  gzip_http_version 1.1;
  gzip_disable      "MSIE [1-6]\.";
  gzip_min_length   256;
  gzip_vary         on;
  gzip_proxied      expired no-cache no-store private auth;
  gzip_types        text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  gzip_comp_level   9;

  root /usr/share/nginx/html;

  index index.html index.htm;

  location / {
    try_files $uri $uri/ /index.html =404;
  }
}
Run Code Online (Sandbox Code Playgroud)

反向代理的nginx配置如下所示:

server {
  listen 443;
  ssl on;
  ssl_certificate …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy nginx docker angular nginx-reverse-proxy

12
推荐指数
2
解决办法
1497
查看次数