Nginx bir bağlantı noktasını dinler, yalnızca 80 numaralı bağlantı noktasına ayarlandığında yanıt verir


10

İşletim Sistemi: Funtoo. NGINX'i bağlantı noktası 81'e bağladım (geçiş kolaylığı için kısa bir süre için Apache sunucumla birlikte çalıştırmak istiyorum) ve bağlantı noktasında dinliyor (Başka bir bağlantı noktasını işaret edersem, wget kullanarak "Bağlantı reddedildi" ancak 81 numaralı bağlantı noktasını kullanarak "bağlandım") ancak hiçbir zaman HTML yanıtı sunmaz!

Bağlantı noktasında bir wget çalıştırırken, localhost'tan şunu alıyorum:

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

Başka bir bilgisayarda ...

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

Bundan sonra hiçbir şey olmuyor. Belgeler var, bu normal Funtoo nginx.conf.

GÜNCELLEME: 80 numaralı bağlantı noktasını dinletebilirim, ama yine de herhangi bir bağlantı noktasında çalışamadığım için beni rahatsız ediyor ....

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

Düzenleme: Yapılandırma dosyaları:

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

Sunucu bloğu:

server {
    listen  *:81;
    root    /usr/share/nginx/html;
    location / {
        index   index.html;
    }
}

Etkin bir paket filtreniz var iptablesmı ( )? Öyleyse, 81 numaralı bağlantı noktasına izin vermeyi hatırladınız mı?
Andreas Wiese

iptables etkin değil.
Aviator45003

2
O zaman yapılandırmanızın ilgili kısımları yararlı olur, sanırım.
Andreas Wiese

Yanıtlar:


5

Aşağıdaki sunucu bloğunu deneyin:

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

Alt çizgi _bir joker karakterdir, Ayrıca *:81muhtemelen beklediğiniz şeyi yapmaz, sadece bağlantı noktası numarasını kullanın.

Ardından ayarlarınızı aşağıdakilerle test edin nginx -t:

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

Nginx'i yeniden başlat:

service nginx restart

Netstat ile test:

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.

Güncelleme

Bir test sistemine nginx kurdum. Stok nginx.confdosyası ve 1 satır olarak değiştiğinde /etc/nginx/sites-enabled/default, 81 numaralı bağlantı noktasından dosya alabildim

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

}

Netstat çıkışı:

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

Dosyayı indir:

$ wget localhost:81

Dosyanın içeriği:

$ 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

Test bağlantı noktası:

 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

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 Hala başarı yok. Recv-Q 9 olmak bir tür ipucu mu? Her wget denediğimde böyle bir şey yükseliyor. Sunucu bloğu tam olarak reçete ettiğiniz gibidir.
Aviator45003

Recv-Q'nun ne olduğundan emin değilim. / Etc / nginx / sites-available adresinde bir şey var mı?
spuder

1
@TC Lütfen güncellenmiş cevabıma bakın.
spuder

durumumda değişiklik yok, yeni yapılandırma dosyasını izlese bile. Port 80'i değil, portları bloke eden bir şey var mı? Bunu test edebilmemin bir yolu var mı?
Aviator45003

1
TC evet, nc kullanın, güncellemeye bakın
spuder

4

Büyük problem ortaya çıkıyor mu? Nginx worker_processes değerini 0 olarak ayarlamıştı. Bunu nginx.conf'umun autoen üstüne ayarlayan bir satır ekledim ve her şey dünyayla iyi geçti!

Zamanınız ve sabrınız için hepinize teşekkür ederim.


Sadece Nginx yapılandırma çıkış a templating için kullanılan engellenme-görünüşte biri benim otomatik değişkenlerin 1 hakkında saat sonra vazgeçerek beni kurtardı 0için worker_processesve tamamen sonra flabbergasted dörtlü denetimi her yapılandırma dosyasını, DNS ana, vb
geerlingguy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.