nginx - nginx: [ฉุกเฉิน] การผูก () ถึง [::]: 80 ล้มเหลว (98: ที่อยู่ที่ใช้งานอยู่)


249

ทันใดนั้นฉันก็พบข้อผิดพลาด nginx ด้านล่าง

 * Restarting nginx
 * Stopping nginx nginx
   ...done.
 * Starting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
   ...done.
   ...done.

ถ้าฉันวิ่ง

lsof -i :80 or sudo fuser -k 80/tcp 

ฉันไม่ได้อะไรเลย ไม่มีอะไรในพอร์ต 80

จากนั้นฉันเรียกใช้ด้านล่าง:

sudo netstat -pan | grep ":80"
tcp        0      0 127.0.0.1:8070          0.0.0.0:*               LISTEN      15056/uwsgi     
tcp        0      0 10.170.35.97:39567      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39564      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39584      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39566      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39571      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39580      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39562      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39582      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39586      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39575      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39579      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39560      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39587      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39591      10.158.58.13:8080       TIME_WAIT   -               
tcp        0      0 10.170.35.97:39589      10.158.58.13:8080       TIME_WAIT   - 

ฉันนิ่งงัน ฉันจะแก้ไขข้อบกพร่องนี้ได้อย่างไร

ฉันใช้ uwsgi พร้อมกับ proxy pass บนพอร์ต 8070 uwsgi กำลังทำงานอยู่ Nginx ไม่ใช่ ฉันใช้ Ubuntu 12.4

ด้านล่างนี้เป็นส่วนที่เกี่ยวข้องของไฟล์ nginx conf ของฉัน

upstream uwsgi_frontend {
          server 127.0.0.1:8070;
        }
server {
listen 80;
        server_name 127.0.0.1;
        location = /favicon.ico {
                  log_not_found off;
                }



                location / {
                       include uwsgi_params;
                       uwsgi_buffering off;

                       uwsgi_pass 127.0.0.1:8070;
                 }
        }

นี่คือวิธีที่ฉันติดตั้ง nginx บน ubuntu 12.04

nginx=stable;add-apt-repository ppa:nginx/$nginx;
apt-get update
apt get install nginx-full

19
ฉันพบปัญหาที่ฉันไม่เคยมีมาก่อน ฉันต้องลบ / etc / nginx / sites-available / default จากนั้นก็ใช้งานได้ ความเชื่อมั่นของฉันอยู่ใน / etc / nginx / default
Tampa

ฉันใช้ Nginx + Varnish และมีข้อผิดพลาดนี้ วิธีแก้ปัญหาคือหยุดบนทั้งคู่จากนั้นเริ่ม nginx ก่อนแล้วจึงเคลือบเงา
เบ็น

คุณอาจลองหยุดบริการชื่อ
amal

คุณลบค่าเริ่มต้นของคุณจากเว็บไซต์ที่เปิดใช้งานหรือไม่
Wolfpack'08

ฉันลองวิธีแก้ปัญหาทั้งหมดที่นี่ ตรวจสอบพอร์ตทั้งหมดที่ใช้งานอยู่ (มันกำลังถูกใช้โดย NGINX เอง) ดังนั้นฉันจึงฆ่าพอร์ตและเริ่มต้นใหม่ ทำงานเหมือนจับใจ
gavin

คำตอบ:


202

[::]:80 เป็นที่อยู่ ipv6

ข้อผิดพลาดนี้สามารถเกิดขึ้นได้ถ้าคุณมีการกำหนดค่า Nginx ที่จะฟังบนพอร์ต 80 [::]:80และยังอยู่ในพอร์ต

ฉันมีสิ่งต่อไปนี้ในไฟล์เริ่มต้นสำหรับไซต์ของฉัน:

listen 80;
listen [::]:80 default_server;

คุณสามารถแก้ไขได้โดยเพิ่มipv6only=onสิ่ง[::]:80นี้:

listen 80;
listen [::]:80 ipv6only=on default_server;

สำหรับข้อมูลเพิ่มเติมดู:

http://forum.linode.com/viewtopic.php?t=8580

http://wiki.nginx.org/HttpCoreModule#listen


11
คุณสามารถแก้ไขได้โดยเพียงแค่ลบฟัง 80 เพราะฟัง [::]: 80 ฟังทั้ง IPv4 และ IPv6 ระวังเพราะบางระบบ (เช่น FreeBSD) แยกซ็อกเก็ต IPv4 และ IPv6 จากนั้นจะไม่ทำงาน แต่สำหรับ Linux มันควรจะดี wiki.nginx.org/HttpCoreModule#listen
gitaarik

4
ขอบคุณที่ขุดลงไปในสิ่งนี้และให้คำอธิบายว่าทำไมการลบ/etc/nginx/sites-available/defaultช่วยด้วยข้อผิดพลาดข้างต้น
Oliver

1
แม้ในขณะที่ฉันแสดงความคิดเห็นออกบรรทัด IPv6 sudo service nginx restartผมยังคงได้รับข้อผิดพลาดเดียวกันเมื่อฉันพยายาม เมื่อฉันทำnetstat -tulpn |grep 80ฉันได้รับเพียงครั้งเดียวกระบวนการ nginx (0.0.0.0:80) ความคิดใด ๆ ที่ทำให้มันไม่รีสตาร์ท?
Roman

ฉันสองสิ่งที่ @rednaw พูด แต่แทนที่จะเอาฟังคุณสามารถออกความเห็นได้
d4nyll

การตั้งค่าipv6only=onแก้ไขปัญหาได้ แต่ nginx ควรตรวจพบว่ากำลังพยายามผูกกับอินเทอร์เฟซเดียวกัน: พอร์ตสองครั้ง
Dan Dascalescu

246

ฉันแก้ไขได้โดยการทำงานsudo apachectl stop- ปรากฎว่า apache กำลังทำงานอยู่ในพื้นหลังและป้องกันไม่ให้ nginx เริ่มต้นบนพอร์ตที่ต้องการ

ในการทำงานอูบุนตู sudo /etc/init.d/apache2 stop


8
ใช้sudo /etc/init.d/apache2 stopเพื่อหยุด apache บน Ubuntu 14.04
Footniko

3
เหตุผลก็เพราะคุณไม่สามารถมีเว็บเซิร์ฟเวอร์สองเครื่องที่ฟังพอร์ตเดียวกัน เลือกหนึ่งรายการและหากจำเป็นต้องใช้พร็อกซี เช่นใช้ nginx แต่สำหรับบางคำขอ (เช่นphpไฟล์) ให้ใช้ proxy กับ Apache
d4nyll

เหมือนกันที่นี่ในเดเบียน 9 สดติดตั้ง
jirarium

ขอบคุณ แต่ความคิดใด ๆ ว่าทำไมมันเริ่มขึ้นทันที? ฉันไม่ได้แตะเซิร์ฟเวอร์เป็นเวลาหนึ่งสัปดาห์ แต่มันเริ่มเมื่อคืนนี้
Ajay Singh

1
ขอบคุณสำหรับการแก้ปัญหาของคุณ มันใช้งานได้สำหรับฉันฉันใช้แพลตฟอร์ม Google Cloud
congle

93

เคสของฉันแตกต่างฉันต้องฆ่าใช้ Nginx เพื่อเริ่มต้นใหม่

แทน

sudo systemctl restart nginx

ฉันต้องใช้:

sudo pkill -f nginx & wait $!
sudo systemctl start nginx

1
ฉันกำลัง 404 ไม่พบและฉันใช้ข้อเสนอแนะของคุณตอนนี้ฉันได้แก้ไขปัญหาของฉัน ขอบคุณ
อ่าว

3
สิ่งนี้ใช้ได้สำหรับฉัน ไม่มีอะไรทำ ไม่แน่ใจว่ากระบวนการเริ่มต้นเมื่อระบบรีบูต แต่ฉันจะเพิ่มในรูทีนการรีสตาร์ท nginx ของฉัน ขอบคุณ!
Khom Nazid

38

ฉันพบปัญหาที่ฉันไม่เคยมีมาก่อน

/etc/nginx/sites-available/defaultฉันเพิ่งมีการลบ จากนั้นก็ใช้งานได้

conf /etc/nginx/defaultของฉันอยู่ใน


2
+1 วิธีแก้ปัญหานี้ใช้งานได้สำหรับฉัน แต่แล้วฉันคิดว่าต้องมีบางอย่างที่เป็นค่าเริ่มต้นซึ่งทำให้เกิดปัญหาจริง ๆ ดังนั้นฉันจึงขุดให้ลึกขึ้นอีกนิดและให้คำตอบกับข้อมูลเพิ่มเติม
นาธาน

11
ฉันจะยืนยันว่าการลบเทมเพลตการกำหนดค่าไซต์เริ่มต้นไม่ใช่ทางออกที่ดีที่สุด - การแสดงความคิดเห็นบรรทัดที่มีlisten 80;ในเทมเพลตเดียวกันนั้นแก้ไขปัญหาได้อย่างถูกต้องแล้ว เคล็ดลับของคุณใช้งานได้ แต่ไม่ใช่สิ่งที่ฉันต้องการให้ผู้อ่านในอนาคตของคุณทำ นั่นเป็นเหตุผลที่ฉันแนะนำให้คุณเลือกคำตอบของ @ Nathan เป็นคำตอบที่ถูกต้อง
Oliver

4
ผมมีปัญหาเดียวกันหลังจากทำงานapt-get dist-upgradeซึ่งอัพเกรดแพคเกจ Nginx ซึ่งสร้างการเชื่อมโยงในการ/etc/nginx/sites-enabled /etc/nginx/sites-available/defaultnginx พยายามโหลดการกำหนดค่าเริ่มต้นนี้ซึ่งฟังพอร์ต 80 ผ่าน IPv6 แล้วมันก็โหลดการอ่านการตั้งค่าจริงของฉันด้วย การลบ symlink นั้นแก้ไขปัญหาได้
Dan Dascalescu

15
คุณไม่จำเป็นต้องลบ /etc/nginx/sites-available/defaultออกเพียงแค่ลบลิงก์สัญลักษณ์ไปยังมันsudo rm /etc/nginx/sites-enabled/default
d4nyll

ฉันประสบปัญหานี้เมื่อพยายามเรียกใช้nginxบนพอร์ต 8080 และvarnishบนพอร์ต 80 และคล้ายกับคำตอบนี้ฉันพบปัญหากับการnginxกำหนดค่าเริ่มต้นที่ยังฟังบนพอร์ต 80 แม้ว่าการกำหนดค่าของฉันจะsites-availableฟังทั้งหมดในพอร์ต 8080 แล้วนี่อยู่ที่/etc/nginx/conf.d/default
zigojacko

24

ฉันยังได้รับข้อผิดพลาดเดียวกัน

nginx: [ฉุกเฉิน] bind () ถึง [::]: 80 ล้มเหลว (98: ที่อยู่ที่ใช้งานอยู่)

และเมื่อฉันพิมพ์ localhost ในเบราว์เซอร์แล้วฉันก็จะได้รับ

มันได้ผล!

นี่คือหน้าเว็บเริ่มต้นสำหรับเซิร์ฟเวอร์นี้

ซอฟต์แวร์เว็บเซิร์ฟเวอร์กำลังทำงานอยู่ แต่ยังไม่มีการเพิ่มเนื้อหา แทนที่จะเป็นหน้ายินดีต้อนรับ nginx, apache2 ทำงานบนพอร์ตเดียวกัน

  1. ค้นหาไฟล์apache2 ports.conf

    sudo /etc/apache2/ports.conf
    
  2. เปลี่ยนพอร์ตอื่น ๆ จากนั้น80ฉันทำมันเป็น70

  3. บันทึกไฟล์

  4. รีสตาร์ทระบบของคุณ

มันจะทำงานให้คุณเช่นกันถ้าคุณพิมพ์ localhost ในเบราว์เซอร์คุณจะได้รับหน้าต้อนรับของ nginx


1
คุณอาจไม่ต้องการเรียกใช้ทั้ง Apache2 และ nginx ในเวลาเดียวกัน ฉันพบว่าการติดตั้ง Apache เริ่มบริการ ดังนั้นฉันจึงออก "sudo /etc/init.d/apache2 stop" จากนั้นก็สามารถเริ่ม nginx ได้ตามปกติ สิ่งนี้จะช่วยคุณไม่ให้รีบูทระบบของคุณ
Chris Westin

1
คุณมีสิทธิ์ที่จะลบลิงก์ / etc / nginx / sites-enabled / default sym เพื่อป้องกันไม่ให้ฟังจากสองพอร์ต ฉันคิดว่ามันน่ารำคาญเล็กน้อยที่ทุกบทช่วยสอนใน nginx เริ่มต้นโดยแนะนำให้ทุกคนลบลิงค์ "default" แต่นั่นเป็นหัวข้อที่แตกต่างกัน
eschipul

@IgorGanapolsky เปลี่ยน Apache เป็นพอร์ตอื่นได้หรือไม่
Menasheh


8

ปัญหาของฉันคือการที่ฉันมีคำสั่งฟังทับซ้อนกัน ฉันจัดการเพื่อหาคำสั่งที่ทับซ้อนกันโดยใช้

grep -r listen /etc/nginx/*

ไฟล์สองไฟล์กำลังฟังที่พอร์ตเดียวกัน:

/etc/nginx/conf.d/default.conf:           listen 80;  
/etc/nginx/sites-enabled/default.conf:    listen 80;

3
นั่นเป็นวิธีตรวจสอบที่เรียบร้อยมาก: grep -r listen /etc/nginx/*ขอบคุณสำหรับการแบ่งปัน!
Newskooler

6

ฉันมีปัญหาเดียวกันใน allowencrypt (certbot) และ nginx

อ้างอิง: https://github.com/certbot/certbot/issues/5486

ข้อผิดพลาดนี้ยังไม่มีวิธีแก้ไข

ดังนั้นเปลี่ยน cron สำหรับการต่ออายุ(ใส่การโหลดหลังจากต่ออายุ) (ใช้การแนะนำจาก certbot)

-- in /etc/cron.d/certbot
from
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew 
to
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --pre-hook "service nginx stop" --post-hook "service nginx start"

บันทึก (สั้น):

-- in /var/log/syslog
Jun 10 00:14:25 localhost systemd[1]: Starting Certbot...
Jun 10 00:14:38 localhost certbot[22222]: nginx: [error] open() "/run/nginx.pid$
Jun 10 00:14:41 localhost certbot[22222]: Hook command "nginx" returned error c$
Jun 10 00:14:41 localhost certbot[22222]: Error output from nginx:
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] still could not bind()
Jun 10 00:14:41 localhost systemd[1]: Started Certbot.


-- in /var/log/nginx/error.log
2018/06/10 00:14:27 [notice] 22233#22233: signal process started
2018/06/10 00:14:31 [notice] 22237#22237: signal process started
2018/06/10 00:14:33 [notice] 22240#22240: signal process started
2018/06/10 00:14:34 [notice] 22245#22245: signal process started
2018/06/10 00:14:38 [notice] 22255#22255: signal process started
2018/06/10 00:14:38 [error] 22255#22255: open() "/run/nginx.pid" failed (2: No $
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: still could not bind()

1
สุดสุ่ม แต่นี่คือสิ่งที่ปัญหาของฉันคือฉันเชื่อ ขอบคุณที่โพสต์ข้อความนี้ ข้อผิดพลาดของฉันดูเหมือนจะปรากฏขึ้นเนื่องจากรายการโดเมนที่ล้าสมัยมันพยายามต่ออายุ แต่ทำไม่ได้เพราะฉันไม่ได้ควบคุมโดเมนอีกต่อไป
w--

ฉันเดาว่านี่อาจเป็นปัญหาของฉันด้วย แต่ฉันต้องรอเพื่อดู
Oscar Zhou1989

2

apache เปลี่ยนครั้งแรกฟังพอร์ต 80 ถึง 8080 apache ใน /etc/apache2/ports.conf ประกอบด้วย

Listen 1.2.3.4:80 to 1.2.3.4:8080
sudo service apache2 restart 

หรือ

sudo service httpd restart    // in case of centos

จากนั้นเพิ่ม nginx เป็น reverse proxy server ที่จะฟังพอร์ต apache

server {
 listen   1.2.3.4:80;
 server_name  some.com;

 access_log  /var/log/nginx/something-access.log;

 location / {
  proxy_pass http://localhost:8080;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }


location ~* ^.+\.(jpg|js|jpeg|png)$ {
   root /usr/share/nginx/html/;
}

location /404.html {
  root /usr/share/nginx/html/40x.html;
}

error_page 404 /404.html;
    location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
    location = /50x.html {
}

# put code for static content like js/css/images/fonts
}

หลังจากการเปลี่ยนแปลงรีสตาร์ทเซิร์ฟเวอร์ nginx

sudo service nginx restart

ตอนนี้ทราฟฟิกทั้งหมดจะได้รับการจัดการโดยเซิร์ฟเวอร์ nginx และส่งคำร้องขอไดนามิกไปยัง apache และ static conten ให้บริการโดยเซิร์ฟเวอร์ nginx

สำหรับการกำหนดค่าล่วงหน้าเช่นแคช:

https://www.linode.com/docs/web-servers/nginx/slightly-more-advanced-configurations-for-nginx/#basic-nginx-caching


1

ฉันพบปัญหาที่คล้ายกัน บันทึกเป็นเหมือนด้านล่าง

2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: still could not bind()
2018/10/31 12:54:23 [alert] 127997#127997: unlink() "/run/nginx.pid" failed (2: No such file or directory)
2018/10/31 22:40:48 [info] 36948#36948: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:68
2018/10/31 22:50:40 [emerg] 37638#37638: duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default:18
2018/10/31 22:51:33 [info] 37787#37787: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:68

ล่าสุด[emerg]แสดงให้เห็นว่าduplicate listen options for [::]:80ซึ่งหมายความว่ามีมากกว่าหนึ่ง Nginx [::]:80ไฟล์บล็อกที่มี

ทางออกของฉันคือการลบการ[::]:80ตั้งค่า อย่างใดอย่างหนึ่ง

PS คุณอาจมีไฟล์บล็อกเริ่มต้น คำแนะนำของฉันคือการเก็บไฟล์นี้เป็นเซิร์ฟเวอร์เริ่มต้นสำหรับพอร์ต 80 และลบออก[::]:80จากไฟล์บล็อกอื่น ๆ


1

ฉันใช้ผู้ควบคุมดูแลเพื่อเรียกใช้ Nginx และ Gunicorn เคียงข้างกันในคอนเทนเนอร์ Docker

นี่คือการกำหนดค่าที่ใช้สำหรับหัวหน้างาน:

[supervisord]
nodaemon=true

[program:gunicorn]
command = /project/start.sh
user = www-data


[program:nginx]
command=/usr/sbin/nginx

ปัญหาคือวิธีที่ฉันเปิดตัว Ngnix: โดยปกติแล้วมันจะทำงานบนพื้นหน้า สิ่งนี้ทำให้ผู้ดูแลระบบลองอีกครั้งเพื่อเรียกใช้อินสแตนซ์อื่นของ Nginx

โดยการเพิ่ม-g 'daemon off;'ลงในบรรทัดคำสั่ง Nginx อยู่ในเบื้องหน้าผู้ดูแลหยุดพยายามเรียกใช้อินสแตนซ์อื่น


1

ในกรณีของฉันบริการอย่างใดอย่างหนึ่งทั้ง Apache, Apache2 หรือ Nginx กำลังทำงานอยู่และเนื่องจากฉันไม่สามารถเริ่มบริการอื่นได้


0

ฉันมีไฟล์ * .ss บันทึกหลายตัว (ทิ้งฉุกเฉินจากนาโน) จากไฟล์ปรับแต่ง NGINX ที่แตกต่างกันใน dir ไซต์ที่ใช้งานได้ของฉัน เมื่อฉันลบไฟล์. เซฟเหล่านี้ NGINX รีสตาร์ทได้ดี ฉันคิดว่าสิ่งเหล่านี้ไม่เป็นอันตรายเนื่องจากไม่มีการเชื่อมโยงที่สอดคล้องกัน แต่ฉันคิดว่าฉันผิด


0

หากต้องการติดตามคำตอบ @ @ lfender6445 และ @SAURABH -

ปัญหาของฉันก็คือความจริงที่ว่าหลังจากอัพเกรดเป็น Vagrant 2.2.2 Apache2 กำลังทำงานเป็นเว็บเซิร์ฟเวอร์เมื่อแขกบูตระบบ ในอดีตที่ผ่านมาฉันมีเพียง nginx เป็นเว็บเซิร์ฟเวอร์

คนจรจัด ssh ลงในกล่องและเรียกใช้คำสั่งต่อไปนี้เพื่อปิดการใช้งาน Apache2 เริ่มต้นขึ้นเมื่อใดก็ตามที่รองเท้าบูทกล่องแขก:

sudo update-rc.d -f apache2 remove

ออกจาก ssh, คนจรจัดหยุด, คนจรจัดขึ้นไป แก้ไขปัญหา.


0

หากปัญหายังคงมีอยู่หลังจากลองวิธีการแก้ปัญหาด้านบนใด ๆ ให้รีสตาร์ทเซิร์ฟเวอร์ของคุณหนึ่งครั้ง มันใช้งานได้สำหรับฉัน :)


ใช่มันจะ แต่การฆ่ากระบวนการ nginx แล้วเริ่มใหม่เพียงแค่ nginx ก็ใช้งานได้ นั่นคือคำตอบของ @datdinhquoc
Khom Nazid

0

ในกรณีของฉันผู้ร้ายกลายเป็นบล็อกเซิร์ฟเวอร์ที่มี:

        listen  127.0.0.1:80;
        listen  [::1]:80 ipv6only=on;
        server_name  localhost;

บน Linux ซ็อกเก็ตที่ฟังบน IP เฉพาะ (เช่น[::1]:80) ขัดแย้งกับซ็อกเก็ตที่ฟังบนพอร์ตเดียวกัน แต่ IP ใด ๆ (เช่น[::]:80) โดยปกติแล้ว nginx จะจัดการกับปัญหานี้อย่างโปร่งใสโดยใช้ซ็อกเก็ตเดียวที่อยู่เบื้องหลัง อย่างไรก็ตามการระบุอย่างชัดเจนipv6only(หรือตัวเลือกอื่น ๆ ) ในฟังคำสั่งบังคับให้ nginx เพื่อ (พยายาม) สร้างซ็อกเก็ตที่แยกต่างหากสำหรับมันทำให้เกิดAddress already in useข้อผิดพลาด

เนื่องจากipv6only=onเป็นค่าเริ่มต้น (ตั้งแต่ 1.3.4) การแก้ไขเป็นเพียงการลบตัวเลือกนั้นออกจากคำสั่งนี้และทำให้แน่ใจipv6onlyว่าไม่ได้ใช้งานที่อื่นในการกำหนดค่าของฉัน


0

ฉันมีปัญหาเดียวกัน แต่ฉันเห็นพอร์ต 80 ที่ฟังโดย Nginx:

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      9730/nginx 

แต่เมื่อฉันพยายามรีสตาร์ทฉันมีข้อผิดพลาด:

    service nginx restart
Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()

ปัญหาของฉันอยู่ในไฟล์กำหนดค่าฉันตั้งค่าไฟล์ PID และดูเหมือนว่าระบบไม่สามารถตรวจจับได้อย่างถูกต้อง:

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

เมื่อฉันลบมันมันทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.