Nginx ฟังที่พอร์ตจะตอบกลับเฉพาะเมื่อตั้งค่าเป็นพอร์ต 80


10

ระบบปฏิบัติการ: Funtoo ฉันผูก NGINX กับพอร์ต 81 (ฉันต้องการเรียกใช้พร้อมกับเซิร์ฟเวอร์ Apache ของฉันในช่วงเวลาสั้น ๆ เพื่อความสะดวกในการเปลี่ยน) และฟังพอร์ต (ถ้าฉันชี้ไปที่พอร์ตอื่นโดยใช้ wget ฉันจะได้รับ "การเชื่อมต่อถูกปฏิเสธ" แต่ใช้พอร์ต 81 ฉันได้ "เชื่อมต่อ") แต่มันไม่ตอบสนอง HTML ทุกชนิด!

เมื่อใช้ wget บนพอร์ตจาก localhost ฉันจะได้รับ:

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

บนคอมพิวเตอร์เครื่องอื่น ...

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

ไม่มีอะไรเกิดขึ้นหลังจากนั้น เอกสารที่มีอยู่มันเป็นเรื่องปกติของ Funtoo nginx.conf

UPDATE: ฉันสามารถฟังพอร์ต 80 ได้ แต่ก็ยังเขย่าฉันว่าฉันไม่สามารถใช้งานพอร์ตใดก็ได้ ...

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

แก้ไข: ไฟล์กำหนดค่า:

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

เซิร์ฟเวอร์บล็อก:

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

คุณเปิดใช้งานตัวกรองแพ็คเก็ต ( iptables) หรือไม่ ถ้าเป็นเช่นนั้นคุณจำได้ว่าจะอนุญาตให้พอร์ต 81?
Andreas Wiese

iptables ไม่ได้เปิดใช้งาน
Aviator45003

2
จากนั้นส่วนที่เกี่ยวข้องในการกำหนดค่าของคุณจะเป็นประโยชน์ฉันเดา
Andreas Wiese

คำตอบ:


5

ลองบล็อกเซิร์ฟเวอร์ต่อไปนี้:

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

ขีดล่าง_เป็นอักขระตัวแทนนอกจากนี้*:81โอกาสที่จะไม่ทำตามที่คุณคาดหวังเพียงใช้หมายเลขพอร์ต

จากนั้นทดสอบการตั้งค่าของคุณด้วยnginx -t:

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

รีสตาร์ท nginx:

service nginx restart

ทดสอบกับ 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.

ปรับปรุง

ฉันติดตั้ง nginx บนระบบทดสอบ เมื่อเปลี่ยนnginx.confไฟล์หุ้นและ 1 บรรทัดเป็น/etc/nginx/sites-enabled/defaultฉันก็สามารถดึงไฟล์จากพอร์ต 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;
    }

}

เอาท์พุท Netstat:

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

ดาวน์โหลดไฟล์:

$ wget localhost:81

เนื้อหาของไฟล์:

$ 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

ทดสอบพอร์ต:

 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 ยังไม่ประสบความสำเร็จ Recv-Q เป็น 9 คำใบ้ของบางอย่าง? มันเพิ่มขึ้นทุกครั้งที่ฉันลอง wget หรืออะไรแบบนั้น บล็อกเซิร์ฟเวอร์ตรงตามที่คุณกำหนดไว้
Aviator45003

ฉันไม่แน่ใจว่า Recv-Q คืออะไร คุณมีอะไรใน / etc / nginx / sites-available หรือไม่
spuder

1
@TC โปรดดูคำตอบที่อัพเดตของฉัน
spuder

ไม่มีการเปลี่ยนแปลงสถานะของฉันแม้จะติดตามไฟล์ปรับแต่งใหม่ เป็นไปได้หรือไม่ว่ามีบางสิ่งที่บล็อกพอร์ตที่ไม่ใช่พอร์ต 80 มีวิธีที่ฉันสามารถทดสอบสิ่งนี้หรือไม่?
Aviator45003

1
TC ใช่ใช้ NC ดูการอัปเดต
spuder

4

กลายเป็นปัญหาใหญ่หรือไม่ Nginx ตั้งค่า worker_processes เป็น 0 ฉันได้เพิ่มการตั้งค่าบรรทัดไว้autoที่ด้านบนของ nginx.conf ของฉันและทุกอย่างก็ดีกับโลกนี้!

ขอบคุณทุกท่านที่สละเวลาและความอดทน


คุณเพิ่งช่วยให้ฉันยอมแพ้หลังจากใช้เวลาประมาณ 1 ชั่วโมงของความยุ่งยาก - เห็นได้ชัดว่าหนึ่งในตัวแปรอัตโนมัติของฉันที่ใช้ในการสร้างเทมเพลตเอาต์พุต Nginx 0สำหรับworker_processesและฉันรู้สึกงุนงงอย่างสมบูรณ์หลังจากตรวจสอบสี่เท่าของไฟล์ config อื่น DNS โฮสต์ ฯลฯ
geerlingguy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.