it-swarm.asia

nginx - nginx: [الطوارئ] bind () إلى [::]: 80 فشل (98: العنوان قيد الاستخدام بالفعل)

فجأة أحصل على خطأ 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 مع

تمرير الوكيل على المنفذ 8070. uwsgi قيد التشغيل. إنجن إكس ليس كذلك. أنا أستخدم أوبونتو 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 على أوبونتو 12.04

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

[::]: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

188
Nathan

لقد أصلحت ذلك عن طريق تشغيل Sudo apachectl stop - تبين أن Apache كان يعمل في الخلفية ومنع nginx من البدء في المنفذ المطلوب.

عند تشغيل أوبونتو Sudo /etc/init.d/Apache2 stop

186
lfender6445

لقد وجدت المشكلة التي لم أواجهها من قبل.

اضطررت فقط إلى حذف /etc/nginx/sites-available/default. ثم عملت.

وكان بلدي أسيوط في /etc/nginx/default.

32
Tampa

حالتي مختلفة ، اضطررت إلى قتل تشغيل Nginx لإعادة تشغيله.

بدلا من

Sudo systemctl restart nginx

اضطررت لاستخدام:

Sudo pkill -f nginx
Sudo systemctl start nginx
26
datdinhquoc

كنت أتلقى نفس الخطأ أيضًا.

nginx: [الناشئة] bind () إلى [::]: 80 فشل (98: العنوان قيد الاستخدام بالفعل)

وعندما كتبت المضيف المحلي في المتصفح ، ثم كنت أتلقى

إنها تعمل!

هذه هي صفحة الويب الافتراضية لهذا الخادم.

برنامج خادم الويب قيد التشغيل ولكن لم تتم إضافة أي محتوى بعد. بدلاً من صفحة الترحيب بـ nginx ، يعمل Apache2 على نفس المنفذ ،

  1. العثور على Apache2 ports.conf ملف

    Sudo /etc/Apache2/ports.conf
    
  2. غير المنفذ الآخر ثم 80 ، أجعله كـ 70

  3. حفظ الملف

  4. أعد تشغيل النظام الخاص بك

ستعمل لك أيضًا ، إذا قمت بكتابة المضيف المحلي في المستعرض ، فستحصل على صفحة ترحيب nginx

21
SAURABH

واجهت نفس المشكلة في letsencrypt (certbot) و nginx ،

المرجع: https://github.com/certbot/certbot/issues/5486

هذا الخطأ ليس لديه حل بعد

لذلك ، تغيرت كرون للتجديد (وضع إعادة التحميل بعد التجديد) (باستخدام توحي من 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()
4
Wagner Pereira

حاول أن تفعل هذا الأمر

Sudo fuser -k 443/tcp
service nginx restart
4
jack

أول تغيير أباتشي الاستماع ميناء 80 إلى 8080 أباتشي في /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 كخادم وكيل عكسي يستمع إلى منفذ 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 ويتم تقديم conten الثابت بواسطة خادم nginx.

للتكوين المسبق مثل ذاكرة التخزين المؤقت:

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

1
Kamal Kumar

في حالتي ، كانت إحدى الخدمات إما Apache أو Apache2 أو Nginx قيد التشغيل بالفعل وبسبب ذلك لم أتمكن من بدء تشغيل الخدمة الأخرى.

1
Rishikesh Chandra

كانت مشكلتي أن لدي تداخل في توجيهات الاستماع. لقد تمكنت من معرفة التوجيهات المتداخلة عن طريق تشغيل

grep -r listen /etc/nginx/*

تم الاستماع إلى ملفين في نفس المنفذ:

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

التقيت مشكلة مماثلة. السجل يشبه أدناه

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

ملاحظة ربما لديك ملف كتلة الافتراضي. نصيحتي هي الاحتفاظ بهذا الملف كخادم افتراضي للمنفذ 80. وإزالة [::]:80 من ملفات الحظر الأخرى

1
Oscar Zhou1989

إذا استمرت المشكلة بعد تجربة أي من الحلول المذكورة أعلاه ، فأعد تشغيل الخادم مرة واحدة. عملت معي :)

0
Deejay

كان لدي العديد من ملفات * .save (مقالب الطوارئ من nano) من ملفات التكوين المختلفة NGINX في dir-avilable sites. بمجرد حذف هذه الملفات .save ، أعد تشغيل NGINX بشكل جيد. لقد افترضت أنها غير ضارة لأنه لم تكن هناك روابط مماثلة ، لكنني أعتقد أنني كنت مخطئًا.

0
Allen

لمتابعة إجابات lfender6445 @ وSAURABH -

كانت مشكلتي أيضًا حقيقة أنه بعد الترقية إلى Vagrant 2.2.2 ، كان Apache2 يعمل كخادم ويب عندما قام الضيف بالإقلاع. في الماضي كان لدي فقط nginx كخادم ويب.

sag vagrant في المربع وقم بتشغيل الأمر التالي لتعطيل Apache2 من البدء كلما قام صندوق الضيف بالتمهيد:

Sudo update-rc.d -f Apache2 remove

الخروج من ssh ، توقف متشرد ، متشرد يصل. تم حل المشكلة.

0
Lance Cleveland