Setting up Nginx Traffic Redirect for Subdomains on VPS with Multiple Docker Containers and Cloudflare

Abstract: Configure Nginx to use HTTP 301 redirects instead of proxying for subdomains, preventing SSL conflicts with Cloudflare and avoiding port exposure on a VPS hosting multiple Docker containers.

Created: 2026-09-09 by

To redirect subdomain traffic from a VPS running multiple Docker containers behind Cloudflare, you must configure Nginx to return HTTP 301 or 302 status codes rather than proxying requests. This approach avoids SSL termination conflicts and ensures that browsers correctly update their address bar while respecting the limited port availability on your host machine.

The Problem with Proxying vs. Redirecting

When you have multiple Docker containers running on a single VPS, you often face a constraint where only a few ports (typically 80 and 443) are exposed to the public internet. A common mistake is attempting to use proxy_pass in Nginx for every subdomain. While this works for serving content directly, it creates significant issues when Cloudflare is involved. If you proxy traffic internally, Cloudflare sees the connection as coming from your server. If your internal Docker containers do not have valid SSL certificates configured, Cloudflare’s "Flexible" SSL mode can cause mixed content errors because the origin server speaks plain HTTP while the client expects HTTPS. Furthermore, if you intend to simply route users to different services without serving them yourself, proxying adds unnecessary latency and complexity. A true redirect tells the client's browser to make a new request to a different URL. This shifts the burden of connection handling to the destination service. For example, if app.example.com should go to a backend running on port 8080, a redirect instructs the browser to visit http://example.com:8080 (or a mapped domain). This article explains how to set up these redirects cleanly using Nginx within a Docker environment. For more details on managing Nginx configurations in Docker, see Serve Web Host with NGINX and Direct Subdomain Docker Server: Port.

Configuring Nginx for Subdomain Redirects

The core mechanism for redirection in Nginx is the return directive inside a server block. Unlike proxy_pass, which forwards the request silently, return sends an immediate response code to the client. You need to create a separate server block for each subdomain you wish to redirect. Here is the general structure:
server {
    listen 80;
    server_name app.example.com;

    # Return a permanent redirect
    return 301 http://other-service.example.com$request_uri;
}
In this example, any request to app.example.com will result in the browser receiving a 301 Moved Permanently header. The browser will then automatically navigate to other-service.example.com preserving the original path and query string via $request_uri. If you are redirecting to a specific port on the same domain, ensure the target port is accessible. However, since you are behind Cloudflare, you generally want to avoid exposing raw ports to the public internet due to security risks. It is better to map each subdomain to its own distinct domain name managed by Cloudflare, or use Cloudflare Workers for advanced routing if direct port exposure is unavoidable.

Handling SSL and Cloudflare Integration

Since your origin Docker containers likely lack public SSL certificates, you should not attempt to terminate SSL in Nginx for these redirect blocks unless you are using a unified certificate for all subdomains. Instead, rely on Cloudflare to handle the SSL termination between the user and your VPS. Ensure your Cloudflare DNS records point all relevant subdomains to your VPS IP address. In the Cloudflare dashboard, set the SSL/TLS encryption mode to "Full" or "Full (Strict)". Avoid "Flexible" mode if you want to maintain secure connections end-to-end, although for simple redirects, the browser handles the final handshake with the destination. If you are redirecting to another subdomain that also uses Cloudflare, the SSL context is handled by the respective Cloudflare edge locations. Your Nginx server simply acts as a signpost. This prevents the mixed content issues mentioned earlier because no actual content is being served over HTTP from your Docker containers; only HTTP headers are being exchanged. For insights on securing your setup with proper SSL termination, review Cloudflare SSL Termination with Docker: Host vs. Containers.

Docker Deployment Strategy

To manage these Nginx configurations effectively, deploy Nginx as a dedicated Docker container. Use a volume mount to inject your configuration files into the container. This allows you to update redirect rules without rebuilding the image. Create a directory on your host machine, such as /etc/nginx/conf.d, and place your server block files there. Then, mount this directory into your Nginx container:
volumes:
  - ./nginx/conf.d:/etc/nginx/conf.d
  - ./nginx/logs:/var/log/nginx
This separation ensures that your Nginx instance remains lightweight and focused solely on routing. If you need to add more complex logic later, such as conditional redirects based on headers, you can expand the configuration files in this mounted directory. It is also crucial to ensure that your Docker network allows communication if you were to switch back to proxying, but for redirects, network isolation is less critical since the traffic leaves the VPS entirely after the initial handshake.

Troubleshooting Common Issues

Sometimes redirects may loop if not configured correctly. Ensure that the destination URL does not point back to the same Nginx server unless intended. Also, verify that Cloudflare is not caching your 301 responses incorrectly. You can bypass cache by adding no-cache directives if necessary, though 301s are typically cached aggressively by browsers. If you encounter 404 errors after redirection, check that the destination service is actually listening on the specified address. Remember that internal Docker IPs are not accessible from the public internet, so your redirect targets must be publicly resolvable domains or IP addresses. For further reading on resolving similar Nginx context issues, check out Troubleshooting Nginx-proxy Ignoring Server Context.

Frequently Asked Questions

Can I use Flexible SSL mode with Nginx redirects?

Yes, you can use Flexible SSL mode in Cloudflare when using Nginx for redirects because Nginx does not serve the actual content. However, "Full" mode is recommended to ensure the connection between Cloudflare and your VPS is encrypted, providing better security for the initial handshake.

Why am I getting infinite redirect loops?

Infinite loops usually occur if the destination URL points back to the same subdomain or if the rewrite conditions are misconfigured. Ensure that the return directive points to a completely different domain or service that does not trigger the same Nginx rule.

Do I need to expose ports in Docker for redirects?

No, you do not need to expose the destination container's ports to the host if you are using external domains for redirection. The redirect simply tells the browser where to go; it does not require the VPS to forward traffic internally.

How do I preserve query parameters during redirection?

Use the $request_uri variable in your Nginx return directive. This variable automatically includes the path and query string from the original request, ensuring that parameters like ?id=123 are passed to the new URL.

Is it better to use Cloudflare Workers instead of Nginx?

Cloudflare Workers offer more granular control and can run closer to the user, reducing latency. However, Nginx is simpler to set up for basic static redirects and requires no additional subscription fees beyond standard hosting costs.

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