【问题标题】:Configure Apache to avoid cross domain call with Dart配置 Apache 以避免使用 Dart 进行跨域调用
【发布时间】:2013-08-17 08:06:30
【问题描述】:

我正在尝试使用 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 进行开发。)

【问题讨论】:

    标签: apache apache2 dart mod-proxy dart-editor


    【解决方案1】:

    我不确定你能做到这一点,你的 VHost 必须监听 3030,而不是上面的 80 来执行代理功能,因为 Dart 正在使用这个端口,所以它不能做,下面是一个摘录从我用来从 Dartium 代理到 CouchDb 服务器的 Vhost 文件,以允许使用 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。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我通过为 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多