任何人都可以提供一个适度详细的代理服务器流来通过托管的javascript应用程序发出HTTP请求,这是一个在我的情况下托管在apache服务器端口:3000上的angularjs / node应用程序。我正在打电话给外面的服务,并且不允许使用砖墙。我已经看到很多建议在apache上使用mod_proxy的例子,但它们都缺乏细节,并假设有先前的基本代理配置知识。我的假设是,这是一个需要克服的常见问题,但我需要第一时间举手。我的主要问题是:
我可以在一台服务器上使用一个IP地址实现此功能,还是将一台服务器用于主机,一台服务器用于mod_proxy?
如果我可以在一台服务器上执行此操作。如果是这样,通用设置(A到B)是什么?一个或两个虚拟主机?
解释ProxyPass和ProxyReversePass指令。我是否需要在此处添加我的外部服务URL?
我只是走错了一条单行道吗?
答案 0 :(得分:1)
经过一些试验和错误后想出来。这就是我所拥有的......
我可以在一台服务器上使用一个IP地址实现此功能,还是将一台服务器用于主机,一台服务器用于mod_proxy? A:具有一个IP地址的ON服务器工作正常。所有代理功能都通过一个端口处理,在我的例子中是:9000。端口号的选择取决于您。 9000只是一个很高的数字,并没有与任何其他节点功能冲突。从我所知道的情况来看,它似乎也是一个不成文的标准。
如果我可以在一台服务器上执行此操作。如果是这样,通用设置(A到B)是什么?一个或两个虚拟主机?
答:这可能只是通过查看我的Apache虚拟主机设置来解释...
由于我使用SSL,所有端口:80个HTTP请求都被重写为HTTPS
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¶ms&here
将成为
https://SomeOtherSiteThanMine.com/?request¶ms&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:没有,最终完美地完成了工作。
如果有人发现方法存在问题,请务必插入。我只是拼凑了一些含糊不清的例子。