0

任何人都可以提供一个适度详细的代理服务器流程,用于通过托管的 javascript 应用程序发出 HTTP 请求,在我的情况下,这是一个托管在 apache 服务器端口:3000 上的 angularjs/node 应用程序。我正在调用外部服务并击中不允许的跨源砖墙。我已经看到很多建议在 apache 上使用 mod_proxy 的示例,但它们都缺乏详细信息,并假设之前有基本的代理配置知识。我的假设是这是一个需要克服的常见问题,但我第一次需要一个小手。我的主要问题是:

  1. 我可以使用一个 IP 地址在一台服务器上实现此目的,还是使用一台服务器托管和一台 mod_proxy ?

  2. 如果我可以在一台服务器上做到这一点。如果是这样,什么是通用设置(A 到 B)?一两个虚拟主机?

  3. 解释 ProxyPass 和 ProxyReversePass 指令。我需要在此处添加我的外部服务 URL 吗?

  4. 我只是在一条单行道上走错路了吗?

4

1 回答 1

1

经过一番反复试验后想通了。这就是我所拥有的...

  1. 我可以使用一个 IP 地址在一台服务器上实现此目的,还是使用一台服务器托管和一台 mod_proxy ?
    答:只有一个 IP 地址的 ON 服务器可以正常工作。所有代理功能都通过一个端口处理,在我的例子中是:9000。端口号的选择完全取决于您。9000 只是一个很大的数字,并没有与任何其他节点功能冲突。据我所知,这似乎也是一个不成文的标准。

  2. 如果我可以在一台服务器上做到这一点。如果是这样,什么是通用设置(A 到 B)?一两个虚拟主机?
    答:这可能最好通过查看我的 Apache 虚拟主机设置来解释......

    因为我使用的是 SSL,所以所有端口:80 HTTP 请求都被重写为 HTTPS

    虚拟主机 *:80
      重写引擎开启
      RewriteCond %{HTTPS} 关闭
      RewriteRule (.*) http(s)://%{HTTP_HOST}%{REQUEST_URI}
    /虚拟主机



我在端口:3000 上运行节点应用程序,因此所有流量都从标准:443 路由到端口:3000,反之亦然。就公众而言,基本上端口:3000 通过服务器代理成为主域名。

    虚拟主机 *:443
      重写引擎开启
      代理请求关闭
      SSLEngine 开启
      SSLProxyEngine 开启

      SSLCertificateFile /pathToCert/sslCert.crt
      SSLCertificateKeyFile /pathToKey/sslKey.key

      地点 /
          ProxyPass http://localhost:3000/
          ProxyPassReverse http://localhost:3000/
      /地点

    /虚拟主机



我已将端口 :9000 分配为我的跨域 HTTP POST 请求的反向代理。ProxyPass 和 ProxyPassReverse 指令本质上重写了我使用我的域地址发出的 HTTP 请求的 url。

https://MySite.com:9000/?request¶ms&here

会变成

https://SomeOtherSiteThanMine.com/?request¶ms&here


从而欺骗浏览器以为我正在向我自己的域发出请求。另请注意使请求 CORS 与我的代理兼容的“标头集”行。

    虚拟主机 *:9000
      重写引擎开启
      代理请求关闭

      SSLEngine 开启
      SSLProxyEngine 开启

      SSLCertificateFile /pathToCert/sslCert.crt
      SSLCertificateKeyFile /pathToKey/sslKey.key

      ProxyPass / https://SomeOtherSiteThanMine.com/
      ProxyPassReverse / https://SomeOtherSiteThanMine.com/

      标头集 Access-Control-Allow-Origin "*"
      标头集访问控制允许方法“POST”
    /虚拟主机




3. 解释 ProxyPass 和 ProxyReversePass 指令。我需要在此处添加我的外部服务 URL 吗?
A:见上面


4. 我是不是在单行道上完全走错了路?
A:不,最终完美地解决了问题。


如果有人发现该方法有问题,请务必加入。我只是拼凑了一些模糊描述的示例。

于 2013-08-30T18:35:18.363 回答