วิธีสร้างโฮสต์เสมือนใน nginx Nginx คืออะไร

Nginx เป็นเว็บเซิร์ฟเวอร์และพร็อกซีย้อนกลับที่ได้รับความนิยมและมีประสิทธิภาพ

Nginx มีข้อดีหลายประการ แต่การตั้งค่าค่อนข้างซับซ้อนและไม่ชัดเจนสำหรับผู้เริ่มต้นเสมอไป คู่มือเล่มนี้จะช่วยให้คุณเข้าใจพารามิเตอร์พื้นฐาน ไวยากรณ์ และไฟล์การกำหนดค่าของ Nginx

บันทึก: บทช่วยสอนนี้ทำบน Ubuntu 12.04

ลำดับชั้นไดเรกทอรี Nginx

Nginx เก็บไฟล์การกำหนดค่าไว้ในไดเร็กทอรี /etc/nginx

ไดเร็กทอรีนี้ประกอบด้วยไดเร็กทอรีและไฟล์การกำหนดค่าโมดูลาร์เพิ่มเติมอีกหลายรายการ

ซีดี /etc/nginx.cd
ลส -F

conf.d/ koi-win naxsi.rules scgi_params uwsgi_params
fastcgi_params mime.types nginx.conf ไซต์พร้อมใช้งาน/win-utf
koi-utf naxsi_core.rules proxy_params ไซต์ที่เปิดใช้งาน/

ผู้ใช้ Apache มีความคุ้นเคยกับไดเร็กทอรีที่พร้อมใช้งานของไซต์และที่เปิดใช้งานไซต์อยู่แล้ว ไดเร็กทอรีเหล่านี้กำหนดการกำหนดค่าไซต์ โดยปกติไฟล์จะถูกสร้างและเก็บไว้ในไซต์ที่มีอยู่ ไซต์ที่เปิดใช้งานจะจัดเก็บเฉพาะการกำหนดค่าของไซต์ที่เปิดใช้งานเท่านั้น ในการดำเนินการนี้ คุณจะต้องสร้างลิงก์สัญลักษณ์จากไซต์ที่พร้อมใช้งานไปยังไซต์ที่เปิดใช้งาน

ไดเร็กทอรี conf.d ยังสามารถใช้เพื่อจัดเก็บการกำหนดค่าได้ แต่ละไฟล์ที่มีนามสกุล .conf จะถูกอ่านเมื่อ Nginx เริ่มทำงาน ไวยากรณ์ของไฟล์ดังกล่าวไม่ควรมีข้อผิดพลาด

ไฟล์ที่เหลือเกือบทั้งหมดจะถูกเก็บไว้ใน /etc/nginx ซึ่งมีข้อมูลการกำหนดค่าสำหรับกระบวนการเฉพาะหรือส่วนประกอบเพิ่มเติม

ไฟล์การกำหนดค่า Nginx หลักคือ nginx.conf

ไฟล์ nginx.conf

ไฟล์ nginx.conf อ่านไฟล์การกำหนดค่าที่เกี่ยวข้องและรวมเข้าด้วยกัน ไฟล์เดียวการกำหนดค่าเมื่อเริ่มต้นเซิร์ฟเวอร์

เปิดไฟล์:

sudo นาโน /etc/nginx/nginx.conf

ผู้ใช้ www-data;
ผู้ปฏิบัติงาน_กระบวนการ 4;
pid /var/run/nginx.pid;
เหตุการณ์ (
ผู้ปฏิบัติงาน_การเชื่อมต่อ 768;
#multi_accept บน;
}
http(
. . .

บรรทัดแรกระบุ ข้อมูลทั่วไปเกี่ยวกับ Nginx ผู้ใช้บรรทัด www-data ระบุผู้ใช้ที่เซิร์ฟเวอร์เริ่มทำงาน

คำสั่ง pid ระบุตำแหน่งที่จะจัดเก็บ ประมวลผล PIDสำหรับ การใช้งานภายใน- บรรทัด worker_processes กำหนดจำนวนกระบวนการที่ Nginx สามารถรองรับได้พร้อมกัน

คุณยังสามารถระบุบันทึกในส่วนนี้ของไฟล์ได้ (เช่น บันทึกข้อผิดพลาดถูกกำหนดโดยใช้คำสั่ง error_log)

ติดตามข้อมูลทั่วไปเกี่ยวกับเซิร์ฟเวอร์เป็นส่วนกิจกรรม จัดการการจัดการการเชื่อมต่อ Nginx ตามด้วยบล็อก http ก่อนที่เราจะดำเนินการกำหนดค่าเว็บเซิร์ฟเวอร์ต่อ เราต้องทำความเข้าใจวิธีการจัดรูปแบบไฟล์การกำหนดค่า Nginx

โครงสร้างไฟล์การกำหนดค่า Nginx

ไฟล์การกำหนดค่า Nginx แบ่งออกเป็นบล็อก

บล็อกแรกคือเหตุการณ์ ตามด้วย http และลำดับชั้นหลักของการกำหนดค่าเริ่มต้นขึ้น

รายละเอียดการกำหนดค่าของบล็อก http จะถูกแบ่งชั้นโดยใช้บล็อกปิดที่สืบทอดคุณสมบัติจากบล็อกที่บล็อกนั้นอยู่ บล็อก http เก็บการกำหนดค่า Nginx ทั่วไปส่วนใหญ่ ซึ่งแบ่งออกเป็นบล็อกเซิร์ฟเวอร์ ซึ่งจะแบ่งออกเป็นบล็อกตำแหน่ง

สิ่งสำคัญที่ต้องจำไว้เมื่อตั้งค่า Nginx กฎถัดไป: ยิ่งระดับการกำหนดค่าสูงเท่าใด บล็อกก็จะสืบทอดการกำหนดค่านี้มากขึ้นเท่านั้น ยิ่งระดับการกำหนดค่าต่ำลงเท่าใดก็ยิ่งมีความ "เป็นรายบุคคล" มากขึ้นเท่านั้น นั่นคือ หากต้องใช้พารามิเตอร์ X ในแต่ละบล็อกเซิร์ฟเวอร์ จะต้องวางพารามิเตอร์ดังกล่าวในบล็อก http

หากคุณดูไฟล์อย่างใกล้ชิด คุณจะสังเกตเห็นว่ามันมีตัวเลือกมากมายที่กำหนดลักษณะการทำงานของโปรแกรมโดยรวม

ตัวอย่างเช่น ในการกำหนดค่าการบีบอัดไฟล์ คุณต้องตั้งค่าพารามิเตอร์ต่อไปนี้:

เปิด gzip;
gzip_disable "msie6";

ซึ่งจะเปิดใช้งานการสนับสนุน gzip สำหรับการบีบอัดข้อมูลที่ส่งไปยังไคลเอ็นต์ และปิดใช้งาน gzip สำหรับ อินเทอร์เน็ตเอ็กซ์พลอเรอร์ 6 (เนื่องจากเบราว์เซอร์นี้ไม่รองรับการบีบอัดข้อมูล)

หากพารามิเตอร์ควรมีค่าที่แตกต่างกันในหลายบล็อกเซิร์ฟเวอร์ ก็สามารถตั้งค่าพารามิเตอร์ดังกล่าวได้ ระดับสูงแล้วแทนที่มันภายในบล็อกเซิร์ฟเวอร์เอง เป็นผลให้ Nginx ดำเนินการพารามิเตอร์ระดับต่ำสุด

การกำหนดค่าหลายชั้นนี้ช่วยหลีกเลี่ยงความจำเป็นในการจัดการไฟล์ที่เหมือนกันหลายไฟล์ นอกจากนี้หากคุณลืมกำหนดพารามิเตอร์ ระดับต่ำสุด Nginx จะใช้ตัวเลือกเริ่มต้นเพียงอย่างเดียว

บล็อก http ในไฟล์ nginx.conf สิ้นสุดดังนี้:

รวม /etc/nginx/conf.d/*.conf;
รวม /etc/nginx/sites-enabled/*;

ซึ่งหมายความว่าเซิร์ฟเวอร์และบล็อกตำแหน่งซึ่งกำหนดการตั้งค่าสำหรับไซต์และ URL เฉพาะจะถูกเก็บไว้นอกไฟล์นี้

ซึ่งจะช่วยให้มีสถาปัตยกรรมการกำหนดค่าแบบโมดูลาร์ซึ่งสามารถสร้างไฟล์ใหม่เพื่อรองรับไซต์ใหม่ได้ นอกจากนี้ยังช่วยให้คุณสามารถจัดกลุ่มได้ ไฟล์ที่คล้ายกัน.

ปิดไฟล์ nginx.conf ตอนนี้คุณต้องศึกษาการตั้งค่าของแต่ละไซต์

บล็อกเสมือน Nginx

บล็อกเซิร์ฟเวอร์ใน Nginx นั้นคล้ายคลึงกับบล็อกเสมือน โฮสต์อาปาเช่(แต่เพื่อความสะดวกจะเรียกว่าโฮสต์เสมือน) โดยพื้นฐานแล้วเซิร์ฟเวอร์บล็อกคือ ข้อกำหนดเว็บไซต์แยกต่างหากที่โฮสต์บนเซิร์ฟเวอร์เดียวกัน

ในไดเร็กทอรีที่มีอยู่ของไซต์ คุณจะพบไฟล์บล็อกเซิร์ฟเวอร์เริ่มต้นที่มาพร้อมกับเซิร์ฟเวอร์ ไฟล์นี้มีข้อมูลที่จำเป็นทั้งหมดสำหรับการดูแลรักษาไซต์

มีไซต์ซีดี
ค่าเริ่มต้น sudo nano

รูท /usr/share/nginx/www;
ดัชนีindex.htmlindex.htm;
เซิร์ฟเวอร์_ชื่อโฮสต์ท้องถิ่น;
ที่ตั้ง/(

}
ที่ตั้ง /doc/ (

นามแฝง /usr/share/doc/;
จัดทำดัชนีอัตโนมัติบน;
อนุญาต 127.0.0.1;
ปฏิเสธทั้งหมด

ไฟล์เริ่มต้นได้รับการแสดงความคิดเห็นเป็นอย่างดี แต่ในตัวอย่างข้างต้น ความคิดเห็นจะถูกละไว้เพื่อความเรียบง่ายและสะดวกสบาย

บล็อกเซิร์ฟเวอร์ประกอบด้วยการตั้งค่าทั้งหมดที่อยู่ระหว่างเครื่องหมายปีกกา:

เซิร์ฟเวอร์ (
. . .
}

บล็อกนี้วางอยู่ในไฟล์ nginx.conf ใกล้กับส่วนท้ายของบล็อก http โดยใช้คำสั่ง include

คำสั่ง root ระบุไดเร็กทอรีที่จะจัดเก็บเนื้อหาของไซต์ Nginx จะค้นหาไฟล์ที่ผู้ใช้ร้องขอในไดเร็กทอรีนี้ โดยค่าเริ่มต้น นี่คือ /usr/share/nginx/www

โปรดทราบ: ทุกบรรทัดลงท้ายด้วยเครื่องหมายอัฒภาค นี่คือวิธีที่ Nginx แยกคำสั่งหนึ่งออกจากอีกคำสั่งหนึ่ง หากไม่มีอัฒภาค Nginx จะอ่านสองคำสั่ง (หรือหลายคำสั่ง) เป็นคำสั่งเดียวพร้อมอาร์กิวเมนต์เพิ่มเติม

คำสั่งดัชนีระบุไฟล์ที่จะใช้เป็นดัชนี เว็บเซิร์ฟเวอร์จะตรวจสอบไฟล์ตามลำดับที่แสดง หากไม่มีการร้องขอเพจ บล็อกเซิร์ฟเวอร์จะค้นหาและส่งคืนไฟล์ index.html หากไม่พบไฟล์นั้น ระบบจะพยายามประมวลผล index.htm

คำสั่ง server_name

คำสั่ง server_name ประกอบด้วยรายการชื่อโดเมนที่จะให้บริการโดยบล็อกเซิร์ฟเวอร์นี้ จำนวนโดเมนไม่ จำกัด โดเมนในรายการควรคั่นด้วยช่องว่าง

เครื่องหมายดอกจัน (*) ที่จุดเริ่มต้นหรือจุดสิ้นสุดของโดเมนระบุชื่อที่มีมาสก์ โดยที่เครื่องหมายดอกจันตรงกับส่วน (หรือหลายส่วน) ของชื่อ ตัวอย่างเช่น ชื่อ *.example.com จะตรงกับชื่อ forum.example.com และ www.animals.example.com

หาก URL ที่ร้องขอตรงกับคำสั่ง server_name มากกว่าหนึ่งคำสั่ง URL นั้นก็จะตอบสนองด้วยคำสั่งที่ตรงกันทุกประการก่อน

หากที่อยู่ไม่ตรงกันก็จะค้นหามากที่สุด ชื่อยาวมีหน้ากากที่ลงท้ายด้วยเครื่องหมายดอกจัน หากไม่พบชื่อดังกล่าว ระบบจะส่งคืนการจับคู่นิพจน์ทั่วไปรายการแรก

ชื่อเซิร์ฟเวอร์ที่ใช้นิพจน์ทั่วไปจะขึ้นต้นด้วยเครื่องหมายตัวหนอน (~) น่าเสียดาย, หัวข้อนี้อยู่นอกเหนือขอบเขตของบทความนี้

บล็อกสถานที่

ตำแหน่ง / บรรทัดระบุว่าคำสั่งในวงเล็บจะนำไปใช้กับทรัพยากรที่ร้องขอทั้งหมดซึ่งไม่ตรงกับบล็อกตำแหน่งอื่น ๆ

บล็อกดังกล่าวอาจมีเส้นทาง uri (เช่น /doc/) เพื่อสร้างการจับคู่ที่สมบูรณ์ระหว่างตำแหน่งและ uri จะใช้สัญลักษณ์ = อักขระ ~ ตรงกับนิพจน์ทั่วไป

เครื่องหมายทิลเดอเปิดใช้งานโหมดคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ในขณะที่เครื่องหมายทิลเดอร์ที่มีเครื่องหมายดอกจันเปิดใช้งานโหมดคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

หากคำขอตรงกับบล็อกตำแหน่งโดยสมบูรณ์ เซิร์ฟเวอร์จะหยุดการค้นหาและใช้บล็อกดังกล่าว หากเซิร์ฟเวอร์ไม่พบบล็อกตำแหน่งที่ตรงกันอย่างสมบูรณ์ เซิร์ฟเวอร์จะเปรียบเทียบ URI กับพารามิเตอร์ของคำสั่งตำแหน่ง Nginx จะเลือกบล็อกที่ใช้ชุดอักขระ ^~ และตรงกับ URI

หากไม่ได้ใช้ตัวเลือก ^~ Nginx จะเลือกรายการที่ใกล้เคียงที่สุดและทำการค้นหานิพจน์ทั่วไปเพื่อพยายามจับคู่รายการใดรายการหนึ่ง เทมเพลตที่มีอยู่- หากเขาพบสำนวนดังกล่าวเขาก็ใช้มัน หากไม่มีนิพจน์ดังกล่าว เซิร์ฟเวอร์จะใช้การจับคู่ URI ที่พบก่อนหน้านี้

สุดท้ายนี้ Nginx ชอบการจับคู่แบบตรงทั้งหมด หากไม่มีรายการที่ตรงกัน ระบบจะค้นหานิพจน์ทั่วไปแล้วค้นหา URI หากต้องการเปลี่ยนลำดับความสำคัญในการค้นหาของ URI ให้ใช้การผสมอักขระ ^~

คำสั่ง try_files

คำสั่ง try_files นั้นดีมาก เครื่องมือที่มีประโยชน์ซึ่งจะตรวจสอบไฟล์ตามลำดับที่กำหนดและใช้ไฟล์แรกที่พบเพื่อประมวลผลคำขอ

สิ่งนี้ช่วยให้คุณใช้พารามิเตอร์เพิ่มเติมเพื่อกำหนดวิธีที่ Nginx จะให้บริการตามคำขอ

ไฟล์การกำหนดค่าเริ่มต้นมีบรรทัด:

try_files $uri $uri/ /index.html;

ซึ่งหมายความว่าเมื่อได้รับคำขอที่ให้บริการโดยบล็อกตำแหน่ง Nginx จะพยายามให้บริการ uri เป็นไฟล์ก่อน (พฤติกรรมนี้ระบุโดยตัวแปร $uri)

หากเซิร์ฟเวอร์ไม่พบรายการที่ตรงกันสำหรับตัวแปร $uri เซิร์ฟเวอร์จะพยายามใช้ uri เป็นไดเร็กทอรี

เซิร์ฟเวอร์จะตรวจสอบการมีอยู่ของไดเร็กทอรี เช่น $uri/ โดยใช้เครื่องหมายทับต่อท้าย

หากไม่พบไฟล์หรือไดเร็กทอรี Nginx จะดำเนินการไฟล์เริ่มต้น (ในรูปแบบ ในกรณีนี้นี่คือ index.html ในไดเร็กทอรีรากของบล็อกเซิร์ฟเวอร์) แต่ละคำสั่ง try_files ใช้พารามิเตอร์สุดท้ายเป็นทางเลือก ดังนั้นไฟล์จะต้องมีอยู่ในระบบ

ในกรณีที่เว็บเซิร์ฟเวอร์ไม่พบรายการที่ตรงกันในพารามิเตอร์ก่อนหน้านี้ อาจส่งคืนหน้าข้อผิดพลาด เมื่อต้องการทำเช่นนี้ ให้ใช้เครื่องหมายเท่ากับและรหัสข้อผิดพลาด

ตัวอย่างเช่น หากตำแหน่ง / บล็อกไม่พบทรัพยากรที่ร้องขอ อาจส่งคืนข้อผิดพลาด 404 แทนที่จะเป็นไฟล์ index.html:

try_files $uri $uri/ =404;

ในการดำเนินการนี้ คุณจะต้องใส่เครื่องหมายเท่ากับและตั้งค่ารหัสข้อผิดพลาดเป็นพารามิเตอร์สุดท้าย (=404)

ตัวเลือกพิเศษ

คำสั่งนามแฝงอนุญาตให้ Nginx ให้บริการหน้าบล็อกตำแหน่งนอกไดเร็กทอรีที่กำหนด (เช่น นอกรูท)

ตัวอย่างเช่น ไฟล์ที่ร้องขอจาก /doc/ จะถูกให้บริการจาก /usr/share/doc/

ดัชนีอัตโนมัติบนคำสั่งช่วยให้คุณสามารถเปิดใช้งานรายการไดเรกทอรี Nginx สำหรับคำสั่งตำแหน่งที่กำหนด

บรรทัดอนุญาตและปฏิเสธจะควบคุมการเข้าถึงไดเร็กทอรี

บทสรุป

เว็บ เซิร์ฟเวอร์ Nginxมีคุณลักษณะหลากหลายและมีประสิทธิภาพมาก แต่คำศัพท์และตัวเลือกต่างๆ อาจทำให้เกิดความสับสนได้

เมื่อคุณเข้าใจการกำหนดค่า Nginx และเรียนรู้วิธีใช้งานแล้ว คุณจะได้รับประโยชน์ทั้งหมดจากเครื่องมือที่ทรงพลังและมีขนาดเล็กนี้

แท็ก: ,

หัวข้อถูกต้อง การตั้งค่า nginxมันใหญ่มาก และฉันเกรงว่ามันไม่เข้ากับกรอบของบทความหนึ่งเกี่ยวกับHabré ในข้อความนี้ฉันพยายามจะพูดถึง โครงสร้างทั่วไป config สิ่งเล็กๆ น้อยๆ ที่น่าสนใจและรายละเอียดอื่นๆ จะมาในภายหลัง -

จุดเริ่มต้นที่ดีสำหรับการตั้งค่า nginx คือการกำหนดค่าที่มาพร้อมกับการแจกจ่าย แต่ไม่ได้กล่าวถึงความสามารถหลายประการของเซิร์ฟเวอร์นี้ด้วยซ้ำ ล้นหลาม ตัวอย่างโดยละเอียดมีอยู่บนเว็บไซต์ของ Igor Sysoev: sysoev.ru/nginx/docs/example.html อย่างไรก็ตาม เรามาลองสร้างการกำหนดค่าของเราตั้งแต่ต้นด้วยบริดจ์และกวีหญิงกันดีกว่า -

เริ่มต้นด้วย การตั้งค่าทั่วไป- ขั้นแรกเราจะระบุผู้ใช้ที่ nginx จะทำงานในนามของผู้ใช้ (การทำงานเป็นรูทไม่ดีทุกคนรู้ :))

ทีนี้มาบอก nginx ว่าจะมีกระบวนการของคนงานกี่คนที่จะวางไข่ โดยปกติ, ทางเลือกที่ดีมีจำนวนกระบวนการเท่ากับจำนวน แกนประมวลผลบนเซิร์ฟเวอร์ของคุณ แต่ก็คุ้มค่าที่จะทดลองใช้การตั้งค่านี้ ถ้าคาดหวัง โหลดสูงบน ฮาร์ดดิสคุณสามารถดำเนินการหนึ่งกระบวนการกับฮาร์ดไดรฟ์จริงแต่ละตัวได้ เนื่องจากงานทั้งหมดจะยังคงถูกจำกัดด้วยประสิทธิภาพของมัน

ผู้ปฏิบัติงาน_กระบวนการ 2;

มาชี้แจงว่าจะเขียนบันทึกข้อผิดพลาดที่ไหน แล้วสำหรับรายบุคคล เซิร์ฟเวอร์เสมือนพารามิเตอร์นี้สามารถแทนที่ได้ ดังนั้นเฉพาะข้อผิดพลาด "ทั่วโลก" เช่น ที่เกี่ยวข้องกับการเริ่มต้นเซิร์ฟเวอร์ เท่านั้นที่จะปรากฏในบันทึกนี้

Error_log /spool/logs/nginx/nginx.error_log ประกาศ; # ระดับการแจ้งเตือน "การแจ้งเตือน" สามารถเปลี่ยนแปลงได้แน่นอน

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

การตั้งค่าเหล่านี้อาจส่งผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพของเซิร์ฟเวอร์ของคุณ ต้องเลือกทีละรายการ ขึ้นอยู่กับระบบปฏิบัติการและฮาร์ดแวร์ ฉันสามารถให้กฎทั่วไปได้เพียงไม่กี่ข้อเท่านั้น

โมดูลสำหรับการทำงานกับกิจกรรม:
- การเลือกและการสำรวจมักจะช้ากว่าและโหลดโปรเซสเซอร์ค่อนข้างหนัก แต่มีให้ใช้งานเกือบทุกที่และทำงานได้เกือบตลอดเวลา
- kqueue และ epoll - มีประสิทธิภาพมากกว่า แต่มีเฉพาะบน FreeBSD และ Linux 2.6 ตามลำดับ
- rtsig - สวย วิธีการที่มีประสิทธิภาพและได้รับการสนับสนุนแม้กระทั่งกับ Linux รุ่นเก่าๆ แต่อาจทำให้เกิดปัญหาได้เมื่อใด จำนวนมากการเชื่อมต่อ;
- /dev/poll - เท่าที่ฉันรู้ มันใช้งานได้มากกว่านี้เล็กน้อย ระบบที่แปลกใหม่เช่นเดียวกับ Solaris และค่อนข้างมีประสิทธิภาพในตัวมัน

พารามิเตอร์คนงาน_การเชื่อมต่อ:
- จำนวนไคลเอ็นต์สูงสุดที่ให้บริการทั้งหมดจะเท่ากับ worker_processes * worker_connections;
- บางครั้งก็สามารถเข้าทำงานได้ ด้านบวกแม้แต่ค่าที่มากที่สุด เช่น 128 กระบวนการ 128 การเชื่อมต่อต่อกระบวนการ หรือ 1 กระบวนการ แต่มีพารามิเตอร์ worker_connections=16384 อย่างไรก็ตาม ในกรณีหลังนี้ คุณจะต้องปรับแต่งระบบปฏิบัติการเป็นส่วนใหญ่

กิจกรรม (
คนงาน_การเชื่อมต่อ 2048;
ใช้คิว; # เรามี BSD :)
}

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

เอชทีพีพี(
# รหัสทั้งหมดด้านล่างจะอยู่ภายในส่วนนี้ %)
# ...
}

ภายในส่วนนี้อาจมีพารามิเตอร์ที่ค่อนข้างน่าสนใจ

การเรียกระบบ sendfile ค่อนข้างใหม่สำหรับ Linux ช่วยให้คุณสามารถส่งข้อมูลไปยังเครือข่ายโดยไม่ต้องคัดลอกลงในพื้นที่ที่อยู่ของแอปพลิเคชัน ในหลายกรณี สิ่งนี้จะช่วยปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์ได้อย่างมาก ดังนั้นจึงเป็นการดีที่สุดที่จะเปิดใช้งานตัวเลือก sendfile เสมอ

พารามิเตอร์ Keepalive_timeout มีหน้าที่รับผิดชอบ เวลาสูงสุดรักษาการเชื่อมต่อแบบ Keepalive หากผู้ใช้ไม่ได้ร้องขอสิ่งใดผ่านมัน พิจารณาว่าเว็บไซต์ของคุณส่งคำขอและปรับการตั้งค่านี้อย่างไร สำหรับเว็บไซต์ที่ใช้งาน AJAX อยู่ ควรรักษาการเชื่อมต่อให้นานขึ้น สำหรับเพจคงที่ที่ผู้ใช้จะอ่านเป็นเวลานาน ควรตัดการเชื่อมต่อตั้งแต่เนิ่นๆ จะดีกว่า โปรดทราบว่าการรักษาการเชื่อมต่อ Keepalive ที่ไม่ได้ใช้งานจะเป็นคุณกำลังใช้การเชื่อมต่อที่อาจนำไปใช้แตกต่างออกไปได้ -

Keepalive_หมดเวลา 15;

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

พร็อกซี_บัฟเฟอร์ 8 64k;
proxy_intercept_errors บน;
proxy_connect_timeout 1 วินาที;
proxy_read_timeout 3 วินาที;
proxy_send_timeout 3 วินาที;

เคล็ดลับเล็กน้อย ในกรณีที่ nginx ให้บริการโฮสต์เสมือนมากกว่าหนึ่งโฮสต์ ก็สมเหตุสมผลที่จะสร้าง “โฮสต์เสมือนเริ่มต้น” ที่จะประมวลผลคำขอในกรณีที่เซิร์ฟเวอร์ไม่พบทางเลือกอื่นโดยใช้ส่วนหัวของโฮสต์ในคำขอของไคลเอ็นต์

# โฮสต์เสมือนเริ่มต้น
เซิร์ฟเวอร์ (
ฟัง 80 ค่าเริ่มต้น;
เซิร์ฟเวอร์_ชื่อโฮสต์ท้องถิ่น;
ปฏิเสธทั้งหมด
}

ซึ่งอาจตามด้วยส่วน "เซิร์ฟเวอร์" หนึ่ง (หรือหลายส่วน) แต่ละรายการจะอธิบายถึงโฮสต์เสมือน (ส่วนใหญ่มักอิงตามชื่อ) สำหรับเจ้าของเว็บไซต์จำนวนมากบนโฮสติ้งเดียวหรือสำหรับโฮสต์อาจมีคำสั่งบางอย่าง

รวม /spool/users/nginx/*.conf;

ส่วนที่เหลือมักจะอธิบายโฮสต์เสมือนโดยตรงในการกำหนดค่าหลัก

เซิร์ฟเวอร์ (
ฟัง 80;

# โปรดทราบว่าคำสั่ง server_name สามารถระบุชื่อได้หลายชื่อในเวลาเดียวกัน
เซิร์ฟเวอร์_ชื่อ myserver.ru myserver.com;
access_log /spool/logs/nginx/myserver.access_log หมดเวลา;
error_log /spool/logs/nginx/myserver.error_log เตือน;
# ...

มาตั้งค่าการเข้ารหัสเริ่มต้นสำหรับเอาต์พุตกัน

อักขระ utf-8;

และสมมติว่าเราไม่ต้องการรับคำขอจากไคลเอนต์ที่มีความยาวมากกว่า 1 เมกะไบต์

ลูกค้า_max_body_size 1ม.;

มาเปิดใช้งาน SSI สำหรับเซิร์ฟเวอร์และขอให้จองตัวแปร SSI ไม่เกิน 1 กิโลไบต์

ศรีออน;
ssi_value_length 1,024;

และสุดท้าย เราจะอธิบายสองตำแหน่ง โดยตำแหน่งหนึ่งจะนำไปสู่แบ็กเอนด์ ไปยัง Apache ที่ทำงานบนพอร์ต 9999 และตำแหน่งที่สองจะส่งภาพนิ่งจากท้องถิ่น ระบบไฟล์- สำหรับสถานที่สองแห่ง สิ่งนี้ไม่สมเหตุสมผล แต่สำหรับสถานที่จำนวนมากก็สมเหตุสมผลเช่นกันที่จะกำหนดตัวแปรที่จะจัดเก็บไดเร็กทอรีรากของเซิร์ฟเวอร์ทันที จากนั้นใช้ในคำอธิบายตำแหน่ง

14 สิงหาคม 2552 เวลา 19:29 น

การตั้งค่า nginx

  • งินซ์

เรื่อง การตั้งค่าที่ถูกต้อง nginx มีขนาดใหญ่มาก และฉันเกรงว่ามันไม่เข้ากับกรอบของบทความหนึ่งเกี่ยวกับHabré ในข้อความนี้ ฉันพยายามพูดถึงโครงสร้างทั่วไปของการกำหนดค่า รายละเอียดและรายละเอียดที่น่าสนใจเพิ่มเติมอาจมาในภายหลัง -

จุดเริ่มต้นที่ดีสำหรับการตั้งค่า nginx คือการกำหนดค่าที่มาพร้อมกับการแจกจ่าย แต่ไม่ได้กล่าวถึงความสามารถหลายประการของเซิร์ฟเวอร์นี้ด้วยซ้ำ ตัวอย่างโดยละเอียดเพิ่มเติมอยู่ในเว็บไซต์ของ Igor Sysoev: sysoev.ru/nginx/docs/example.html อย่างไรก็ตาม เรามาลองสร้างการกำหนดค่าของเราตั้งแต่ต้นด้วยบริดจ์และกวีหญิงกันดีกว่า -

เริ่มจากการตั้งค่าทั่วไปกันก่อน ขั้นแรกเราจะระบุผู้ใช้ที่ nginx จะทำงานในนามของผู้ใช้ (การทำงานเป็นรูทไม่ดีทุกคนรู้ :))

ทีนี้มาบอก nginx ว่าจะมีกระบวนการของคนงานกี่คนที่จะวางไข่ โดยทั่วไปแล้ว กระบวนการจำนวนหนึ่งที่เท่ากับจำนวนแกนประมวลผลในเซิร์ฟเวอร์ของคุณเป็นตัวเลือกที่ดี แต่ก็คุ้มค่าที่จะทดลองใช้การตั้งค่านี้ หากคาดว่าจะมีการโหลดสูงบนฮาร์ดไดรฟ์ คุณสามารถดำเนินการหนึ่งกระบวนการสำหรับฮาร์ดไดรฟ์จริงแต่ละตัวได้ เนื่องจากงานทั้งหมดจะยังคงถูกจำกัดโดยประสิทธิภาพของมัน

ผู้ปฏิบัติงาน_กระบวนการ 2;

มาชี้แจงว่าจะเขียนบันทึกข้อผิดพลาดที่ไหน จากนั้น สำหรับแต่ละเซิร์ฟเวอร์เสมือน พารามิเตอร์นี้สามารถแทนที่ได้ ดังนั้นเฉพาะข้อผิดพลาด "ทั่วโลก" เช่น ที่เกี่ยวข้องกับการเริ่มต้นเซิร์ฟเวอร์ เท่านั้นที่จะปรากฏในบันทึกนี้

Error_log /spool/logs/nginx/nginx.error_log ประกาศ; # ระดับการแจ้งเตือน "การแจ้งเตือน" สามารถเปลี่ยนแปลงได้แน่นอน

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

การตั้งค่าเหล่านี้อาจส่งผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพของเซิร์ฟเวอร์ของคุณ ต้องเลือกทีละรายการ ขึ้นอยู่กับระบบปฏิบัติการและฮาร์ดแวร์ ฉันสามารถให้กฎทั่วไปได้เพียงไม่กี่ข้อเท่านั้น

โมดูลสำหรับการทำงานกับกิจกรรม:
- การเลือกและการสำรวจมักจะช้ากว่าและโหลดโปรเซสเซอร์ค่อนข้างหนัก แต่มีให้ใช้งานเกือบทุกที่และทำงานได้เกือบตลอดเวลา
- kqueue และ epoll - มีประสิทธิภาพมากกว่า แต่มีเฉพาะบน FreeBSD และ Linux 2.6 ตามลำดับ
- rtsig เป็นวิธีการที่ค่อนข้างมีประสิทธิภาพ และได้รับการสนับสนุนแม้กระทั่งกับ Linux รุ่นเก่าๆ แต่ก็อาจทำให้เกิดปัญหากับการเชื่อมต่อจำนวนมากได้
- /dev/poll - เท่าที่ฉันรู้ มันใช้งานได้ในระบบที่ค่อนข้างแปลกใหม่ เช่น Solaris และค่อนข้างมีประสิทธิภาพที่นั่น

พารามิเตอร์คนงาน_การเชื่อมต่อ:
- จำนวนไคลเอ็นต์สูงสุดที่ให้บริการทั้งหมดจะเท่ากับ worker_processes * worker_connections;
- บางครั้งแม้แต่ค่าที่มากที่สุดก็สามารถทำงานได้ในเชิงบวก เช่น 128 กระบวนการ 128 การเชื่อมต่อต่อกระบวนการ หรือ 1 กระบวนการ แต่ด้วยพารามิเตอร์ worker_connections=16384 อย่างไรก็ตาม ในกรณีหลังนี้ คุณจะต้องปรับแต่งระบบปฏิบัติการเป็นส่วนใหญ่

กิจกรรม (
คนงาน_การเชื่อมต่อ 2048;
ใช้คิว; # เรามี BSD :)
}

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

เอชทีพีพี(
# รหัสทั้งหมดด้านล่างจะอยู่ภายในส่วนนี้ %)
# ...
}

ภายในส่วนนี้อาจมีพารามิเตอร์ที่ค่อนข้างน่าสนใจ

การเรียกระบบ sendfile ค่อนข้างใหม่สำหรับ Linux ช่วยให้คุณสามารถส่งข้อมูลไปยังเครือข่ายโดยไม่ต้องคัดลอกลงในพื้นที่ที่อยู่ของแอปพลิเคชัน ในหลายกรณี สิ่งนี้จะช่วยปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์ได้อย่างมาก ดังนั้นจึงเป็นการดีที่สุดที่จะเปิดใช้งานตัวเลือก sendfile เสมอ

พารามิเตอร์ Keepalive_timeout รับผิดชอบเวลาสูงสุดในการรักษาการเชื่อมต่อ Keepalive หากผู้ใช้ไม่ได้ร้องขอสิ่งใด พิจารณาว่าเว็บไซต์ของคุณส่งคำขอและปรับการตั้งค่านี้อย่างไร สำหรับไซต์ที่ใช้งาน AJAX อยู่ ควรรักษาการเชื่อมต่อให้นานขึ้น สำหรับเพจคงที่ที่ผู้ใช้จะอ่านเป็นเวลานาน ควรตัดการเชื่อมต่อตั้งแต่เนิ่นๆ จะดีกว่า โปรดทราบว่าการรักษาการเชื่อมต่อ Keepalive ที่ไม่ได้ใช้งานจะเป็นคุณกำลังใช้การเชื่อมต่อที่อาจนำไปใช้แตกต่างออกไปได้ -

Keepalive_หมดเวลา 15;

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

พร็อกซี_บัฟเฟอร์ 8 64k;
proxy_intercept_errors บน;
proxy_connect_timeout 1 วินาที;
proxy_read_timeout 3 วินาที;
proxy_send_timeout 3 วินาที;

เคล็ดลับเล็กน้อย ในกรณีที่ nginx ให้บริการโฮสต์เสมือนมากกว่าหนึ่งโฮสต์ ก็สมเหตุสมผลที่จะสร้าง “โฮสต์เสมือนเริ่มต้น” ที่จะประมวลผลคำขอในกรณีที่เซิร์ฟเวอร์ไม่พบทางเลือกอื่นโดยใช้ส่วนหัวของโฮสต์ในคำขอของไคลเอ็นต์

# โฮสต์เสมือนเริ่มต้น
เซิร์ฟเวอร์ (
ฟัง 80 ค่าเริ่มต้น;
เซิร์ฟเวอร์_ชื่อโฮสต์ท้องถิ่น;
ปฏิเสธทั้งหมด
}

ซึ่งอาจตามด้วยส่วน "เซิร์ฟเวอร์" หนึ่ง (หรือหลายส่วน) แต่ละรายการจะอธิบายถึงโฮสต์เสมือน (ส่วนใหญ่มักอิงตามชื่อ) สำหรับเจ้าของเว็บไซต์จำนวนมากบนโฮสติ้งเดียวหรือสำหรับโฮสต์อาจมีคำสั่งบางอย่าง

รวม /spool/users/nginx/*.conf;

ส่วนที่เหลือมักจะอธิบายโฮสต์เสมือนโดยตรงในการกำหนดค่าหลัก

เซิร์ฟเวอร์ (
ฟัง 80;

# โปรดทราบว่าคำสั่ง server_name สามารถระบุชื่อได้หลายชื่อในเวลาเดียวกัน
เซิร์ฟเวอร์_ชื่อ myserver.ru myserver.com;
access_log /spool/logs/nginx/myserver.access_log หมดเวลา;
error_log /spool/logs/nginx/myserver.error_log เตือน;
# ...

มาตั้งค่าการเข้ารหัสเริ่มต้นสำหรับเอาต์พุตกัน

อักขระ utf-8;

และสมมติว่าเราไม่ต้องการรับคำขอจากไคลเอนต์ที่มีความยาวมากกว่า 1 เมกะไบต์

ลูกค้า_max_body_size 1ม.;

มาเปิดใช้งาน SSI สำหรับเซิร์ฟเวอร์และขอให้จองตัวแปร SSI ไม่เกิน 1 กิโลไบต์

ศรีออน;
ssi_value_length 1,024;

และสุดท้าย เราจะอธิบายสองตำแหน่ง โดยตำแหน่งหนึ่งจะนำไปสู่แบ็กเอนด์ ไปยัง Apache ที่ทำงานบนพอร์ต 9999 และตำแหน่งที่สองจะส่งรูปภาพคงที่จากระบบไฟล์ในเครื่อง สำหรับสถานที่สองแห่ง สิ่งนี้ไม่สมเหตุสมผล แต่สำหรับสถานที่จำนวนมากก็สมเหตุสมผลเช่นกันที่จะกำหนดตัวแปรที่จะจัดเก็บไดเร็กทอรีรากของเซิร์ฟเวอร์ทันที จากนั้นใช้ในคำอธิบายตำแหน่ง

หนึ่งในเว็บเซิร์ฟเวอร์ยอดนิยม

Nginx ได้รับความนิยมอย่างมากในหมู่ผู้ใช้เว็บและพร็อกซีเซิร์ฟเวอร์เนื่องจากประสิทธิภาพของมัน เซิร์ฟเวอร์มีข้อดีหลายประการ แต่การตั้งค่าจะยากสำหรับผู้เริ่มต้น เราต้องการช่วยให้คุณเข้าใจไฟล์การกำหนดค่า ไวยากรณ์ และการตั้งค่าพารามิเตอร์ Nginx พื้นฐาน

ลำดับชั้นของไดเรกทอรี

ไฟล์การกำหนดค่าเซิร์ฟเวอร์ทั้งหมดอยู่ในไดเร็กทอรี /etc/nginx นอกจากนี้ ภายในไดเร็กทอรียังมีโฟลเดอร์อีกหลายโฟลเดอร์ รวมถึงไฟล์การกำหนดค่าแบบโมดูลาร์ด้วย

ซีดี /etc/nginx.cd
ลส -F
conf.d/ koi-win naxsi.rules scgi_params uwsgi_params
fastcgi_params mime.types nginx.conf ไซต์พร้อมใช้งาน/win-utf
koi-utf naxsi_core.rules proxy_params ไซต์ที่เปิดใช้งาน/

หากคุณเคยใช้ Apache คุณควรคุ้นเคยกับไดเร็กทอรีที่เปิดใช้งานไซต์และไดเร็กทอรีที่พร้อมใช้งานของไซต์ พวกเขากำหนดการกำหนดค่าของไซต์ ไฟล์ที่สร้างขึ้นจะถูกเก็บไว้ในไดเร็กทอรีสุดท้าย โฟลเดอร์ที่เปิดใช้งานไซต์จำเป็นสำหรับการจัดเก็บการกำหนดค่าเท่านั้น หน้าที่เปิดใช้งาน- คุณต้องเชื่อมต่อพวกเขา ลิงค์สัญลักษณ์ระหว่างโฟลเดอร์ การกำหนดค่ายังสามารถเก็บไว้ในไดเร็กทอรี conf.d ในเวลาเดียวกัน ระหว่างการเริ่มต้น Nginx แต่ละไฟล์ที่มีนามสกุล .conf จะถูกอ่านใหม่ เมื่อเขียนไฟล์การกำหนดค่า ให้พิมพ์โค้ดโดยไม่มีข้อผิดพลาดและปฏิบัติตามไวยากรณ์ ไฟล์อื่นๆ ทั้งหมดอยู่ใน /etc/nginx ตัวกำหนดค่าประกอบด้วยข้อมูลเกี่ยวกับกระบวนการเฉพาะ รวมถึงส่วนประกอบเพิ่มเติม

ไฟล์การกำหนดค่า Nginx หลักคือ nginx.conf

มันจะอ่านไฟล์การกำหนดค่าทั้งหมด รวมเป็นไฟล์ที่ถูกร้องขอเมื่อเซิร์ฟเวอร์เริ่มทำงาน เปิดไฟล์ด้วย:

sudo นาโน /etc/nginx/nginx.conf

บรรทัดต่อไปนี้จะปรากฏบนหน้าจอ:

ผู้ใช้ www-data;
ผู้ปฏิบัติงาน_กระบวนการ 4;
pid /var/run/nginx.pid;
เหตุการณ์ (
ผู้ปฏิบัติงาน_การเชื่อมต่อ 768;
#multi_accept บน;
}
http(
. . .

ประการแรกคือข้อมูลทั่วไปเกี่ยวกับ Nginx ผู้ใช้วลี www-data ระบุผู้ใช้ที่รันเซิร์ฟเวอร์ คำสั่ง pid แสดงตำแหน่งของกระบวนการ PID สำหรับการใช้งานภายใน บรรทัด worker_processes แสดงจำนวนกระบวนการที่ Nginx สามารถทำงานพร้อมกันได้ นอกจากนี้ คุณสามารถระบุบันทึกได้ที่นี่ (เช่น บันทึกข้อผิดพลาดถูกกำหนดโดยใช้คำสั่ง error_log) ด้านล่างเป็นส่วนกิจกรรม จำเป็นสำหรับการจัดการการเชื่อมต่อเซิร์ฟเวอร์ หลังจากนั้นจะเป็นบล็อก http

โครงสร้างไฟล์การกำหนดค่า Nginx

การทำความเข้าใจโครงสร้างการจัดรูปแบบไฟล์จะช่วยให้คุณเข้าใจการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณได้ดีขึ้น แบ่งออกเป็นบล็อกโครงสร้าง รายละเอียดการกำหนดค่าบล็อก http ถูกแบ่งชั้นโดยใช้บล็อกส่วนตัว พวกเขาสืบทอดคุณสมบัติจากผู้ปกครองเช่น ที่ที่พวกเขาอยู่ บล็อคนี้เก็บการกำหนดค่าเซิร์ฟเวอร์ส่วนใหญ่ แบ่งออกเป็นบล็อกเซิร์ฟเวอร์ ภายในตำแหน่งใด

เมื่อคุณกำหนดค่าเซิร์ฟเวอร์ Nginx โปรดจำไว้ว่ายิ่งบล็อกการกำหนดค่าต่ำลง องค์ประกอบก็จะสืบทอดคุณสมบัติน้อยลงและในทางกลับกัน ไฟล์ประกอบด้วย จำนวนมากตัวเลือกที่เปลี่ยนแปลงการทำงานของเซิร์ฟเวอร์ คุณสามารถตั้งค่าการบีบอัดไฟล์ที่ส่งไปยังไคลเอนต์ได้ เป็นต้น หากต้องการทำสิ่งนี้ ให้ป้อนพารามิเตอร์:

เปิด gzip;
gzip_disable "msie6";

โปรดทราบว่าสามารถใช้พารามิเตอร์เดียวกันได้ ความหมายที่แตกต่างกันวี บล็อกที่แตกต่างกัน- ขั้นแรกให้ตั้งค่าไว้ที่ด้านบน จากนั้นกำหนดพารามิเตอร์ใหม่ในระดับที่ต้องการ ถ้า การกระทำครั้งสุดท้ายไม่ดำเนินการ โปรแกรมจะตั้งค่าให้อัตโนมัติ

บรรทัดสุดท้ายของไฟล์ nginx.conf คือ:

รวม /etc/nginx/conf.d/*.conf;
รวม /etc/nginx/sites-enabled/*;

ระบุว่าตำแหน่งและบล็อกเซิร์ฟเวอร์ถูกเก็บไว้นอกไฟล์นี้ พวกเขากำหนดการตั้งค่า URL และ ไฟล์เฉพาะ- โครงสร้างนี้จำเป็นเพื่อรักษาโครงสร้างการกำหนดค่าแบบโมดูลาร์ ภายในคุณสามารถสร้างไดเร็กทอรีและไฟล์ใหม่สำหรับไซต์ต่างๆ นอกจากนี้ คุณยังสามารถจัดกลุ่มไฟล์ที่คล้ายกันได้ หลังจากพิจารณาแล้ว คุณก็สามารถปิดไฟล์ nginx.conf ได้

บล็อกเสมือน

คล้ายคลึงกับโฮสต์เสมือนใน Apache บล็อกส่วนของเซิร์ฟเวอร์ประกอบด้วยคุณลักษณะของแต่ละไซต์ที่อยู่บนเซิร์ฟเวอร์ ในโฟลเดอร์ที่มีอยู่ของไซต์ คุณจะพบไฟล์บล็อกเซิร์ฟเวอร์เริ่มต้น ภายในคุณสามารถค้นหาข้อมูลที่จำเป็นซึ่งอาจจำเป็นเมื่อดูแลไซต์

มีไซต์ซีดี
ค่าเริ่มต้น sudo nano
เซิร์ฟเวอร์ (
รูท /usr/share/nginx/www;
ดัชนีindex.htmlindex.htm;
เซิร์ฟเวอร์_ชื่อโฮสต์ท้องถิ่น;
ที่ตั้ง/(
try_files $uri $uri/ /index.html;
}
ที่ตั้ง /doc/ (
นามแฝง /usr/share/doc/;
จัดทำดัชนีอัตโนมัติบน;
อนุญาต 127.0.0.1;
ปฏิเสธทั้งหมด
}
}

ในตัวอย่างข้างต้น ความคิดเห็นถูกลบออกโดยเจตนา สิ่งนี้ทำเพื่อความสะดวกในการรับรู้ ภายในบล็อกเซิร์ฟเวอร์จะมีการตั้งค่าอยู่ในเครื่องหมายปีกกา:

บล็อกนี้วางโดยใช้คำสั่งรวมที่ส่วนท้ายของ http ซึ่งเขียนในไฟล์ nginx.conf คำสั่งรูทกำหนดไดเร็กทอรีที่จะเก็บเนื้อหาของไซต์ โดยในนั้นโปรแกรมจะค้นหาไฟล์ที่ผู้ใช้จะร้องขอ เส้นทางเริ่มต้นคือ: /usr/share/nginx/www Nginx แยกบรรทัดหรือคำสั่งออกจากกันโดยใช้เครื่องหมายอัฒภาค หากคุณไม่ใส่เครื่องหมายวรรคตอน ระบบจะอ่านหลายบรรทัดเป็นบรรทัดเดียว หากต้องการระบุกฎที่จะใช้เป็นดัชนี ให้ใช้คำสั่งดัชนี เซิร์ฟเวอร์จะตรวจสอบตามลำดับที่ระบุไว้ หากผู้ใช้ไม่ได้ร้องขอหน้าที่พร้อมใช้งานเลย index.html จะถูกส่งคืน หากไม่มีอยู่ เซิร์ฟเวอร์จะค้นหา index.htm

กฎชื่อเซิร์ฟเวอร์

ประกอบด้วยรายการชื่อโดเมนที่บล็อกเซิร์ฟเวอร์จะต้องดำเนินการ คุณสามารถป้อนตัวเลขเท่าใดก็ได้ โดยคั่นด้วยช่องว่าง หากคุณใส่ * ต่อท้ายหรือเริ่มต้นโดเมน คุณสามารถระบุชื่อโดยใช้มาสก์ได้ เครื่องหมายดอกจันตรงกับส่วนหนึ่งของชื่อ หากคุณป้อน *.com.ua จะรวมที่อยู่ทั้งหมดตามที่ระบุ โซนโดเมน- หากที่อยู่ตรงกับคำอธิบายของคำสั่งหลายรายการ ที่อยู่นั้นจะตอบสนองต่อคำสั่งที่ตรงกันทั้งหมด หากไม่มีชื่อที่ตรงกัน คำตอบจะเป็น ชื่อที่ยาวที่สุดที่มีหน้ากาก มิฉะนั้น จะดำเนินการจับคู่นิพจน์ทั่วไป ชื่อเซิร์ฟเวอร์ที่ใช้นิพจน์ทั่วไปจะขึ้นต้นด้วยเครื่องหมายตัวหนอน (~)

บล็อกสถานที่

ต่อไปเราจะมีบล็อกตำแหน่ง จำเป็นต้องกำหนดวิธีการประมวลผล คำขอบางอย่าง- หากทรัพยากรไม่ตรงกับบล็อกตำแหน่งอื่น คำสั่งที่ระบุในวงเล็บจะถูกนำไปใช้กับบล็อกเหล่านั้น บล็อกเหล่านี้อาจมีเส้นทางเช่น /doc/ เพื่อสร้างการจับคู่ที่สมบูรณ์ระหว่าง uri และตำแหน่ง จะใช้เครื่องหมาย = เมื่อใช้เครื่องหมายตัวหนอน คุณสามารถจับคู่นิพจน์ทั่วไปได้ คุณยังสามารถตั้งค่าความไวของตัวพิมพ์เล็กและใหญ่ได้โดยใส่ ~ หากคุณเพิ่มเครื่องหมายดอกจัน ตัวพิมพ์เล็กหรือใหญ่ก็ไม่สำคัญ

โปรดทราบว่า: เมื่อคำขอตรงกับบล็อกตำแหน่งโดยสมบูรณ์ คำขอนั้นจะถูกนำมาใช้และการค้นหาจะหยุดลง เมื่อการจับคู่ไม่สมบูรณ์ URI จะถูกเปรียบเทียบกับพารามิเตอร์ของคำสั่งตำแหน่ง ใช้บล็อกที่มี ^~ จับคู่ URI เพื่อเลือกบล็อก ถ้า ตัวเลือกนี้ไม่ใช้ เซิร์ฟเวอร์จะเลือกการจับคู่ที่เหมาะสมที่สุดและทำการค้นหาโดยใช้ การแสดงออกปกติ- นี่จำเป็นต้องเลือกหนึ่งในเทมเพลตที่เหมาะสม หากพบนิพจน์ที่เหมาะสมก็จะนำไปใช้ มิฉะนั้น ระบบจะใช้การจับคู่ URI ก่อนหน้า อย่างไรก็ตาม โปรดทราบว่า Nginx ชอบการแข่งขันเต็มรูปแบบ หากไม่มีอยู่ ระบบจะเริ่มค้นหานิพจน์ทั่วไป จากนั้นตามด้วย URI ความเท่าเทียมกันในการค้นหาถูกระบุโดยการรวมกันสัญลักษณ์ ^~

กฎ try_files

นี่เป็นเครื่องมือที่มีประโยชน์มากที่สามารถตรวจสอบไฟล์ได้ ในลักษณะที่กำหนด- โดยจะใช้อันแรกที่ตรงกับเกณฑ์ในการประมวลผลคำขอ คุณสามารถใช้ได้ ตัวเลือกพิเศษเพื่อระบุวิธีที่เซิร์ฟเวอร์จะให้บริการตามคำขอ ตัวกำหนดค่ามีบรรทัดเริ่มต้นนี้:

try_files $uri $uri/ /index.html;

มันหมายความว่าอะไร? หากมีคำขอเข้ามาซึ่งให้บริการโดยบล็อกตำแหน่ง เซิร์ฟเวอร์จะพยายามถือว่า uri เป็นไฟล์ก่อน สิ่งนี้จัดทำโดยตัวแปร $uri เมื่อไม่มีรายการที่ตรงกัน uri จะถือเป็นไดเร็กทอรี คุณสามารถตรวจสอบการมีอยู่ได้โดยการเพิ่มเครื่องหมายทับ: $uri/ มีบางสถานการณ์ที่จะไม่พบไฟล์และไดเร็กทอรี ในกรณีนี้ ไฟล์เริ่มต้นจะถูกโหลด - index.html กฎ try_files ใช้พารามิเตอร์ตัวสุดท้ายเป็นทางเลือก นั่นคือเหตุผล ไฟล์นี้จะต้องอยู่ในระบบ อย่างไรก็ตาม หากไม่พบรายการที่ตรงกันเลย Nginx จะส่งกลับหน้าแสดงข้อผิดพลาด หากต้องการตั้งค่า ให้ป้อน = และรหัสข้อผิดพลาด:

ตัวเลือกเพิ่มเติม

หากคุณใช้กฎนามแฝง คุณจะสามารถแสดงหน้าของบล็อกตำแหน่งนอกไดเร็กทอรีรากได้ เป็นต้น เมื่อจำเป็นต้องใช้ไฟล์จาก doc ไฟล์เหล่านั้นจะถูกร้องขอจาก /usr/share/doc/ นอกจากนี้ ดัชนีอัตโนมัติบนกฎเริ่มแสดงรายการไดเร็กทอรีเซิร์ฟเวอร์สำหรับคำสั่งตำแหน่งที่ระบุ หากคุณเขียนบรรทัดปฏิเสธและอนุญาต คุณจะสามารถเปลี่ยนการเข้าถึงไดเร็กทอรีได้

โดยสรุปแล้ว ถือว่าคุ้มที่จะบอกว่า Nginx ทรงพลังมาก เครื่องมือมัลติฟังก์ชั่น- แต่การที่จะเข้าใจหลักการทำงานของมันได้ดีนั้นต้องใช้เวลาและความพยายาม หากคุณเข้าใจวิธีการทำงานของการกำหนดค่า คุณสามารถเพลิดเพลินกับฟีเจอร์ทั้งหมดของโปรแกรมได้อย่างเต็มที่