Nginx mendengarkan di port, hanya merespons jika diatur ke port 80

10

OS: Funtoo. Saya telah mengikat NGINX ke port 81 (saya ingin menjalankannya bersama server Apache saya untuk waktu yang singkat untuk kemudahan transisi), dan ia mendengarkan port tersebut (Jika saya menunjuk port lain, menggunakan wget saya mendapatkan "Sambungan ditolak", tetapi menggunakan port 81 saya bisa "terhubung") tetapi tidak pernah melayani respons HTML apa pun!

Saat menjalankan wget di port, dari localhost, saya mendapatkan:

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

Di komputer lain ...

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

Tidak ada yang terjadi setelah itu. Dokumen ada, itu adalah Funtoo nginx.conf normal.

UPDATE: Saya bisa membuatnya mendengarkan port 80, tetapi masih mengguncang saya bahwa saya tidak bisa membuatnya bekerja pada port apa pun ....

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

Edit: File konfigurasi:

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

Blok server:

server {
    listen  *:81;
    root    /usr/share/nginx/html;
    location / {
        index   index.html;
    }
}
Aviator45003
sumber
Apakah Anda mengaktifkan filter paket ( iptables)? Jika demikian, apakah Anda ingat untuk mengizinkan port 81?
Andreas Wiese
iptables tidak diaktifkan.
Aviator45003
2
Maka bagian yang relevan dari konfigurasi Anda akan sangat membantu, saya kira.
Andreas Wiese

Jawaban:

5

Coba blok server berikut:

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

Garis bawah _adalah wildcard, Juga *:81kemungkinan tidak melakukan apa yang Anda harapkan, cukup gunakan nomor port.

Kemudian uji pengaturan Anda dengan nginx -t:

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

Mulai ulang nginx:

service nginx restart

Uji dengan 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.

Memperbarui

Saya menginstal nginx pada sistem uji. Dengan nginx.conffile stok dan perubahan 1 baris ke /etc/nginx/sites-enabled/default, saya dapat mengambil file dari 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;
    }

}

Output netstat:

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

Unduh berkas:

$ wget localhost:81

Isi file:

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

Pembaruan2

Pelabuhan uji:

 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
sumber
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 Masih belum berhasil. Apakah Recv-Q menjadi semacam petunjuk? Itu naik setiap kali saya mencoba wget atau sesuatu seperti itu. Blok server persis seperti yang Anda tentukan.
Aviator45003
Saya tidak yakin apa itu Recv-Q. Apakah Anda memiliki sesuatu di / etc / nginx / sites-available?
Spuder
1
@TC Silakan lihat jawaban saya yang diperbarui.
Spuder
tidak ada perubahan pada status saya, bahkan mengikuti file konfigurasi baru. Apakah mungkin ada sesuatu yang memblokir port bukan port 80? Apakah ada cara saya bisa menguji ini?
Aviator45003
1
TC ya, gunakan nc, lihat pembaruan
spuder
4

Ternyata masalah besarnya? Nginx telah mengatur proses pekerja_ ke 0. Saya menambahkan baris yang mengaturnya autodi bagian atas nginx.conf saya, dan semuanya baik-baik saja dengan dunia!

Terima kasih atas waktu dan kesabaran Anda.

Aviator45003
sumber
Anda hanya menyelamatkan saya dari menyerah setelah sekitar 1 jam frustrasi-rupanya salah satu variabel otomatis saya digunakan untuk template konfigurasi Nginx output 0untuk worker_processes, dan aku benar-benar terperangah setelah quadruple-memeriksa setiap file konfigurasi lainnya, DNS, host, dll
geerlingguy