Is it possible to configure Nginx to accept requests both with and without proxy protocol to the same URL?

Calum Halpin asked:

I have a set of applications behind a proxy server which forwards request appropriately and uses the proxy protocol to preserve the request’s origin data. The apps also make requests amongst each other so I want them to accept requests with and without the proxy protocol. Is it possible to configure Nginx to do this in some way without using a different server_name or port?

My answer:

Without using a different server block, the only way to do this is with different listen directives. This means the server running nginx must have different IP addresses for connecting to the server from the external proxy and from the internal server farm.

For example, you might have an internal network for your internal apps, and the server running nginx is on Then you have an external network which your external proxy server uses to reach nginx, and the server has address In this case you can configure nginx as:

server {
    # PROXY protocol connections
    listen ssl http2 proxy_protocol;
    set_real_ip_from;  # The address(es) of the proxies
    real_ip_header proxy_protocol;

    # Direct connections
    listen ssl http2;
    listen [::]:443 ssl http2;

    # everything else for this block

On a related note, you should have already deployed IPv6 within your organization, even without global IPv6 connectivity. You can use that for your internal communications if you haven’t got a separate internal IPv4 network.

View the full question and any other answers on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.