我目前正在使用nginx来反向代理请求从长期轮询到上游的Web客户端。 由于我们正在进行长轮询(而不是websockets),所以当客户端连接时,它会以串行方式与服务器build立多个http连接,每次服务器发送一些数据时重新build立一个连接(或者超时,确定服务器无话可说10秒)。 我想要做的是限制并发的Web客户端的数量。 由于客户端不断地发出新的HTTP请求,而不是保持单个请求的打开,所以计算Web客户端的总数(因为与并发连接的http客户端的总数不相同)是有点棘手的。 我想到的方法是跟踪起始IP地址的http请求,并将IP地址存储在TTL为20秒的地方。 如果一个请求的IP地址不被识别,那么我们检查未过期的存储IP地址的总数; 如果这小于最大值,那么我们允许通过这个请求。 如果一个请求带有一个IP地址,我们可以在查找表中find一个尚未过期的IP地址,那么这个IP地址也可以通过。 所有允许通过的请求都将其IP添加到表中(如果不存在),并且TTL再次刷新为20秒。 实际上,我用nginx和Redis 2.0 Nginx模块 (以及nginx lua模块来简化条件分支),使用redis来存储我的IP地址和TTL( SETEX命令),这样一来,用DBSIZE命令检查表的大小。 这工作,但performance是可怕的。 nginx和redis结束了使用大量的CPU,机器只能处理less量的并发请求。 在1.5版本中添加到Haproxy(通过serverfault提供的一个佣金 )的新的stick-table和跟踪计数器似乎是实现这种限速的理想select,因为粘贴表可以跟踪IP地址并自动过期条目。 但是,我没有看到一个简单的方法来获得棒表中未到期条目的总数,这将是必要的知道连接的Web客户端的数量。 我很好奇,如果有人有任何build议,对于nginx或haproxy,甚至没有提到的其他东西,我还没有想到。
我们在Apache2上反向Web代理,它使用URL http:// server1代理到远程Web服务器的请求,该URL从http:// realserver1 现在,我正在尝试向webproxy添加另一个网站,它的作用是相同的,不同之处在于,远程服务器已经将Apache作为反向代理(对于同一主机上的Java应用程序但不同的端口)运行。 也就是说,webproxy提供URL http:// server2 ,获取从http:// realserver2代理的内容,然后从http:// localhost:someport获取其内容 现在我希望这个设置可以正常工作,但是不会。 相反,我被redirect到http://realserver2.Any想知道我在做什么错? 谢谢! 代码可以在snipt.net/search?q=apache+reverse+proxies+chain中看到
为了更高性能,我们希望允许nginx在传递给上游apache服务器之前捕获404。 两台服务器都有相同的文件。 更多信息 我们有一个stream行的设置,在nginx上提供静态内容,并使用apache上游来提供dynamic内容。 我们目前将PHP和静态文件同步到上游apache节点的nginx节点。 相同的文件位于两个图层上。 我们只提供来自nginx的静态文件。 目前,所有的非静态请求都会上传到Apache服务器(如以前所预期的那样)。 但是,我意识到在决定在上游传递它之前,nginx应该能够检查.php文件的存在。 这意味着更有效地处理请求。 我一直在尝试try_files的组合,然后最终如果块find解决scheme,但我没有成功。 请指教。 谢谢!
我目前正在安装由虚拟化主机(Ubuntu上的kvm)和7个虚拟机组成的服务器,其中一些运行MySQL和LDAP,另一些运行不同的Web服务器和Web应用程序。 运行数据库的虚拟机只能由同一台物理服务器上的其他虚拟机查询。 networking服务器虚拟机将运行10-20个网站和webapps。 服务器将被放置在数据中心,直接连接到互联网。 我的想法是使用主机和虚拟机之间的NATnetworking(在内部形成一个局域网),并为HostOS分配公共IP地址。 HostOS将运行防火墙(使用iptables)并将networkingstream量分配给虚拟机。 虚拟机最初将完全从外部屏蔽掉,因此在这个scheme中不需要在任何一个虚拟机上都具有全function的防火墙。 另外,我只需要一个公共IP地址。 我必须支付额外的IP地址,我不能超过5。 我想我可以在HostOS上使用反向代理,根据请求的主机名在VM之间分配stream量。 我的问题是双重的: 这是一个安装hostOS和虚拟机的好方法吗? 或者反向代理会使服务器变慢? 我是否应该只使用桥接networking(由大多数消息来源推荐),接受我所有的虚拟机都直接暴露在外,并据此采取措施? 什么是在hostOS上运行的好的反向代理。 我听到有关HAproxy的好消息。 我已经设置了mod_proxy之前(在一个完全不同的情况下),但我听到大多数人更喜欢HAproxy。 还是我需要一些占用空间最小的超轻量级反向代理,因为它不会太慢地降低hostOS的速度?
我想提供一些故障转移能力到我们的networking农场,所以我正在寻找各种开源反向代理平台(haproxy,nginx,Varnish,Cherokee和Squid)来引导http和SSLstream量到我们的MS / IIS Web服务器。 我的首选是将反向代理部署到Linux环境(虽然我打开替代build议)。 理想情况下,我希望能够通过在部署正在进行时将反向代理的configuration中的主机移除/添加到生产环境来控制部署。 我们的开发都是.NET \ C#,所以如果我上面提到的任何一个代理包都有一个对Windows / SOAP / REST客户端友好的外部API的话,那将是非常方便的。 作为最糟糕的情况,我想我可以编写一个Mono / C#应用程序来侦听命令,更新所需的configuration文件,然后HUP代理服务……但对于像我这样的懒惰程序员来说,这看起来像很多工作。 有没有人有一个build议(或两个,或三个) 谢谢!
我遇到了一个奇怪的问题,我不确定这是一个configuration问题还是nginx中的一个错误。 我的设置是一个具有Apache2后端服务器的nginx反向代理。 负载平衡器非常基本,类似于wiki的例子 ,例如简化: http { upstream myproject { server 127.0.0.1:8000; } server { listen 80; location / { proxy_pass http://myproject; } } } 现在,当我尝试在Apache中请求一个目录时,出现了一个问题,例如在URL末尾没有结尾的斜线。 例如,客户端请求: http://apache.myserver.com/somedirectory Apache将回复一个HTTP 302redirect客户端 http://apache.myserver.com/somedirectory/ 请注意,最后注意到它是一个目录的url有一个斜线。 还要注意,通过在redirect头中使用传入的请求主机名,Apache是“聪明的”。 迄今为止都很好。 但是,当使用nginx进行负载均衡时,会将301发送到客户端,而不会将nginx上游名称转换回实际的服务器/域。 所以客户将收到以下内容: GET http://nginx.myserver.com/somedirectory HTTP 301 Moved Permanently … Location: http://myproject:8000/somedirectory/ myproject是nginx上游后端的名称。 它不是客户可以解决的实际主机。 在我看来,客户应该被redirect到 http://nginx.myserver.com/somedirectory/ 即上游后端的名称应该在响应头中被replace。 这是一个在Nginx的错误,或者我做错了什么?
这是设置。 我有一台服务器运行Apache / PHP托pipeownCloud。 除此之外,我正在使用CardDAV联系人同步。 为了使我的域名与我的域名一起工作,我在前端运行了一个nginx服务器,作为ownCloud服务器的反向代理。 我的nginxconfiguration如下: server { listen 80; server_name cloud.mydomain.com; location / { proxy_set_header X-Forwarded-Host cloud.mydomain.com; proxy_set_header X-Forwarded-Proto http; proxy_set_header X-Forwarded-For $remote_addr; client_max_body_size 0; proxy_redirect off; proxy_pass http://server; } } 问题是,当我的手机在服务器上做一个PROPFIND时,nginx添加额外的字符到内容主体,把手机closures。 具体来说,它前面的d611\r\n在身体的前面,并附加0\r\n\r\n到内容的末尾。 (我从wireshark那里得到了这个)。它也重组了结果。 如何让nginx发送原始内容?
目前,我正在试图将各种技术混合到一个网站上的概念certificate,以便于迁移和增加灵活性。 这个想法是在IIS 7.5 ARR反向代理之后创build一个“mashup”网站。 目前,ARR反向代理将所有请求转发给我们的主站点。 请求如下: client -> ARR: Get / ARR -> Server 1: Get / Server 1 -> ARR: 200: /index.htm ARR -> client: 200: /index.htm …到现在为止还挺好。 比方说,我想添加一个新的网站(另一台服务器的根)作为我的主要网站的子网站。 一个简单的入站规则可以做到这一点: <rule name="sub1" stopProcessing="true"> <match url="^mySubsite(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> <action type="Rewrite" url="http://server2/{R:1}" /> </rule> 现在的要求是: client -> ARR: Get /mySubsite ARR -> Server […]
我有一个服务器使用nginx作为反向代理,它将foo.example.com的请求传递到10.0.0.210端口80转发工作正常,但我也需要转发端口9292的JavaScript消息传递服务。 我的服务器9292服务器{}条目是: server{ listen 9292; server_name foo.example.com; location / { add_header Access-Control-Allow-Origin http://foo.example.com; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://10.0.0.210:9292; } } 但是当我去应用程序我的铬控制台得到这个错误: Unexpected response code: 400 然后加载这个错误: XMLHttpRequest cannot load http://foo.example.com:9292/faye. Origin http://foo.example.com is not allowed by Access-Control-Allow-Origin. 它可以从http://foo.example.com:9292/faye.js服务器请求最初的JavaScript,但之后我只是得到这个错误。 我正在阅读的一切意味着这应该工作正常,所以我错过了什么?
我正在使用nginx作为侦听端口80(http)的反向代理。 我正在使用proxy_pass转发请求到后端http和https服务器。 一切工作正常我的http服务器,但是当我尝试通过nginx反向代理到达https服务器的HTTPS服务器的IP显示在客户端的Web浏览器。 我希望显示nginx服务器的URI,而不是https后端服务器的ip(再一次,这可以正常使用http服务器,但不能用于https服务器)。 在论坛上看到这个post 这是我的configuration文件: server { listen 80; server_name domain1.com; access_log off; root /var/www; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } location / { proxy_pass http://ipOfHttpServer:port/; } } server { listen 80; server_name domain2.com; access_log off; root /var/www; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } location / { proxy_pass […]