Nginx escucha en un puerto, solo responde si está configurado en el puerto 80

10

OS: Funtoo. He vinculado NGINX al puerto 81 (quiero ejecutarlo junto a mi servidor Apache por un corto tiempo para facilitar la transición), y escucha en el puerto (si apunto a otro puerto, usando wget obtengo "Conexión rechazada", pero usando el puerto 81 me "conecto") ¡pero nunca sirve una respuesta HTML de ningún tipo!

Cuando ejecuto un wget en el puerto, desde localhost, obtengo:

# wget localhost:81
-2014-04-16 23:56:45- http://localhost:81/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:81... connected.
HTTP request sent, awaiting response...

En otra computadora ...

$ wget 192.168.18.42:81
-2014-04-16 23:57:19- http://192.168.18.42:81/
Connecting to 192.168.18.42:81... connected.
HTTP request sent, awaiting response...

Nada pasa después de eso. Los documentos existen, es el Funtoo nginx.conf normal.

ACTUALIZACIÓN: puedo hacer que escuche el puerto 80, pero todavía me molesta que no pueda hacer que funcione en ningún puerto ...

netstat -aWn | grep 81 | grep LISTEN
tcp 60 0 0.0.0.0:81 0.0.0.0:* LISTEN

Editar: archivos de configuración:

user nginx nginx;
worker_rlimit_nofile 6400;

error_log /var/log/nginx/error_log info;

events {
    worker_connections 1024;
    use epoll;
}

http {
    include /etc/nginx/mime.types;

    # This causes files with an unknown MIME type to trigger a download action in the browser:
    default_type application/octet-stream;

    log_format main
        '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';

    client_max_body_size 64m;

    # Don't follow symlink if the symlink's owner is not the target owner.

    disable_symlinks if_not_owner;
    server_tokens off;
    ignore_invalid_headers on;

    gzip off;
    gzip_vary on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js image/x-icon image/bmp;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    index index.html;
    include /etc/nginx/sites-enabled/*;
}

Bloqueo del servidor:

server {
    listen  *:81;
    root    /usr/share/nginx/html;
    location / {
        index   index.html;
    }
}
Aviator45003
fuente
¿Tiene un filtro de paquetes habilitado ( iptables)? Si es así, ¿recordó permitir el puerto 81?
Andreas Wiese
iptables no está habilitado.
Aviator45003
2
Entonces, las partes relevantes de su configuración serían útiles, supongo.
Andreas Wiese

Respuestas:

5

Pruebe el siguiente bloque de servidor:

server {
   listen       81 default_server;
    server_name _;    
    root    /usr/share/nginx/html;
    location / {
        index   index.html;
    }
}

El guión bajo _es un comodín. Además, es *:81probable que no haga lo que espera, solo use el número de puerto.

Luego pruebe su configuración con nginx -t:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicie nginx:

service nginx restart

Prueba con netstat:

root@gitlab:~# netstat -napl | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7903/nginx      
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      2662/unicorn.

Actualizar

Instalé nginx en un sistema de prueba. Con el nginx.confarchivo de stock y un cambio de 1 línea a /etc/nginx/sites-enabled/default, pude recuperar archivos del puerto 81

cat /etc/nginx/sites-enabled/default
server {

    listen   81;
    server_name localhost;
    root /usr/share/nginx/www;
    index index.html index.htm;


    location / {
        try_files $uri $uri/ /index.html;
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        deny all;
    }

}

Salida de Netstat:

netstat -napl | grep 81
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      3432/nginx

Descargar archivo:

$ wget localhost:81

Contenido del archivo:

$ cat index.html
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>

Actualización2

Puerto de prueba:

 root@gitlab:# nc -vz localhost 81
 Connection to localhost 81 port [tcp/*] succeeded!
 root@gitlab:# nc -vz localhost 443
 nc: connect to localhost port 443 (tcp) failed: Connection refused
Spuder
fuente
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 9 0 0.0.0.0:81 0.0.0.0:* LISTEN 1026/nginx: master Todavía no hay éxito. ¿Recv-Q es 9 un indicio de algún tipo? Sube cada vez que pruebo un wget o algo así. El bloqueo del servidor es exactamente como lo prescribió.
Aviator45003
No estoy seguro de qué es Recv-Q. ¿Tiene algo en / etc / nginx / sites-available?
Spuder
1
@TC Por favor, vea mi respuesta actualizada.
Spuder
sin cambios en mi estado, incluso después del nuevo archivo de configuración. ¿Es posible que haya algo bloqueando los puertos, no el puerto 80? ¿Hay alguna forma de probar esto?
Aviator45003
1
TC sí, use nc, vea la actualización
spuder
4

Resulta el gran problema? Nginx había establecido trabajador_procesos en 0. ¡Agregué una línea configurándola autoen la parte superior de mi nginx.conf, y todo estaba bien con el mundo!

Gracias a todos por su tiempo y paciencia.

Aviator45003
fuente
Sólo me salvó de renunciar después de aproximadamente 1 hora de frustración-al parecer una de las variables mis automatizados utilizados para crear plantillas de configuración de salida de un Nginx 0para worker_processes, y yo estaba asombrado por completo después de cuádruple control de todos los demás archivos de configuración, DNS, ejércitos, etc.
geerlingguy