ERR_CONNECTION_REFUSED: สาเหตุและวิธีแก้
· อ่าน 2 นาที
ข้อผิดพลาดนี้หมายถึงอะไร
เบราว์เซอร์พบที่อยู่ของเซิร์ฟเวอร์ ส่งคำขอเชื่อมต่อไปที่พอร์ต 443 (หรือ 80) และเซิร์ฟเวอร์ตอบว่า “ไม่”: TCP reset ซึ่งระบบปฏิบัติการส่งเมื่อไม่มีโปรแกรมรับฟังที่พอร์ตนั้น Chrome แสดง ERR_CONNECTION_REFUSED (“ไม่สามารถเข้าถึงเว็บไซต์นี้ได้”) Firefox แสดง “ไม่สามารถเชื่อมต่อได้” Safari แสดง “Safari ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์”
ต่างจาก timeout (ไม่มีอะไรตอบเลย มักเป็นไฟร์วอลล์ที่ทิ้งแพ็กเก็ตหรือเซิร์ฟเวอร์ที่ปิดอยู่) และจาก DNS_PROBE_FINISHED_NXDOMAIN (ชื่อแปลงเป็นที่อยู่ไม่ได้) การเชื่อมต่อที่ถูกปฏิเสธหมายความว่า: เครื่องทำงานอยู่และเข้าถึงได้ แต่เว็บเซิร์ฟเวอร์บนเครื่องไม่ได้ทำงาน รับฟังที่พอร์ตหรือที่อยู่อื่น หรือถูกไฟร์วอลล์ที่ปฏิเสธ (ไม่ใช่ทิ้ง) บล็อก
สาเหตุที่พบบ่อย
- เว็บเซิร์ฟเวอร์หยุดอยู่ nginx หรือ Apache ล่ม เริ่มไม่ได้หลังเปลี่ยนการตั้งค่า หรือถูกอัปเดตหยุด เป็นสาเหตุที่พบบ่อยที่สุดด้วยระยะห่างมาก
- เว็บเซิร์ฟเวอร์รับฟังที่ที่อยู่หรือพอร์ตผิด หลังเปลี่ยนคำสั่ง
listennginx ผูกเฉพาะ127.0.0.1หรือเฉพาะ IPv4 ขณะที่ระเบียน DNS ชี้ไปที่ที่อยู่ IPv6 - ไฟร์วอลล์ปฏิเสธพอร์ต
ufw,firewalldหรือ security group ของ cloud ที่มีกฎrejectสำหรับ 80/443 มักหลังมีคน “เสริมความปลอดภัย” ให้เซิร์ฟเวอร์ - เซิร์ฟเวอร์ใหม่ที่ไม่มีเว็บเซิร์ฟเวอร์ ระเบียน DNS ชี้ไปที่ IP ใหม่แล้ว แต่ยังไม่ได้ติดตั้งหรือเริ่ม nginx
- ยังไม่ได้ตั้งค่า HTTPS พอร์ต 80 ใช้ได้ พอร์ต 443 ไม่มีผู้รับฟัง และเบราว์เซอร์ (หรือรายการ HSTS) ยืนกรานใช้ HTTPS
- สาเหตุในเครื่องฝั่งผู้เข้าชม การตั้งค่าพร็อกซีที่ชี้ไปยังพร็อกซีที่ตายแล้ว VPN “web shield” ของโปรแกรมป้องกันไวรัส รายการในไฟล์ hosts หรือส่วนขยายเบราว์เซอร์
หากคุณเป็นผู้เข้าชม
- ลองเว็บไซต์ในหน้าต่างส่วนตัวและกับเบราว์เซอร์อื่น ซึ่งตัดส่วนขยายและแคชออก
- ตรวจการตั้งค่าพร็อกซี: Windows “Proxy settings”, macOS Network > Advanced > Proxies ปิดพร็อกซีแบบกำหนดเองที่คุณไม่ได้ใช้
- ปิด VPN และการป้องกันเว็บของโปรแกรมป้องกันไวรัสชั่วคราว
- ล้าง DNS (
ipconfig /flushdns,sudo dscacheutil -flushcache) เผื่อแคชของคุณเก็บที่อยู่เก่าของเว็บไซต์ที่ย้ายไปแล้ว - ลอง
http://แทนhttps://หนึ่งครั้ง หากใช้ได้ HTTPS ของเว็บไซต์เสียและเจ้าของต้องแก้
หากเป็นเว็บไซต์ของคุณ: ตรวจสอบก่อน
รันเครื่องมือตรวจว่าเว็บไซต์ล่มหรือไม่ “Connection refused” จากภายนอกยืนยันว่าเซิร์ฟเวอร์เองปฏิเสธ จากนั้นเข้าสู่ระบบด้วย SSH (SSH ใช้ได้ขณะที่เว็บไซต์ปฏิเสธเป็นคำใบ้ที่ชัดเจนในตัวเอง: เซิร์ฟเวอร์ทำงานอยู่ เว็บเซิร์ฟเวอร์ไม่ได้ทำงาน)
# เว็บเซิร์ฟเวอร์ทำงานอยู่ไหม
systemctl status nginx
systemctl status apache2
# อะไรรับฟังที่ 80 และ 443
sudo ss -tlnp | grep -E ':80 |:443 '
# กฎไฟร์วอลล์
sudo ufw status verbose
sudo firewall-cmd --list-all
sudo nft list ruleset | grep -E 'dport (80|443)'
หาก ss ไม่แสดงอะไรที่ 443 เว็บเซิร์ฟเวอร์ล่มหรือไม่ได้ตั้งค่าสำหรับพอร์ตนั้น หากแสดง 127.0.0.1:443 แทน 0.0.0.0:443 หรือ *:443 แสดงว่ารับฟังเฉพาะในเครื่อง
วิธีแก้บนเซิร์ฟเวอร์ของคุณเอง
1. เริ่มเว็บเซิร์ฟเวอร์ และอ่านว่าทำไมจึงหยุด
sudo systemctl start nginx
systemctl status nginx
sudo journalctl -u nginx -n 50
หากเริ่มไม่ได้ เหตุผลเกือบทุกครั้งเป็นหนึ่งในนี้:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use): โปรแกรมอื่นถือพอร์ตอยู่ (ติดตั้งทั้ง Apache และ nginx หรือโพรเซสค้าง)sudo ss -tlnp | grep :80บอกชื่อ หยุดตัวที่คุณไม่ต้องการ[emerg] unknown directiveหรือunexpected "}": ข้อผิดพลาดไวยากรณ์ในไฟล์การตั้งค่าsudo nginx -tแสดงไฟล์และบรรทัดcannot load certificate: ไฟล์ใบรับรองถูกลบหรือต่ออายุไปไว้ที่เส้นทางอื่น ตรวจบรรทัดssl_certificateเทียบกับที่มีอยู่บนดิสก์Too many open filesหรือดิสก์เต็ม:df -h,df -i
Apache: sudo apachectl configtest แล้ว sudo journalctl -u apache2 -n 50 ประเภทเดียวกันใช้ได้ AH00558 (กำหนดชื่อเซิร์ฟเวอร์ไม่ได้) เป็นเพียงคำเตือน ไม่ใช่สาเหตุ
ทดสอบก่อนรีโหลดเสมอ และรีโหลดแทนการรีสตาร์ทเมื่อเป็นไปได้:
sudo nginx -t && sudo systemctl reload nginx
sudo apachectl configtest && sudo systemctl reload apache2
2. รับฟังที่ที่อยู่ที่ถูกต้อง
ใน server block ของ nginx ต้องมีทั้งสองอย่างนี้สำหรับ IPv4 และ IPv6:
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
หาก DNS มีระเบียน AAAA แต่เซิร์ฟเวอร์ไม่ได้รับฟังที่ IPv6 (หรือไม่มีการเชื่อมต่อ IPv6) ผู้เข้าชมที่ใช้ IPv6 จะได้การเชื่อมต่อที่ถูกปฏิเสธขณะที่คนอื่นปกติดี ทำให้รับฟัง หรือลบระเบียน AAAA
3. เปิดไฟร์วอลล์
# ufw (Debian/Ubuntu)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# firewalld (ตระกูล RHEL)
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
บนเซิร์ฟเวอร์ cloud ให้ตรวจ security group หรือไฟร์วอลล์เครือข่ายของผู้ให้บริการในแผงควบคุมด้วย กฎที่นั่นมองไม่เห็นจากภายในเซิร์ฟเวอร์
4. ตั้งค่า HTTPS หากมีเฉพาะพอร์ต 80 ที่ตอบ
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot เพิ่ม server block ของพอร์ต 443 และการเปลี่ยนเส้นทาง จากนั้นตรวจด้วยเครื่องมือตรวจ SSLว่าสายใบรับรองครบ
5. หลังย้ายเซิร์ฟเวอร์
ตรวจให้แน่ใจว่าเว็บเซิร์ฟเวอร์บนเครื่องใหม่ติดตั้ง ตั้งค่าสำหรับโดเมน และเริ่มแล้วก่อนเปลี่ยน DNS หากเปลี่ยนไปแล้ว: ติดตั้งและเริ่มตอนนี้ หรือชี้ระเบียนกลับไปที่เซิร์ฟเวอร์เก่าจนกว่าเครื่องใหม่จะพร้อม
เมื่อเป็นปัญหาของผู้ให้บริการโฮสติ้ง
บน shared hosting การเชื่อมต่อที่ถูกปฏิเสธหมายความว่าเว็บเซิร์ฟเวอร์ของผู้ให้บริการล่มสำหรับโหนดของคุณ หรือพวกเขาย้ายคุณไปที่ IP ใหม่โดยไม่อัปเดต DNS ส่งข้อความ:
สวัสดี เว็บไซต์ของฉัน example.com ส่งคืน “connection refused” ที่พอร์ต 80 และ 443 ตั้งแต่ประมาณ 20:15 UTC โดเมนแปลงเป็น 203.0.113.10 ฉันไม่ได้เปลี่ยนแปลงอะไรในบัญชี เว็บเซิร์ฟเวอร์บนเครื่องนั้นล่มหรือไม่ หรือเว็บไซต์ของฉันถูกย้ายไปที่อยู่อื่น
ป้องกันครั้งต่อไป
การเชื่อมต่อที่ถูกปฏิเสธเกือบทุกครั้งคือเว็บเซิร์ฟเวอร์ที่หยุด และบริการที่หยุดคือสิ่งที่การตรวจสอบพอร์ตและเว็บไซต์จากภายนอกสังเกตเห็นภายในหนึ่งนาที บนเซิร์ฟเวอร์ของคุณเอง เซิร์ฟเวอร์เอเจนต์แจ้งเตือนเมื่อ nginx หรือ Apache หยุด และ Quick Fix รีสตาร์ทให้หลังผ่านการทดสอบการตั้งค่า ในราคาคงที่ โดยไม่ต้องมีใครล็อกอินตอนตี 3 หากการตั้งค่าเองเสีย Deep Fix ซ่อมให้
ขั้นต่อไป
ตรวจจากภายนอก
เว็บไซต์ล่มสำหรับทุกคนหรือเฉพาะคุณ และเซิร์ฟเวอร์ตอบกลับอย่างไร ฟรี ไม่ต้องสมัคร
เครื่องมือตรวจว่าเว็บไซต์ล่มหรือไม่ล่มใช่ไหม เราเข้าไปจัดการ
บนเซิร์ฟเวอร์ของคุณเองหรือเว็บสเปซที่มี SSH: Quick Fix ในราคาคงที่สำหรับสาเหตุที่พบบ่อย Deep Fix คิดเป็นช่วงละ 15 นาทีสำหรับส่วนที่เหลือ ตลอด 24 ชั่วโมง เห็นราคาก่อนสั่งซื้อ
ให้เราซ่อมแซมคู่มืออื่น ๆ
- เว็บไซต์ของคุณล่ม นี่คือสิ่งที่ต้องทำใน 15 นาทีแรก
- เซิร์ฟเวอร์ล่ม: ต้องตรวจอะไรก่อน และตามลำดับไหน
- 502 Bad Gateway: สาเหตุและวิธีแก้
- 503 Service Unavailable: โหลดเกินหรืออยู่ในโหมดบำรุงรักษา
- 504 Gateway Timeout: หมายถึงอะไรและแก้อย่างไร
- DNS_PROBE_FINISHED_NXDOMAIN: สาเหตุและวิธีแก้
- “การเชื่อมต่อของคุณไม่เป็นส่วนตัว”: คำเตือนใบรับรอง SSL