Saya tahu topik ini ada dalam berbagai bentuk, tetapi saya mengalami kesulitan menyelesaikan masalah saya. Jika saya menjalankan service nginx restart
, nginx gagal dengan log berikut:
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: still could not bind()
Saya hanya punya satu konfigurasi pemuatan sites-enabled
. Ketika saya menjalankan:
$ grep -slir "listen 80"
$ sites-available/default
Ini menunjukkan bahwa default
konfigurasi telah mendengarkan 80, tetapi itu tidak masalah karena tidak ada sites-enabled
.
$ ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'
PID PPID %CPU VSZ WCHAN COMMAND
9468 1 0.0 97188 sigsus nginx: master process /usr/sbin/nginx
9471 9468 0.0 97328 ep_pol nginx: worker process
9472 9468 0.0 97368 ep_pol nginx: worker process
9693 9641 0.0 9448 pipe_w egrep --color=auto (nginx|PID)
Berikut ini netstat
menunjukkan port apa yang sedang digunakan:
$ netstat -tulpn
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1300/master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 9468/nginx
tcp 0 0 0.0.0.0:2812 0.0.0.0:* LISTEN 5980/monit
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1174/mysqld
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 1155/memcached
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9468/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1113/sshd
tcp6 0 0 :::25 :::* LISTEN 1300/master
tcp6 0 0 :::9000 :::* LISTEN 9106/hhvm
tcp6 0 0 :::22 :::* LISTEN 1113/sshd
udp 0 0 127.0.0.1:11211 0.0.0.0:* 1155/memcached
Dan inilah konfigurasi lengkap saya sites-enabled
(satu-satunya di sana):
server {
listen 443 ssl default_server;
limit_conn gulag 15;
server_name www.my-website.com;
access_log /home/my-website/logs/access.log;
error_log /home/my-website/logs/error.log info;
root /home/my-website/web;
index index.php index.html;
ssl_certificate /etc/nginx/ssl/my-website.com.chained.crt;
ssl_certificate_key /etc/nginx/ssl/my-website.com.key;
ssl_prefer_server_ciphers On;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
include /etc/nginx/includes/my-website_redirects_https.inc;
include /etc/nginx/includes/file_cache.inc;
include /etc/nginx/includes/wordpress.inc;
}
server {
listen 80;
server_name my-website.com www.my-website.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
server_name my-website.com;
return 301 https://www.$server_name$request_uri;
}
server {
server_name
some-other-website1.com www.some-other-website1.com
some-other-website2.com www.some-other-website2.com
some-other-website3.com www.some-other-website3.com
some-other-website4.com www.some-other-website4.com
some-other-website5.com www.some-other-website5.com
rewrite ^(.*)$ https://www.my-website.com/some/page/ permanent;
}
server {
server_name
some-other-website6.com www.some-other-website6.com
some-other-website7.com www.some-other-website7.com
some-other-website8.com www.some-other-website8.com
rewrite ^(.*)$ https://www.my-website.com/some/other/page/ permanent;
}
server {
server_name subdomain.my-website.com;
rewrite ^(.*)$ https://some.otherwebsite.com/ permanent;
}
server {
server_name
some-other-website9.com www.some-other-website9.com
some-other-website10.com www.some-other-website10.com
some-other-website11.com www.some-other-website11.com
rewrite ^(.*)$ https://www.my-website.com/ permanent;
}
Saya bertanya-tanya apakah kesalahan bind () ini terjadi karena konfigurasi saya. Adakah ide yang mungkin saya lakukan salah? Saya menggunakan nginx / 1.4.6 (Ubuntu). Bantuan apa pun akan sangat dihargai.
Jawaban:
Coba hentikan nginx:
Periksa nginx yang masih berjalan:
Dan jika masih berjalan, matikan prosesnya:
Periksa status nginx, tidak akan berjalan:
Dan kemudian lakukan start bersih:
Ini bekerja untuk saya setelah masalah yang sama.
sumber
Menurut
netstat
hasil keluaran Anda , nginx sendiri masih berjalan di port 80.Sebelum Anda mencoba untuk me-restart itu, validasi konfigurasi Anda dengan
nginx -t
dan perbaiki kesalahan.sumber
Saya mungkin satu-satunya yang cukup bodoh untuk melakukan kesalahan ini, tetapi saya tidak sengaja mengunduh paket yang salah (
php
bukanphp-fpm
), yang menginstal Apache 2 sebagai ketergantungan. Karena itu berjalan pada port 80, Nginx tidak bisa.Mungkin bukan kesalahan yang sangat umum, tapi saya kira takeaway adalah untuk memeriksa apakah Anda secara tidak sengaja memiliki hal lain di port 80.
sumber
mod_php
sebaliknya. Tapi sekarang sudah seperti itu selama bertahun-tahun, itu tidak dapat diubah tanpa merusak sistem semua orang.apt-get remove apache2 && apt-get autoremove
)Saya punya masalah serupa.
Inilah yang bekerja untuk saya:
sudo fuser -k 80/tcp
lalu:
service nginx restart
Saya tidak tahu penyebabnya, tetapi jawaban saya ditemukan di sini: https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/
Juga, di sini adalah latar belakang tentang bagaimana / kapan pesan kesalahan ini muncul: https://serverfault.com/a/939888/399723
sumber