Nginx écoute sur un port, ne répond que s'il est défini sur le port 80

10

OS: Funtoo. J'ai lié NGINX au port 81 (je veux l'exécuter avec mon serveur Apache pendant une courte période pour faciliter la transition), et il écoute sur le port (si je pointe vers un autre port, en utilisant wget j'obtiens "Connexion refusée", mais en utilisant le port 81 je me "connecte") mais il ne sert jamais de réponse HTML d'aucune sorte!

Lors de l'exécution d'un wget sur le port, à partir de l'hôte local, j'obtiens:

# 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...

Sur un autre ordinateur ...

$ 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...

Il ne se passe plus rien après ça. Les documents existent, c'est le nuntx.conf Funtoo normal.

MISE À JOUR: Je peux le faire écouter le port 80, mais cela me fait toujours penser que je ne peux pas le faire fonctionner sur n'importe quel port ....

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

Modifier: fichiers de configuration:

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/*;
}

Bloc serveur:

server {
    listen  *:81;
    root    /usr/share/nginx/html;
    location / {
        index   index.html;
    }
}
Aviator45003
la source
Avez-vous un filtre de paquets activé ( iptables)? Si oui, vous êtes-vous souvenu d'autoriser le port 81?
Andreas Wiese
iptables n'est pas activé.
Aviator45003
2
Les parties pertinentes de votre configuration seraient alors utiles, je suppose.
Andreas Wiese

Réponses:

5

Essayez le bloc serveur suivant:

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

Le trait de soulignement _est un caractère générique, également le *:81probable ne fait pas ce que vous attendez, utilisez simplement le numéro de port.

Testez ensuite vos paramètres avec nginx -t:

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

Redémarrez nginx:

service nginx restart

Testez avec 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.

Mise à jour

J'ai installé nginx sur un système de test. Avec le nginx.conffichier de stock et une modification sur 1 ligne /etc/nginx/sites-enabled/default, j'ai pu récupérer des fichiers à partir du port 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;
    }

}

Sortie Netstat:

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

Télécharger un fichier:

$ wget localhost:81

Contenu du dossier:

$ 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>

Update2

Port de test:

 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
la source
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 Toujours pas de succès. Recv-Q est-il un indice quelconque? Ça monte à chaque fois que j'essaye un wget ou quelque chose comme ça. Le bloc serveur est exactement comme vous l'avez prescrit.
Aviator45003
Je ne suis pas sûr de ce qu'est Recv-Q. Avez-vous quelque chose dans / etc / nginx / sites-available?
spuder
1
@TC Veuillez voir ma réponse mise à jour.
spuder
aucun changement à mon statut, même après le nouveau fichier de configuration. Est-il possible que quelque chose bloque les ports et non le port 80? Existe-t-il un moyen de tester cela?
Aviator45003
1
TC oui, utilisez nc, voir la mise à jour
spuder
4

Il s'avère que le gros problème? Nginx avait mis worker_processes à 0. J'ai ajouté une ligne le définissant autoen haut de mon nginx.conf, et tout allait bien avec le monde!

Merci à tous pour votre temps et votre patience.

Aviator45003
la source
Vous venez de m'éviter d'abandonner après environ 1 heure de frustration - apparemment l'une de mes variables automatisées utilisées pour les modèles de sortie de configuration Nginx a 0pour worker_processes, et j'ai été complètement sidéré après avoir quadruplé tous les autres fichiers de configuration, DNS, hôtes, etc.
geerlingguy