问题标签 [reverse-proxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
628 浏览

asp.net - ASP.Net反向代理,外部资源怎么办?

我目前正在研究反向代理的概念,以基本上在用户和其他不可见的网站之间中继响应和请求。因此,基本上用户会访问一个站点,比如 www.myproxyportal.com,在那里可以访问未公开的网络服务器 Intranet 中的网站(在 iframe 中)(例如 internal.myproxyportal.com)。

我一直在研究一种解决方案,我将请求对象转换到所需位置并将响应返回给网站。效果很好,除了 CSS 链接、IMG 等。我当然可以进行翻译,但是链接会转到 internal.myproxyportal.com/css/style.css,而这从外部无法正常工作。

如何处理这样的事情?

是否有任何开箱即用的解决方案?

编辑:我发现了这个,它与我目前所写的非常相似,但它也缺乏对外部图像、css、javascript 等的支持。

0 投票
4 回答
1591 浏览

ruby-on-rails - Rails 的页面缓存与 HTTP 反向代理缓存

我一直在赶上Scaling Rails的截屏视频。在第 11 集中介绍了高级 HTTP 缓存(使用反向代理缓存,如 Varnish 和 Squid 等),他们建议仅在您已经用尽 Rails 应用程序中的页面、动作和片段缓存的可能性后才考虑使用反向代理缓存(以及 memcached 等,但这与这个问题无关)。

我不太明白的是,使用 HTTP 反向代理缓存如何为已经使用页面缓存的应用程序提供性能提升。为了简化问题,假设我在这里谈论的是单个主机。

这是我对这两种技术如何工作的理解(也许我错了):

  • 使用页面缓存,Rails 进程最初会被命中,然后生成一个静态 HTML 文件,该文件由 Web 服务器直接为后续请求提供服务,只要该请求的缓存有效。如果缓存已经过期,那么 Rails 会再次被命中并重新生成静态文件,更新的内容为下一个请求做好准备

  • 使用 HTTP 反向代理缓存,当代理需要确定内容是否过时时,Rails 进程就会受到影响。这是使用各种 HTTP 标头完成的ETag,例如Last-Modified等。如果内容是新鲜的,那么 Rails 会使用 HTTP 304 Not Modified 响应代理,并且代理会将其缓存的内容提供给浏览器,或者更好的是,使用自己的 HTTP 304 响应. 如果内容是陈旧的,那么 Rails 将更新的内容提供给缓存它的代理,然后将其提供给浏览器

如果我的理解是正确的,那么页面缓存不会导致 Rails 进程的命中率降低吗?没有那么多来回来确定内容是否过时,这意味着比反向代理缓存更好的性能。为什么你可以结合使用这两种技术?

0 投票
2 回答
3471 浏览

iis - IIRF反向代理问题

我们有一个 Java 应用程序(Atlassian Bamboo)在 Windows 2003 的 8085 端口上运行。它可以通过 http://bamboo:8085 访问。

我正在尝试使用 IIRF 为 IIS6 设置反向代理,以便可以通过
http://bamboo 访问内容。看来我正确设置了它的ip,我可以检索状态页面。这就是我的 IIRF.ini 的样子:

但是,当我在 IE 中输入 http://bamboo 时,我收到“页面无法显示”消息。FF 根本不返回任何东西。我做了 Wireshark 网络转储,选择了“follow TCPstream”,似乎正在检索正确的页面。为什么我看不到它呢?

我还注意到我可以检索 http://bamboo/favicon.ico 所以我必须非常接近解决方案。这是 Wireshark 输出:

0 投票
2 回答
2877 浏览

nginx - 是否有让 Node.js 充当 HTTP 反向代理的解决方案?

我们公司有一个项目,现在使用 nginx 作为反向代理来提供静态内容和支持彗星连接。我们使用长轮询连接来摆脱不断的刷新请求,让用户立即获得更新。

现在,我知道已经为 Node.js 编写了很多代码,但是有没有一种解决方案可以让 Node.js 像 nginx 一样充当提供静态内容的反向代理?或者也许有一个允许使用 Node.js 快速开发这样一个层的框架?

0 投票
2 回答
1356 浏览

http - 使用直接服务器返回转发 HTTP 请求

我的服务器分布在多个数据中心,每个数据中心都存储不同的文件。我希望用户能够通过单个域访问所有服务器上的文件,并让各个服务器将文件直接返回给用户。

下面是一个简单的例子:
1) 用户的浏览器请求http://www.example.com/files/file1.zip
2) 请求到达服务器 A,基于 example.com 的 DNS A 记录。
3) 服务器 A 分析请求,发现 /files/file1.zip 存储在服务器 B 上。
4) 服务器 A 将请求转发给服务器 B。
5) 服务器 B 直接返回 file1.zip 给用户,无需经过服务器一个。

注意:步骤 4 和 5 必须对用户透明,并且不能涉及向用户发送重定向,因为这会违反单个域的要求。

根据我的研究,我想要实现的称为“直接服务器返回”,它是负载平衡的常见设置。它有时也称为半反向代理。

对于第 4 步,听起来我需要进行 MAC 地址转换,然后将请求传递回网络,对于服务器网络之外的服务器,将需要隧道。

对于第 5 步,我只需要根据负载平衡设置中的真实服务器配置服务器 B。也就是说,服务器 B 应该在环回接口上拥有服务器 A 的 IP 地址,并且它不应该响应对该 IP 地址的任何 ARP 请求。

我的问题是如何实际实现第 4 步?

我发现有很多硬件和软件可以在第 4 层实现简单的负载平衡,但这些解决方案不够完善,无法处理我需要的那种自定义路由。看来我需要推出自己的解决方案。

理想情况下,我想在 Web 服务器级别进行路由/转发,即在 PHP 或 C#/ASP.net 中。但是,我愿意在 Apache 或 IIS 等较低级别,或者在更低级别(即所有事物前面的自定义代理服务)上执行此操作。

0 投票
2 回答
3545 浏览

java - 使用 Jpcap 创建反向代理

我需要创建一个程序来接收 HTTP 请求并将这些请求转发到 Web 服务器。

图 http://img269.imageshack.us/img269/1862/h98trsly.jpg

我只使用 Java 套接字成功地做到了这一点,但客户端需要在 Jpcap 中实现该程序。我想知道这是否可能,以及我应该为这个项目阅读哪些文献。

这就是我现在通过将 Jpcap 教程中的片段拼接在一起所得到的:

任何帮助将不胜感激。谢谢你。

0 投票
1 回答
4467 浏览

python - Nginx 反向代理 POST 请求背后的 CherryPy 损坏/截断

我已将使用 Cherrypy 3.1.2 的应用程序放在配置为反向代理的 Nginx 后面。GET 请求一切正常,但所有 POST 请求都返回 HTTP 400 - 格式错误的标头。

我追踪到 CherryPy WSGI-Server 源代码以查看请求处理代码,发现如果 GET 请求的第一个请求行正确读取,例如:

对于 POST 请求,它就像:

因此,对于我的应用程序从 Nginx 接收的 POST 请求,而不是包含 GET/POST 请求行后跟 HTTP 标头的正确格式的请求:

  1. 第一个 HTTP 标头行从开头截断了一些字节
  2. 然后是一个空行,指示结束 od HTTP 标头
  3. 然后是“POST /home HTTP/1.0”,这显然是请求的第一行。
  4. 编辑:这是请求的结束,所以也没有应该遵循 HTTP POST 标头的正文数据。

此外,从 p.1 截断的字节数似乎取决于表单上有多少 POST 数据,例如,我在 /home FORM 字段中键入的字符越多,HTTP 标头中的字符就越多被删除。

显然,Nginx 在将标头传递给上游服务器(我的应用程序)时以某种方式破坏了标头。
但是:当我只是为了测试使 Nginx 重定向到一些外部网站(也使用 POST 请求)时 - 一切都很好。

所以我现在很困。

我的配置是:Windows XP Prof、Python/2.5.1、CherryPy/3.1.2、Nginx/0.8.32
浏览器:FireFox 2.0、IE 7.0
我的应用程序(独立运行)通常在多种配置下工作和测试。

我使用非常基本的 Nginx 配置,例如:

尽管尝试了网上找到的许多其他 proxy_pass 示例和配置。

任何想法在哪里寻找问题?Nginx 配置、我的 CherryPy 应用程序或其他地方?

新:我发现它可以正常工作,但仅适用于正文内容长度为零的 POST 请求(在没有任何字段的情况下为空进行测试)。
并验证从开头截断的字节数等于 Content-length + 一些小的 const 数(可能是 2)。

0 投票
1 回答
320 浏览

apache - 反向代理动态网络服务器加载

有没有办法从反向代理动态加载和卸载网络服务器?

例如,假设我有一个由 100 台 apache 服务器组成的集群,并且我想修补这些服务器。我希望有一个设置,其中我有一个更新的服务器池和一个“正在更新”的服务器池。我希望反向代理知道正在修补的内容,而不是从这些网络服务器中读取的内容。

我不想只使用配置文件来配置反向代理。

0 投票
2 回答
720 浏览

ssh - 代理/服务总线/反向 SSH

试图找出将一堆运行 WCF 服务的客户端计算机轻松连接到广域网上的 LAMP 服务器的最佳方法....

目前只是用 DynDNS 设置每个客户端,并在路由器上进行端口转发......绝对不是部署的最佳情况。

理想情况下,他们希望运行一个简单的程序,自动将它们连接到 LAMP 服务器......

谁能指出我正确的方向?

我应该查看反向 SSH、Windows Azure AppFabric ServiceBus 吗?

0 投票
7 回答
20635 浏览

ruby-on-rails - nginx 可以用作后端 websocket 服务器的反向代理吗?

我们正在开发一个需要利用 html5 websockets 的 Ruby on Rails 应用程序。目前,我们有两个独立的“服务器”:我们的主应用程序在 nginx+passenger 上运行,以及一个使用 Pratik Naik 的Cramp框架(在Thin上运行)的独立服务器来处理 websocket 连接。

理想情况下,当需要部署时,我们会在 nginx+passenger 上运行 rails 应用程序,并且 websocket 服务器将代理在 nginx 后面,因此我们不需要让 websocket 服务器运行在不同的端口上。

问题是,在这个设置中,nginx 似乎过早地关闭了与 Thin 的连接。与瘦服务器的连接成功建立,然后立即关闭并显示 200 响应代码。我们的猜测是 nginx 没有意识到客户端正在尝试为 websocket 流量建立一个长时间运行的连接。

诚然,我对 nginx 配置并不是那么精通,那么,甚至可以将 nginx 配置为 websocket 服务器的反向代理吗?还是我必须等待 nginx 为新的 websocket 握手提供支持?假设要求应用程序服务器和 websocket 服务器都在端口 80 上侦听,这是否意味着我现在必须在没有 nginx 的单独服务器上运行 Thin?

提前感谢您的任何意见或建议。:)

-约翰