Skip to content

Commit 11f14d5

Browse files
authored
Merge pull request #18 from Engine-Labs/update-readme-with-short-summary-for-forked-repo
Revise README for Forked Mixpanel Tracking Proxy
2 parents 4107a7d + 4fad9d3 commit 11f14d5

File tree

1 file changed

+24
-82
lines changed

1 file changed

+24
-82
lines changed

README.md

Lines changed: 24 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,36 @@
1-
# Nginx Proxy for Mixpanel
2-
An example nginx config that serves as a proxy to Mixpanel's Ingestion API and JavaScript library endpoints. To learn more, visit our [docs on Tracking via Proxy](https://docs.mixpanel.com/docs/tracking/how-tos/tracking-via-proxy).
1+
# 🚀 Mixpanel Tracking Proxy
32

3+
A lightweight nginx-based HTTP proxy server for Mixpanel tracking API, forked and customized for enhanced tracking capabilities. 📊
44

5-
## Installation
5+
## 📋 Overview
66

7-
There are a few ways you can use this repo to deploy a server that can be use to proxy Mixpanel API requests:
7+
This proxy acts as an intermediary between client applications and Mixpanel's API endpoints, enabling:
88

9-
1. **one-click deploy** to your cloud provider
10-
2. **build a docker image** and run it on your own servers
11-
3. **copy and paste** the nginx settings to your existing nginx config file
9+
- **🎯 Tracking API Proxy**: Forwards requests to `api.mixpanel.com` with proper header management
10+
- **📚 JavaScript Library Proxy**: Serves Mixpanel's client libraries via `/lib.js` and `/lib.min.js`
11+
- **🔀 Decision API Proxy**: Handles feature flag requests via `/decide` endpoint
12+
- **🌍 IP Preservation**: Maintains accurate geolocation tracking through sophisticated IP forwarding
13+
- **🌐 Multi-Region Support**: Configurable for EU and IN data residency requirements
1214

13-
### Option 1: One-Click Deploy
14-
click on a button below to deploy to your favorite cloud provider:
15-
16-
[![Google Cloud Btn]][Google Cloud Deploy]
17-
[<img src=https://www.deploytodo.com/do-btn-blue.svg width=198px />][Digital Ocean Deploy]
18-
[![Railway Btn]][Railway Deploy]
19-
[![Render Btn]][Render Deploy]
20-
21-
22-
<!-- URLS -->
23-
[Google Cloud Btn]: https://binbashbanana.github.io/deploy-buttons/buttons/remade/googlecloud.svg
24-
[Google Cloud Deploy]: https://deploy.cloud.run
25-
26-
[Digital Ocean Btn]: https://www.deploytodo.com/do-btn-blue.svg
27-
[Digital Ocean Deploy]: https://cloud.digitalocean.com/apps/new?repo=https://github.com/mixpanel/tracking-proxy/tree/master
28-
29-
[Railway Btn]: https://binbashbanana.github.io/deploy-buttons/buttons/remade/railway.svg
30-
[Railway Deploy]: https://railway.app/template/_RaWSW
31-
32-
[Render Btn]: https://binbashbanana.github.io/deploy-buttons/buttons/remade/render.svg
33-
[Render Deploy]: https://render.com/deploy?repo=https://github.com/mixpanel/tracking-proxy
34-
35-
36-
<!-- Maybe later? -->
37-
38-
<!-- Heroku's app.json conflicts with GCP 0_o -->
39-
[Heroku Btn]: https://binbashbanana.github.io/deploy-buttons/buttons/remade/heroku.svg
40-
[Heroku Deploy]: https://heroku.com/deploy/?template=https://github.com/mixpanel/tracking-proxy
41-
42-
<!-- Azure is too... complicated -->
43-
[Azure Btn]: https://binbashbanana.github.io/deploy-buttons/buttons/remade/azure.svg
44-
[Azure Deploy]: https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FYOUR_GITHUB_USERNAME%2FYOUR_REPO_NAME%2FYOUR_BRANCH_NAME%2Fpath%2Fto%2Fazuredeploy.json
45-
46-
47-
48-
49-
### Option 2: Docker Image
50-
Assuming you have Docker installed on your system, you can do the following:
51-
52-
1. Clone the repo
53-
`git clone https://github.com/mixpanel/tracking-proxy`
54-
2. Build the Docker image:
55-
`docker build -t mixpanel-proxy .`
56-
3. Run a container using the image:
57-
`docker run --name my-tracking-proxy -d -p 8080:80 mixpanel-proxy`
58-
4. Visit
59-
`http://localhost:8080`
60-
61-
You should see:
62-
63-
```json
64-
{
65-
"error": "Welcome. Get started with our API by visiting https://developer.mixpanel.com/"
66-
}
67-
```
68-
This is same response you would get from visiting https://api.mixpanel.com/ (which means your proxy is working as expected).
69-
70-
You can also verify the nginx config on the command line:
15+
## ⚡ Quick Start
7116

17+
### 🐳 Docker Deployment
7218
```bash
73-
nginx -t -c /etc/nginx/nginx.conf
19+
docker build -t mixpanel-proxy .
20+
docker run -p 8080:80 mixpanel-proxy
7421
```
75-
76-
For production, you would deploy this docker image to whatever servers you run your production services on.
77-
78-
### Option 3: Add locations to your existing Nginx config
79-
If you already have servers running nginx, you can copy and paste the locations from the [nginx.conf](https://github.com/mixpanel/tracking-proxy/blob/master/nginx.conf) file in this repo and adjust the locations to match your preference.
80-
81-
### Additional Configuration
82-
In case you see events tracked to your project, but geo-location properties are not being added correctly, there's likely a configuration issue with passing the IP address through the headers. Within the [nginx configuration]([url](https://github.com/mixpanel/tracking-proxy/blob/2c08e999d4b38aa943fad55884bcfe0ef72bb681/nginx.conf#L31)), by default, we leverage `$http_x_forwarded_for` and pass it through the `X-Real-IP` header to forward the IP from the original client; in some providers, this is not available and you will want to review which header/variable provides the IP address from the client. As an example, in Cloudflare, you need to pass `$realip_remote_addr` instead. You'll want to review the option that applies to your cloud provider.
83-
84-
When you're seeing events ingested into Mixpanel, but no geo-location data included as properties (you don't see the mp_country_code property created, for example), one more aspect to check is if the query string param/value `ip=1` is being passed to our ingestion endpoint. Our client-side libraries, by default (unless you've disabled geo-location tracking), will append `ip=1` to the URL of the ingestion endpoint to indicate we should parse geo-location from the IP address of the incoming request. In some setups, this param might not be included in the request from the proxy, so it's also an aspect to check in this situation.
8522

86-
### EU Residency
87-
This proxy server resolves requests to `api.mixpanel.com`, which points to Mixpanel's primary data centers in the United States. If you are using Mixpanel's **[EU Data Residency](https://docs.mixpanel.com/docs/other-bits/privacy-and-security/eu-residency)**, you will need to change the [nginx.config](https://github.com/mixpanel/tracking-proxy/blob/master/nginx.conf#L34) from `api.mixpanel.com` to `api-eu.mixpanel.com`
23+
### ⚙️ Configuration
24+
The nginx configuration includes:
25+
- ☁️ Cloudflare and Render.com IP range support
26+
- 🐛 Debug headers for troubleshooting
27+
- ⚡ High-performance settings with connection backlog optimization
8828

89-
### IN Residency
90-
This proxy server resolves requests to `api.mixpanel.com`, which points to Mixpanel's primary data centers in the United States. If you are using Mixpanel's **[IN Data Residency](https://docs.mixpanel.com/docs/privacy/in-residency)**, you will need to change the [nginx.config](https://github.com/mixpanel/tracking-proxy/blob/master/nginx.conf#L34) from `api.mixpanel.com` to `api-in.mixpanel.com`
29+
## ✨ Features
9130

92-
### Load Testing
31+
- **🔍 Client IP Preservation**: Advanced IP detection and forwarding logic
32+
- **📝 Debug Logging**: Comprehensive request debugging capabilities
33+
- **⚖️ Load Balancing Ready**: Optimized for high-concurrency environments
34+
- **☁️ Cloud Provider Agnostic**: Works across different hosting platforms
9335

94-
If you wish to load test your proxy, see **[mp-proxy-load-test](https://github.com/ak--47/mp-proxy-load-test/)** for a load testing script with artillery.
36+
🍴 Forked from the original Mixpanel tracking proxy with enhanced debugging and IP handling capabilities.

0 commit comments

Comments
 (0)