我正在尝试构建一个代理服务器来处理对内部站点的请求(隐藏原点),但同时检查数据包并异步后处理它们.
例如,假设所有对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
我们最近实现了一个基于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
要么
无济于事.
为什么会这样?
这是一个strandard nginx反向代理 - > apache后端服务器.
值得一提的是,我们网站上独特的内容类型相当少.我们已使用许多浏览器对此进行了测试,并未亲自接收这400个结果中的任何一个.
谢谢!
进一步详细说明日志中类似条目的URL:
http://blog.rayfoo.info/2009/10/weird-web-server-access-log-entries
我非常肯定这个问题已经解决了,但我找不到任何关于它的信息......
sysadmins如何以编程方式将新节点添加到现有且正在运行的负载均衡器?假设我有一个负载均衡器正在运行并已经在两个EC2实例之间说我的API服务器,突然出现流量峰值,我需要负载均衡器中的第三个节点但是我睡着了...如果我会很好有什么监控可能RAM使用和一些关键性能指标告诉我何时应该有另一个节点,甚至更好,如果它可以单独向负载均衡器添加一个新节点...
我相信这对于node-http-proxy和分发来说是可能的,甚至是微不足道的,但我想知道这是否可以与HAproxy和/或Nginx一起使用......我知道亚马逊的弹性负载平衡可能是我最好的选择,但我想自己做(我想从rackspace,EC2,Joyent和其他人那里生成实例,因为它很方便).
再一次,产生一个节点很容易,我想知道如何将它添加到haproxy.cfg或与Nginx类似的东西,而无需重新加载整个代理,并以编程方式进行.Bash脚本是我最好的选择,但它仍然需要重新加载整个代理,这是坏的,因为它失去了连接...
我有一个特殊的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配置?
我有一个Play 2.1.x应用程序,它使用JKS签名.这取决于,运行和可用的domain.com:9443,我要代理其与nginx的,因为会出现在同一台机器上更多的应用程序,(因此不能只是口运行443),我增加了nginx的配置中,希望proxy_pass有https让我只是代理它到客户端
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,多域证书.
我的烧瓶应用程序中的重定向(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应用程序没有得到备忘录来更新其重定向路由.
我想在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笔记本网络服务器?如果是,那么请前进并分享您的知识:-)非常感谢!
好的,为了开发目的,我们有一个专用的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' ...组中,这也不起作用.
我正在尝试通过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表示赞赏.
我目前正在尝试为两个Angular应用创建反向代理。我希望都可以通过启用SSL的docker主机的443端口访问应用程序(例如https://192.168.xx/app1和https://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)