Skip to content

NGINX

Snowplow NGINX Integration

Integrating Snowplow collector into an Nginx reverse proxy allows you to create a Snowplow collector firing on the same domain as your website, on a given path, thus bypassing the Safari ITP IP address limitation. See Safari ITP.

Download Safari Technology Preview to observe Intelligent Tracking Prevention (ITP) in action.

WITHOUT Nginx reverse-proxy (below) even though the domain is the same as the website (sp.snowcatcloud.com) the cookie is set to expire in 7 days (March 27th 2023).

WITH Nginx reverse-proxy (below) the cookie is set to expire in 1 year (March 19th 2024).

WARNING

Setup is straightforward but requires your website to be served through Nginx.

Step 1: Configure NGINX Reverse Proxy

The NGINX Configuration below will map www.yoursite.com/collectorpath to sp.yourcollector.com/com.snowplowanalytics.snowplow/tp2, turning your website path into a Snowplow collector.

sh
location /collectorpath {
  proxy_pass                 https://sp.yourcollector.com/com.snowplowanalytics.snowplow/tp2;
  proxy_read_timeout         90;
  proxy_connect_timeout      90;
  proxy_redirect             off;
  proxy_set_header           Host sp.yourcollector.com;
  proxy_set_header           X-Real-IP $remote_addr;
  proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_ssl_name             sp.yourcollector.com;
  proxy_ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
  proxy_ssl_server_name      on;
  proxy_buffer_size          256k;
  proxy_buffers              16 384k;
  proxy_busy_buffers_size    384k;
  break;
}

Step 2: Configure your JS Tracker

In your Snowplow initialization script, configure the collector and postPath to reflect the new collector URL and path.

js
// Note how it points to www.yoursite.com
snowplow("newTracker", "spc", "www.YOURSITE.COM", {
        appId: "aid",
        discoverRootDomain: true,
        postPath: '/collectorpath', // Collector path override
        cookieSameSite: "Lax", // Recommended
        eventMethod: "post",
        bufferSize: 1,
        cookieLifetime: 63072000,
        stateStorageStrategy: "cookieAndLocalStorage",
        contexts: {
          webPage: true,
          performanceTiming: true,
        },
      });

Go to www.YOURSITE.COM, while using the Snowplow Chrome Debugger and observe the Snowplow hit, it should return 200 and you should see the cookies set with one year expiration date, even when using Safari Technology Preview.

INFO

If you would like to see a working example, go to SnowcatCloud and look for polarbear in the Network tab, or use SnowcatCloud's Chrome Extension.