0

我正在尝试使用 mod_proxy 配置 Apache 以在本地开发 Dart Web 应用程序,但我似乎无法正确设置它。

在我的 httpd.conf 中,我启用了以下几行:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Include conf/extra/httpd-vhosts.conf

在 httpd-vhosts.conf 我试图设置我需要的东西,但它似乎没有工作。我有一个使用 Jetty 从 Eclipse 运行的 Spring Web 应用程序。这样就可以了http://localhost:8080。然后我从 Dart 编辑器运行 Dart,它最终启动127.0.0.1:3030(尽管像“登录”这样的请求的总路径是:)http://127.0.0.1:3030/C:/Users/CorayThan/dart/BlightedRealmUi/web/out/login

无论哪种方式,我都试图让 apache 将我的请求从 127.0.0.1:3030 重定向到 localhost:8080。我尝试在 httpd-vhosts.conf 中这样做:

<VirtualHost *:80>
    ServerAdmin test@localhost
    ServerName 127.0.0.1:3030

    ProxyPass / http://localhost:8080
    ProxyPassReverse / http://localhost:8080

    ErrorLog "logs/proxy-error.log"
</VirtualHost>

但它似乎根本不起作用。谁能建议我如何解决它,或者首先建议一个更好的方法来做到这一点?(我不想使用 CORS 或 Jsonp,我只想要一个简单的跨浏览器兼容 hack 进行开发。)

4

2 回答 2

1

我不确定你能做到这一点,你的 VHost 必须监听 3030,而不是上面的 80 来执行代理功能,因为 Dart 正在使用这个端口,所以下面是 Vhost 的摘录我用来从 Dartium 代理到 CouchDb 服务器的文件,以允许使用 CORS 进行基于浏览器的 couchdb 客户端访问,但这可能不是您想要的:-

<VirtualHost *:8080>
    <Proxy http://141.196.22.210:5984>
        Order deny,allow
        Allow from all 
    </Proxy> 
    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} ^OPTIONS
    Header set Access-Control-Allow-Origin http://127.0.0.1:3030
    Header set Access-Control-Allow-Credentials true
    Header set Access-Control-Allow-Headers Content-Type
    Header merge Access-Control-Allow-Headers Authorization
    Header merge Access-Control-Allow-Headers Destination
    Header set Access-Control-Allow-Methods GET
    Header merge Access-Control-Allow-Methods POST
    Header merge Access-Control-Allow-Methods PUT 
    Header merge Access-Control-Allow-Methods OPTIONS
    Header merge Access-Control-Allow-Methods DELETE 
    Header merge Access-Control-Allow-Methods HEAD 
    Header merge Access-Control-Allow-Methods COPY
    Header set Access-Control-Max-Age 3600 

    ProxyRequests off
    ProxyPreserveHost Off
    KeepAlive Off

    ProxyPass / http://141.196.22.210:5984/ nocanon
    ProxyPassReverse / http://141.196.22.210:5984/
</VirtualHost>

因此,当我的客户端应用程序登录到 Couch 时,它使用 141.196.22.210:8080。

于 2013-08-15T08:53:14.140 回答
1

我遇到了同样的问题,我通过为 tomcat 和 dart 应用程序创建一个带有代理的虚拟主机来解决它。粗略地说,这是我的虚拟主机:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName dartapp

    <Location "/tomcat-application-context/">
        ProxyPass "http://localhost:8080/tomcat-application-context/"
        ProxyPassReverse "http://localhost:8080/tomcat-application-context/"
    </Location>
    <Location "/dart/">
        ProxyPass "http://127.0.0.1:3030/"
        ProxyPassReverse "http://127.0.0.1:3030"
    </location>
</VirtualHost>

通常,当您“在 Dartium 中运行”时,您将使用 dart 应用程序的完整路径访问该应用程序:

http://127.0.0.1:3030/full/path/to/web/app.html

相反,使用您的 /full/path/to/web/app.html 以您的代理位置为前缀(即 /dart/full/path/to/web/app.html)访问您的 apache 虚拟主机:

http://dartapp:80/dart/full/path/to/web/app.html
于 2013-09-08T21:24:07.780 回答