Nginx ไม่สามารถโหลดซ้ำได้ - จะติดตามได้อย่างไรทำไม


96

สวัสดีฉันมีเซิร์ฟเวอร์ Nginx ของฉันทำงานได้ดีบนเซิร์ฟเวอร์ Ubuntu 12.04 ในขณะที่

ฉันได้รับการทยอยค่อยๆบิตต่างๆและได้เท่าที่เพิ่มประสิทธิภาพการโหลดในหน้า wordpress ของฉัน

หลังจากทำการเปลี่ยนแปลงไฟล์โฮสต์ของฉันฉันตัดสินใจที่จะ:

sudo /etc/init.d/nginx reload

ที่ฉันได้รับ:

  • โหลดซ้ำการกำหนดค่า nginx nginx [ล้มเหลว]

ไม่มีการให้ข้อมูลหรือเหตุผลเพิ่มเติม ฉันจะรีสตาร์ทเซิร์ฟเวอร์ของฉันเพื่อที่จะพิมพ์ข้อความแสดงข้อผิดพลาดขณะโหลดใหม่เพื่อให้ฉันสามารถติดตามข้อผิดพลาดได้

สำหรับคำถามโบนัส:

สำหรับ Nginx sysadmins เมื่อคุณทำการเปลี่ยนแปลงมากมายกับโฮสต์และติดตั้งบนบิตอื่น ๆ และทันใดนั้นเซิร์ฟเวอร์ nginx ของคุณจะไม่โหลดซ้ำ (โดยบังเอิญทุกอย่างยังคงปรากฏอยู่!) คุณจะเริ่มต้นวิธีแยกได้อย่างไร ทำไมหรือเริ่มทำลายสิ่งต่าง ๆ เพื่อแก้ไขข้อบกพร่อง!


4
ตรวจสอบไวยากรณ์ของคุณด้วยsudo nginx -t(หรือsudo nginx -p /etc/nginx -c nginx.confที่ไหน/etc/nginxคำนำหน้าการกำหนดค่าของคุณและnginx.confไฟล์กำหนดค่าหลัก)
Lekensteyn

sudo nginx -s reload ดูเหมือนจะให้ฉันอ่านด้วย!
Huw

คำตอบ:


145

ตรวจสอบ syslog (/ var / log / syslog) สำหรับข้อความเกี่ยวกับปัญหาไฟล์กำหนดค่า

จาก commandline คุณสามารถเรียกใช้:

nginx -c /etc/nginx/nginx.conf -t

เพื่อให้ nginx ตรวจสอบการกำหนดค่าของคุณเพื่อหาข้อผิดพลาด


อ้า! มีประโยชน์มากฉันดูเหมือนจะได้รับ: ตำแหน่ง "/ บล็อก / wp-admin" อยู่นอกสถานที่ "/blog/.*\.php$" ใน /etc/nginx/site-configs/wordpress.conf:1 ... น่าสนใจ ให้ฉันทำอะไรต่อไป!
Huw

2
โอ๊ะ! การค้นหาสามชั่วโมงและปรากฎว่าฉันพลาด ขอบคุณสำหรับความช่วยเหลือทั้งหมดที่พิสูจน์แล้วว่าสำคัญในการติดตามมัน อนึ่งถ้าใครเคยลงเอยที่คำถามนี้หลังจากทำตามโพสต์บนเว็บเสิร์ชของ Ars Technica ฉันคิดว่าฉันเคยผ่านพวกเขาด้วยหวีฟันดีตอนนี้!
Huw

4
ใช้คำสั่งนี้ให้ฉันnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successfulแต่ฉันก็ยังไม่สามารถเริ่ม nginx ได้
Bill Garrison

1
@BillGarrison ตรวจสอบ syslog และบันทึกข้อผิดพลาด nginx สำหรับข้อมูลเพิ่มเติม
Dlloyd


7

/var/log/nginx/error.logคุณอาจจะตรวจสอบข้อผิดพลาดใน

ในกรณีของฉันฉันไม่ได้เพิ่มพอร์ตสำหรับ ipv6 คุณควรทำเช่นนี้ (ในกรณีที่คุณใช้งาน nginx บนพอร์ตอื่นที่ไม่ใช่ 80): listen [::]:8000 default_server ipv6only=on;


1
หมายเหตุ: หากสิทธิ์ของคุณไม่ถูกต้อง/var/log/nginx/error.lognginx จะไม่สามารถเขียนข้อผิดพลาดได้และจะล้มเหลวอย่างเงียบ ๆ การตรวจสอบการกำหนดค่าของคุณในคำตอบที่ยอมรับ ( nginx -c /etc/nginx/nginx.conf -t) จะช่วยได้
898763452

5

ฉันรันคำสั่งเหล่านี้เพื่อรับ nginx สำรองและทำงาน:

# remove nginx conf files
apt-get purge nginx

# reinstall
apt-get install nginx

# make sure the default site is enabled
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

# start nginx
sudo /etc/init.d/nginx start 

nginx กำลังทำงาน !!


2
คุณไม่ต้องลบและล้างเพียงแค่กำจัด และยากที่จะทราบว่านี่คือ goin gto ตอบคำถามเพราะการล้างข้อมูลจะลบไฟล์ config ทั้งหมด
Panther

1
เป็นการดี - และสำหรับผู้ใช้คนอื่น ๆ ฉันอยากได้จำนวนสูงสุดของการอ่านข้อมูลว่าเกิดความผิดพลาดที่ไหนและซ่อมแซมการติดตั้งปัจจุบันของฉันแทนการกวาดล้างและเริ่มจากศูนย์
Huw

1
@ bodhi.zazen ฉันแก้ไขคำตอบของฉันแล้ว และสำหรับสิ่งที่ "Huw" พูดฉันเห็นด้วย มันเป็นเพียงตอนแรกที่ฉันติดตั้งและตั้งค่าnginxดังนั้นจึงไม่ใช่เรื่องใหญ่ที่จะลบออกและเริ่มต้นใหม่แทนที่จะติดตามข้อผิดพลาด ขอบคุณทั้งคู่สำหรับอินไซด์ของคุณ
Aaron Lelevier

ในกรณีของฉันฉันเท่านั้นฉันต้องเริ่มใช้คำสั่งนี้ sudo /etc/init.d/nginx start
รหัส Sizzling

3

ตรวจสอบ/etc/nginx/sites-available/defaultสำเนาของคุณหรือสิ่งที่คุณกำลังใช้และตรวจสอบให้แน่ใจว่าคุณไม่ได้แสดงความคิดเห็น (ลบ#) สิ่งที่}คุณอาจจำเป็นต้องมีเมื่อเทียบกับสิ่ง{ที่น่าจะเป็นไม่ได้แสดงความคิดเห็น นั่นคือปัญหาของฉัน


2

จำเป็นต้องกำจัด nginx จากนั้นพิมพ์ที่บรรทัดคำสั่ง:

ln -s /etc/nginx/sites-availbale/default .etc/nginx/sites-enabled/default

คุณหมายถึงapt-get purgeอะไร
RolandiXor

2

ทำการเปิดไฟล์ทั้งหมดอีกครั้งโดยใช้

nginx -s reopen

จากนั้นใช้

nginx -s reload

ในฐานะที่เป็น nginx ช่วยแสดงให้เห็นว่ามันจะโหลด nginx โดยการส่งสัญญาณไปยังกระบวนการหลักมันควรจะทำงาน

คำขอ: โปรดอย่าให้purgeคำสั่งโดยไม่ระมัดระวังเนื่องจากอาจเป็นปัญหาสำหรับผู้เริ่มต้น (การกำหนดค่าทั้งหมดจะหายไป) .... ปัญหาใหญ่


1

หากมีการให้คุณมีข้อผิดพลาดเช่นคุณสามารถตรวจสอบjournalctl -xeออก
มันมีข้อมูลมากมายเกี่ยวกับสิ่งที่เกิดขึ้นในระบบปฏิบัติการ
คุณสามารถค้นหาบรรทัดหรือเพียงjournalctl -xe | grep nginxเพื่อค้นหาสิ่งที่เกิดขึ้นกับ nginx เมื่อพยายามเรียกใช้ตัวเอง

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