Nginx servers on both *:80 and <ip>:80? also duplicate listen parameters error when binding by just specific ips

Francis Daly francis at
Thu Mar 31 20:29:28 UTC 2016

On Thu, Mar 31, 2016 at 01:21:02PM -0400, CJ Ess wrote:

Hi there,

> I would like to have an Nginx setup where I have specific logic depending
> on which interface (ip) the request arrived on.

multiple server{} with different "listen"; possibly with an "include
common-config" entry.

Note: "listen" is on an ip, not an interface.

> I was able to make this work by having a server stanza for each ip on the
> server, but was't able to do a combination of a specific ip and a wildcard
> ip (as a catchall) - is there a way to do that with some option combination
> (i.e. nginx listens on *:80, but matches the server stanza by ip?)

I don't understand what you are describing. Could you try again, perhaps
with a config example?

When I use

    server {
        return 200 "listen\n";
    server {
        return 200 "listen\n";
    server {
        listen 8088;
        return 200 "listen 8088\n";

I get the following output, which is what I expect:

$ curl
$ curl
listen 8088

> The scenario I'm playing towards is that I have a dedicated connection to a
> CDN and I want to pass thru certain headers if they arrive via the
> dedicated interface, strip them if they arrive on other interface.

As above, if "interface" is replaced with "ip", this can work with two
server{} blocks.

> When I did the server{} per IP approach nginx complained about duplicate
> listen settings for the second IP even though both server stanzas were
> bound to a specific port/interface. Is this a bug per chance?

What short server{} config can I use to reproduce the complaint?

Francis Daly        francis at

More information about the nginx mailing list