Mod_proxy服务器流,用于通过托管的JavaScript应用程序发出HTTP请求

时间:2013-08-01 16:20:12

标签: javascript apache node.js angularjs mod-proxy

任何人都可以提供一个适度详细的代理服务器流来通过托管的javascript应用程序发出HTTP请求,这是一个在我的情况下托管在apache服务器端口:3000上的angularjs / node应用程序。我正在打电话给外面的服务,并且不允许使用砖墙。我已经看到很多建议在apache上使用mod_proxy的例子,但它们都缺乏细节,并假设有先前的基本代理配置知识。我的假设是,这是一个需要克服的常见问题,但我需要第一时间举手。我的主要问题是:

  1. 我可以在一台服务器上使用一个IP地址实现此功能,还是将一台服务器用于主机,一台服务器用于mod_proxy?

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

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

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

1 个答案:

答案 0 :(得分:1)

经过一些试验和错误后想出来。这就是我所拥有的......

  1. 我可以在一台服务器上使用一个IP地址实现此功能,还是将一台服务器用于主机,一台服务器用于mod_proxy? A:具有一个IP地址的ON服务器工作正常。所有代理功能都通过一个端口处理,在我的例子中是:9000。端口号的选择取决于您。 9000只是一个很高的数字,并没有与任何其他节点功能冲突。从我所知道的情况来看,它似乎也是一个不成文的标准。

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

    由于我使用SSL,所有端口:80个HTTP请求都被重写为HTTPS

  3.     VirtualHost *:80
          RewriteEngine On
          RewriteCond %{HTTPS} off
          RewriteRule (.*) http(s)://%{HTTP_HOST}%{REQUEST_URI}
        /VirtualHost
    



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

        VirtualHost *:443
          RewriteEngine On
          ProxyRequests Off
          SSLEngine on
          SSLProxyEngine on
    
          SSLCertificateFile /pathToCert/sslCert.crt
          SSLCertificateKeyFile /pathToKey/sslKey.key
    
          Location /
              ProxyPass http://localhost:3000/ 
              ProxyPassReverse http://localhost:3000/
          /Location
    
        /VirtualHost
    



    我已将端口:9000指定为我的跨域HTTP POST请求的反向代理。 ProxyPass和ProxyPassReverse指令实质上是用我的域地址重写我发出的HTTP请求的URL。

    https://MySite.com:9000/?request&params&here

    将成为

    https://SomeOtherSiteThanMine.com/?request&params&here


    因此,欺骗浏览器以为我正在向我自己的域提出请求。还要注意“Header set”行,它们使请求CORS与我的代理兼容。

        VirtualHost *:9000
          RewriteEngine On
          ProxyRequests Off
    
          SSLEngine on
          SSLProxyEngine on
    
          SSLCertificateFile /pathToCert/sslCert.crt
          SSLCertificateKeyFile /pathToKey/sslKey.key
    
          ProxyPass / https://SomeOtherSiteThanMine.com/
          ProxyPassReverse / https://SomeOtherSiteThanMine.com/
    
          Header set Access-Control-Allow-Origin "*"
          Header set Access-Control-Allow-Methods "POST"
        /VirtualHost
    




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


    我只是走错了一条单行道吗? A:没有,最终完美地完成了工作。


    如果有人发现方法存在问题,请务必插入。我只是拼凑了一些含糊不清的例子。