@@ -9,6 +9,42 @@ html_escape() {
99 jq -Rnr --arg value " ${1:- } " ' $value | @html'
1010}
1111
12+ TRUSTED_PROXY_CIDRS_VALUE=" ${TRUSTED_PROXY_CIDRS:- } "
13+ REAL_IP_HEADER_VALUE=" ${REAL_IP_HEADER:- X-Forwarded-For} "
14+ REAL_IP_CONFIG=" "
15+
16+ # Real IP resolution applies only to the Umami proxy location, so
17+ # $remote_addr stays the direct peer everywhere else. Unset means trust
18+ # the private ranges reverse proxies normally connect from; internet
19+ # clients cannot spoof these as a source address. Set
20+ # TRUSTED_PROXY_CIDRS=none to disable real IP resolution entirely.
21+ if [ -z " $TRUSTED_PROXY_CIDRS_VALUE " ]; then
22+ TRUSTED_PROXY_CIDRS_VALUE=" 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 fc00::/7"
23+ elif [ " $( printf ' %s' " $TRUSTED_PROXY_CIDRS_VALUE " | tr ' [:upper:]' ' [:lower:]' ) " = " none" ]; then
24+ TRUSTED_PROXY_CIDRS_VALUE=" "
25+ fi
26+
27+ if [ -n " $TRUSTED_PROXY_CIDRS_VALUE " ]; then
28+ if ! printf ' %s' " $REAL_IP_HEADER_VALUE " | grep -Eq ' ^[A-Za-z0-9-]+$' ; then
29+ echo " WARNING: Real IP resolution is disabled because REAL_IP_HEADER contains unsupported characters." >&2
30+ else
31+ SET_REAL_IP_FROM_DIRECTIVES=" "
32+ for TRUSTED_PROXY_CIDR in $( printf ' %s' " $TRUSTED_PROXY_CIDRS_VALUE " | tr ' ,' ' ' ) ; do
33+ if printf ' %s' " $TRUSTED_PROXY_CIDR " | grep -Eq ' ^[0-9A-Fa-f:.]+(/[0-9]{1,3})?$' ; then
34+ SET_REAL_IP_FROM_DIRECTIVES=" ${SET_REAL_IP_FROM_DIRECTIVES} set_real_ip_from ${TRUSTED_PROXY_CIDR} ;
35+ "
36+ else
37+ echo " WARNING: Ignoring TRUSTED_PROXY_CIDRS entry with unsupported characters: ${TRUSTED_PROXY_CIDR} " >&2
38+ fi
39+ done
40+
41+ if [ -n " $SET_REAL_IP_FROM_DIRECTIVES " ]; then
42+ REAL_IP_CONFIG=" ${SET_REAL_IP_FROM_DIRECTIVES} real_ip_header ${REAL_IP_HEADER_VALUE} ;
43+ real_ip_recursive on;"
44+ fi
45+ fi
46+ fi
47+
1248UMAMI_URL_VALUE=" ${UMAMI_URL:- } "
1349UMAMI_WEBSITE_ID_VALUE=" ${UMAMI_WEBSITE_ID:- } "
1450UMAMI_SSL_VERIFY_VALUE=" $( printf ' %s' " ${UMAMI_SSL_VERIFY:- true} " | tr ' [:upper:]' ' [:lower:]' ) "
@@ -99,6 +135,7 @@ upstream umami_backend {
99135 esac
100136
101137 UMAMI_PROXY_CONFIG=" location /x/ {
138+ ${REAL_IP_CONFIG}
102139 proxy_pass ${UMAMI_SCHEME} ://umami_backend${UMAMI_BASE_PATH} /;
103140 proxy_set_header Host ${UMAMI_AUTHORITY} ;
104141 proxy_set_header X-Real-IP \$ remote_addr;
0 commit comments