We've used nginx for years and never had an issue with nginx upgrade until today where the upgrade command ran but almost instantly after the new process exited.

/usr/local/etc/rc.d/nginx upgrade
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Upgrading nginx binary:
Stopping old binary:

In the default nginx log we had:
2016/12/04 21:18:22 [emerg] 25435#0: bind() to 127.0.0.1:81 failed (48: Address already in use)
nginx: [emerg] bind() to 127.0.0.1:81 failed (48: Address already in use)
2016/12/04 21:18:22 [emerg] 25435#0: bind() to 127.0.0.1:81 failed (48: Address already in use)
nginx: [emerg] bind() to 127.0.0.1:81 failed (48: Address already in use)
2016/12/04 21:18:22 [emerg] 25435#0: bind() to 127.0.0.1:81 failed (48: Address already in use)
nginx: [emerg] bind() to 127.0.0.1:81 failed (48: Address already in use)
2016/12/04 21:18:22 [emerg] 25435#0: bind() to 127.0.0.1:81 failed (48: Address already in use)
nginx: [emerg] bind() to 127.0.0.1:81 failed (48: Address already in use)
2016/12/04 21:18:22 [emerg] 25435#0: bind() to 127.0.0.1:81 failed (48: Address already in use)
nginx: [emerg] bind() to 127.0.0.1:81 failed (48: Address already in use)
2016/12/04 21:18:22 [emerg] 25435#0: still could not bind()
nginx: [emerg] still could not bind()

Running the start just after resulted in a running version but is obviously unexpected to have upgrade result in a failure.

I believe the change to add a localhost bind to the server in question was relatively recent so I suspect it has something to do with that.

The config for this is simply:
server {
    listen 127.0.0.1:81;
    server_name localhost;

    location /status {
        stub_status;
    }
}

The upgrade in this case was:
nginx: 1.10.1_1,2 -> 1.10.2_2,2

Now this server is running under FreeBSD in a jail (10.2-RELEASE) and it has 127.0.0.1 available yet it seems nginx has incorrectly bound the address:
netstat -na | grep LIST | grep 81
tcp4       0      0 10.10.96.146.81        *.* LISTEN

sockstat | grep :81
www      nginx      25666 25 tcp4   10.10.96.146:81       *:*
www      nginx      25665 25 tcp4   10.10.96.146:81       *:*
www      nginx      25664 25 tcp4   10.10.96.146:81       *:*
www      nginx      25663 25 tcp4   10.10.96.146:81       *:*
www      nginx      25662 25 tcp4   10.10.96.146:81       *:*
www      nginx      25661 25 tcp4   10.10.96.146:81       *:*
www      nginx      25660 25 tcp4   10.10.96.146:81       *:*
www      nginx      25659 25 tcp4   10.10.96.146:81       *:*
www      nginx      25658 25 tcp4   10.10.96.146:81       *:*
www      nginx      25657 25 tcp4   10.10.96.146:81       *:*
www      nginx      25656 25 tcp4   10.10.96.146:81       *:*
www      nginx      25655 25 tcp4   10.10.96.146:81       *:*
www      nginx      25654 25 tcp4   10.10.96.146:81       *:*
www      nginx      25653 25 tcp4   10.10.96.146:81       *:*
www      nginx      25652 25 tcp4   10.10.96.146:81       *:*
www      nginx      25651 25 tcp4   10.10.96.146:81       *:*
root     nginx      25650 25 tcp4   10.10.96.146:81       *:*

ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
        inet 127.0.0.1 netmask 0xffffffff

So it looks like nginx is incorrectly binding which is resulting in the issue with upgrade.

Anyone seen this before?

I've confirmed nginx is responding correctly on 127.0.0.1:
lwp-request http://127.0.0.1:81/status
Active connections: 1077
server accepts handled requests
 31516 31516 90387
Reading: 0 Writing: 5 Waiting: 1071

    Regards
    Steve
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to