Proxy Configuration

If your web pages are not served by the server running the server side MapFish services, you will need to configure a proxy to work around the same origin policy.

Two methods are described in the following sections, but the first one is recommended.

Apache mod_proxy

If your web pages are served by apache, use mod_proxy.

For that, you need to check that mod_proxy is enabled. On a Debian/Ubuntu system, you do that by running the following command as root:

a2enmod rewrite
a2enmod proxy
a2enmod proxy_http

Then, you must add some lines to your server configuration, inside the <virtualHost> section of your choice (for the default website on Debian/Ubuntu, you edit the /etc/apache2/sites-enabled/000-default file).

Example with local services, but on different ports

The apache configuration:

    RewriteEngine On
    RewriteRule /pylons/(.*) http://localhost:5000/$1 [P]
    RewriteRule /tomcat/(.*) http://localhost:8180/$1 [P]
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>

Don't forget to replace localhost and the port numbers if it's not what you want.

Make apache reload it's configuration (on Debian/Ubuntu, run apache2ctl graceful as root).

Now, you can test your proxy with this URL (if you have tomcat installed with the print servlet): http://localhost/tomcat/print-servlet-1.1/

The client side (don't forget that the HTML pages must be served by the same virutalHost the proxy is configured on) must be configured like that (in the client/examples/examples.js file):

  OpenLayers.ProxyHost = null;
  mapfish.SERVER_BASE_URL = '/pylons/';

If you want to use the tomcat print service, you have to configure your print widgets like that:

  {
     xtype: 'print-simple',
     ...
     configUrl: '/tomcat/print-servlet-1.1/pdf/info.json',     
     ...
  }

Example with the services from demo.camptocamp.com

For example, put that if you want to use the demo.camptocamp.org infrastructure:

    RewriteEngine On
    RewriteRule /demo/(.*) http://demo.mapfish.org/mapfishsample/1.1/$1 [P]
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>

Make apache reload it's configuration (on Debian/Ubuntu, run apache2ctl graceful as root).

Now, you can test your proxy with this URL: http://localhost/demo/mapfish.png

The client side (don't forget that the HTML pages must be served by the same virutalHost the proxy is configured on) must be configured like that (in the client/examples/examples.js file):

  OpenLayers.ProxyHost = null;
  mapfish.SERVER_BASE_URL = '/demo/';

proxy.cgi script

Copy the client/examples/proxy.cgi script in you apache CGI directory (on Debian/Ubuntu, it's located in /usr/lib/cgi-bin) and make sure it's executable (chmod a+rx /usr/lib/cgi-bin/proxy.cgi).

By default, your apache should be configured to run that as a script. Your configuration should already contain something like that:

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

Then, you must edit the proxy.cgi script to add the list of hosts you want to allow on the following line:

allowedHosts = ['demo.mapfish.org', 'localhost:5000']

Now, you can test your proxy with this URL: http://localhost/cgi-bin/proxy.cgi?url=http://demo.mapfish.org/mapfishsample/1.1/mapfish.png

The client side (don't forget that the HTML pages must be served by the same virutalHost the proxy is configured on) must be configured like that (in the client/examples/examples.js file):

  OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
  mapfish.SERVER_BASE_URL = 'http://demo.mapfish.org/mapfishsample/trunk/';