Synology DSM: Visitor's Real IP Address Behind NGINX Proxy Manager

Abstract: Fix Synology DSM backend apps receiving internal NGINX Proxy Manager IPs instead of real visitor addresses by adding proxy headers.

Created: 2026-08-02 by
Configure Synology DSM to pass the visitor's real IP address behind NGINX Proxy Manager by adding specific proxy headers in your host settings. This ensures that backend applications receive the actual client IP instead of the internal gateway address, which is critical for logging, security rules, and geolocation features.

Understanding the Problem

When you route traffic through NGINX Proxy Manager (NPM), the reverse proxy acts as an intermediary between the visitor and your Synology Docker containers or services. By default, NPM forwards requests using its own internal network interface. Consequently, any application listening on that port sees the source IP as the internal container gateway or the NPM host itself, rather than the true public IP of the user.

This behavior breaks several important functionalities. Many web applications use the client IP for rate limiting, access control lists, or analytics. If every request appears to come from a single internal IP, these systems fail to function correctly. Additionally, security logs become useless because they cannot distinguish between different users or identify potential attacks originating from distinct external sources.

Configuring NGINX Proxy Manager Headers

The solution lies in configuring NPM to append standard HTTP headers that convey the original client information. Most modern web servers and frameworks recognize these headers automatically if they are present. You need to modify the configuration for each specific host within the NGINX Proxy Manager interface.

  1. Navigate to the Hosts menu in NGINX Proxy Manager.
  2. Select the domain or subdomain associated with your service.
  3. Click on the Advanced tab within the host configuration window.
  4. Locate the field labeled Custom Nginx Configuration.

In this text area, you must insert directives that tell NGINX to pass the relevant headers. The most common and reliable method involves setting the X-Forwarded-For, X-Real-IP, and X-Forwarded-Proto variables. These headers are industry standards supported by Apache, Nginx, Node.js, Python, and PHP backends.

Required Configuration Directives

Add the following lines to the Custom Nginx Configuration box. These lines ensure that the original client IP is preserved and passed down the chain.

# Pass the original client IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

The $remote_addr variable captures the immediate connection source, which will be the NPM container when processed by the backend. However, because we also set X-Forwarded-For, many frameworks parse this header to find the leftmost IP, which represents the original client. The X-Forwarded-Proto header informs the backend whether the original request was HTTP or HTTPS, ensuring that redirects and secure cookies work correctly.

Verifying the Setup

After saving the changes, it is essential to verify that the headers are being transmitted correctly. You can do this by checking the access logs of your backend application or by using a simple diagnostic endpoint.

  • If your application provides a debug page or API endpoint that echoes request headers, visit it via the proxied domain.
  • Look for the X-Real-IP and X-Forwarded-For fields in the response.
  • The value should match your current public IP address, not an internal RFC1918 address like 172.x.x.x or 10.x.x.x.

If the values are still incorrect, clear your browser cache and ensure that no other proxy layers (such as Cloudflare) are stripping or modifying these headers before they reach NPM. In some cases, you may need to restart the NPM container or the Synology NAS to apply deep network changes, though usually, the hot-reload feature of NPM applies these custom configurations immediately.

Common Pitfalls and Troubleshooting

Sometimes, even with correct headers, the backend application might ignore them due to misconfiguration. For instance, older versions of certain software require explicit plugins or modules to trust forwarded headers. Ensure that your application is configured to trust the proxy. In Apache, this might involve loading the mod_remoteip module. In Node.js applications using Express, you need to set app.set('trust proxy', true).

Another issue arises if you have multiple proxies in front of NPM. If Cloudflare is used, the real IP is often found in the CF-Connecting-IP header rather than X-Forwarded-For. In such scenarios, you might need to adjust the NPM configuration to prioritize the Cloudflare header. Refer to our guide on NGINX X-Accel-Redirect 404 Error: Path Config Seems Correct for more insights on handling complex header chains and path resolutions.

Additionally, check for syntax errors in the custom configuration block. A single misplaced character can cause NPM to reject the configuration or fall back to defaults, silently failing to add the headers. Always review the NPM logs for error messages after saving changes.

Security Implications

Passing real IP addresses enhances security by allowing accurate blocking of malicious actors. However, it also exposes your infrastructure to IP spoofing if not handled properly. Since you are controlling the entire stack on Synology DSM, the risk is minimal compared to public-facing setups. Still, ensure that your backend applications validate these headers and do not blindly trust them if exposed directly to the internet without NPM.

By correctly implementing these header passes, you restore full visibility into your user base, enabling precise logging, effective rate limiting, and accurate geographic analytics across all services hosted on your Synology NAS.

Frequently Asked Questions

Why does my application still show the internal IP after adding headers?

Your application likely needs to be explicitly configured to read and trust the forwarded headers. Simply sending the headers is not enough; the backend software must have logic enabled to parse X-Forwarded-For or X-Real-IP instead of relying solely on the socket connection address.

Can I use this method for all hosts in NGINX Proxy Manager?

Yes, you can apply these custom configurations to any host individually. However, if you manage many similar services, consider creating a template or using global default server blocks if your version of NPM supports it, to avoid repetitive manual entry.

What if I am behind Cloudflare, which header should I use?

If Cloudflare is in front of NPM, the X-Forwarded-For header may contain Cloudflare's IPs. You should configure NPM to pass the CF-Connecting-IP header to your backend, or configure your backend to trust Cloudflare's IP ranges and read the first IP in the X-Forwarded-For list.

Does this affect performance significantly?

No, adding these headers has negligible impact on performance. They are lightweight string manipulations performed by NGINX during the proxying process and do not introduce measurable latency or increased CPU usage.

How do I reset the custom configuration if it breaks the site?

If the custom configuration causes a 502 Bad Gateway or prevents NPM from starting, simply edit the host again and delete the contents of the Custom Nginx Configuration box. Save the changes, and NPM will revert to its default header handling, restoring connectivity.

Latest News

How to Display Output of xterm Command in Terminal Screen using Cron

Resolve the inability to display xterm output in a terminal screen from cron by redirecting logs or using wall instead of insecure X11 workarounds.

Read More
Expose Local Server on VPS Preserving Real Client IPs (OS Level)

Resolve VPS logging showing only gateway IPs by configuring reverse proxies to forward real client addresses via X-Forwarded-For headers.

Read More
How to Clear Recent Files History in Linux without Deleting Actual Files?

Clear recent files history in Linux by deleting ~/.local/share/recently-used.xbel without removing the actual files.

Read More
Best HDD Copy Strategy: Manually Syncing and Rewriting Scratch

Resolve data drift between two 4TB hard drives by using rsync with the --delete flag to manually sync and rewrite scratch data for an exact mirror.

Read More
Understanding Bash Prompt Abbreviations: An Overview

Resolve repetitive typing errors by creating and persisting Bash aliases in the .bashrc file for improved command-line efficiency.

Read More
Free Tools and Methods to Log Real-Time Performance Details in Task Manager

Log real-time CPU and memory metrics to CSV files using Windows Performance Monitor Data Collector Sets to troubleshoot system slowness.

Read More
Contact Qatar Airways Customer Service: Phone Number, Help Center, and More

Resolve urgent Qatar Airways reservation issues like flight changes and baggage claims using the US phone number +1801-855-5905 or online self-service tools.

Read More
Windows 11: Alt Codes Displaying Wrong Characters - Solutions

Resolve Windows 11 Alt codes showing wrong characters by verifying the US keyboard layout and enabling Num Lock.

Read More
Run Programs with Elevated Privileges: A Comprehensive Guide

Eliminates the need to type sudo for frequent administrative tasks by configuring .bashrc aliases or functions.

Read More
Dynamically Changing Dates in Excel Formulas Using Cells

Eliminate manual date updates in Excel by using cell references to create dynamic formulas that automatically adjust calculations when input dates change.

Read More
Granting Edit Access to a Specific Excel Sheet in an Office 365 User Email ID-Based Login

Excel Online lacks native sheet-level permissions, so users must split workbooks or use worksheet protection to isolate edit access for specific tabs.

Read More
Creating Network Load on Local Wi-Fi from One PC

Generate sustained Wi-Fi bandwidth load from a single PC using a VM SFTP server to test router stability and throughput.

Read More
Changing the Default Editor for Batch Files in Windows 11's File Explorer

Resolve the issue of batch files opening in Notepad by changing the default editor to a preferred application like VS Code.

Read More
Gain WiFi Connection Minutes Before Losing it by Changing MAC Address

Bypass MAC address filtering to restore WiFi connectivity temporarily when a device is blocked by network administrators.

Read More
Photos Folders Turned Black: Troubleshooting Picture Applications on Windows

Resolve black screens in Windows Photos by resetting the app, updating graphics drivers, and repairing system files.

Read More
Troubleshooting High CPU Temperature Values: A Step-by-Step Guide

Resolve high CPU temperatures and thermal throttling by monitoring with Speedfan, cleaning dust from cooling components, and replacing degraded thermal paste.

Read More
Make cURL establish TLS connection with CA unknown

Resolve cURL TLS connection failures with unknown or self-signed certificates by using the --insecure flag to bypass CA validation.

Read More
Troubleshooting Incorrect Network Metrics Values in Grafana, Prometheus, InfluxDB, and Telegraf

Fix incorrect network metrics in Grafana, Prometheus, InfluxDB, and Telegraf by verifying interface selection, resolving unit mismatches, and handling counter resets.

Read More
Start Another Terminal Window (cmd.exe) Windows Repair/Troubleshoot

Provides step-by-step instructions to access the Windows Command Prompt via bootable media for advanced system repair and troubleshooting.

Read More
Thinkpad P1 Gen 6: Sudden Thunderbolt 3 Dock USB-C Charging Stopped Working

Resolve sudden Thunderbolt 3 dock USB-C charging and internet failure on ThinkPad P1 Gen 6 by updating firmware, resetting the dock, and adjusting power settings.

Read More
ASUS Windows 11 Laptop: Internet Connection Issue with Hotspot

Resolve ASUS Windows 11 laptop spinning wheel issue when connecting to mobile hotspot by resetting network stack, disabling IPv6, and adjusting power settings.

Read More
Developing iOS Project with Firebase: Logging in and Sending Push Notifications

Integrates Firebase to enable secure user authentication and push notifications in iOS applications.

Read More
Troubleshooting Bash Script with Suspected Issues of Spaces, Dashes, Filenames and Quoting

Resolve Bash script failures caused by word splitting, globbing, and special characters in filenames by applying proper quoting techniques.

Read More
Populating OneDrive Folder for Local Backup without Affecting Remote Files

Prevent OneDrive from deleting remote files during Windows reinstallation by unlinking the account or using symbolic links to isolate local data.

Read More
Force First Frame as Keyframe Without Re-encoding: A Quick Solution

Resolve inaccurate seeking and playback glitches by re-encoding video to ensure the first frame is a valid keyframe.

Read More
Find Information in Database Using WSL (Ubuntu) on Windows-10

Resolve database connection issues from WSL Ubuntu on Windows 10 by configuring client tools and network access to query remote or local servers.

Read More
Configuring a New Router with Different Networks: One Family, One Guest

Resolve IP conflicts and isolate guest traffic by configuring a second router with a distinct subnet via its WAN port.

Read More
Quickly Open Multiple Stock Websites with a Single Command

Solve the problem of manually opening multiple stock research websites by creating a single command to launch them simultaneously on Windows, macOS, or Linux.

Read More
Improved Adobe Acrobat Search Experience: Access Advanced Search with Ease

Access advanced search filters like case sensitivity and regex in Adobe Acrobat by clicking More Options in the Find bar.

Read More
Port Forwarding VM via OpenVPN: A Comprehensive Guide

Configure OpenVPN server and iptables to forward specific ports from VPN clients to a virtual machine's internal IP address.

Read More
Understanding Partitions in the 1980s: A Look Back at MS-DOS and Master Boot Record

Explains how the Master Boot Record and partition table enabled MS-DOS to manage multiple disk volumes on a single physical drive.

Read More
Windows 10 Enterprise: Keyboard Not Detected in Managed Organization with Admin Privileges

Resolve Windows 10 Enterprise keyboard detection failures caused by Group Policy restrictions, driver corruption, or USB enumeration errors.

Read More
Can't Find x86_64 Versions of Applications on MacOS arm64 (M1)

Resolve missing x86_64 app issues on M1 Macs by installing Rosetta 2 and reinstalling apps as universal binaries.

Read More
How to Hide Installation Source for an Android App

Manage Android app installation source visibility by using USB transfers or file managers to reduce browser traces and isolate data via work profiles.

Read More
Connecting Momentus 4200.2 ST9808210A Hard Drive via USB Cable

Resolve inability to access Seagate Momentus 4200.2 ST9808210A hard drive by connecting it via USB using a compatible SATA-to-USB adapter and configuring the disk in Windows.

Read More