รับทําเว็บไซต์ รับทําseo
บทความที่น่าสนใจ

บทความ ที่น่าสนใจ

การกำหนดค่า NGINX: การทำความเข้าใจคำสั่ง !!!

    การกำหนดค่า NGINX: การทำความเข้าใจคำสั่ง

    ไฟล์กำหนดค่า NGINX ทุกไฟล์จะอยู่ในไดเร็กทอรี /etc/nginx/ โดยที่ไฟล์กำหนดค่าหลักจะอยู่ใน/etc/nginx/nginx.conf

     

    ตัวเลือกการกำหนดค่า NGINX เรียกว่า “คำสั่ง” โดยจะถูกจัดเรียงเป็นกลุ่ม ซึ่งเรียกแทนกันได้ว่าบล็อกหรือบริบท

     

    เมื่อ # ปรากฏก่อนบรรทัด สิ่งเหล่านี้คือความคิดเห็นและ NGINX จะไม่ตีความสิ่งเหล่านี้ บรรทัดที่มีคำสั่งควรลงท้ายด้วยเครื่องหมายเซมิโคลอน (;) หากไม่เป็นเช่นนั้น NGINX จะไม่สามารถโหลดการกำหนดค่าได้อย่างถูกต้องและรายงานข้อผิดพลาด

     

    ด้านล่างนี้ เราได้รวมไฟล์ /etc/nginx/nginx.conf แบบย่อที่รวมอยู่ในการติดตั้งจากที่เก็บ NGINX ไฟล์นี้เริ่มต้นด้วยคำสั่งสี่คำสั่ง:

    - ผู้ใช้

    - กระบวนการทำงาน

    - บันทึกข้อผิดพลาด

    - พีด

     

     

    สิ่งเหล่านี้มีอยู่ภายนอกบริบทหรือบล็อกใดๆ และกล่าวว่าอยู่ภายในบริบทหลัก

     

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

     

    ไฟล์: /etc/nginx/nginx.conf

     

    user nginx;

     

    worker_processes 1;

     

    error_log /var/log/nginx/error.log warn;

     

    pid /var/run/nginx.pid;

     

    events {

     

    . . .

     

    }

     

    http {

     

    . . .

     

    }

     

     

    HTTP Block คืออะไร?

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

     

    ไฟล์: /etc/nginx/nginx.conf

     

    http {

     

    include /etc/nginx/mime.types;

     

    default_type application/octet-stream;

     

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '

     

    '$status $body_bytes_sent "$http_referer" '

     

    '"$http_user_agent" "$http_x_forwarded_for"';

     

    access_log /var/log/nginx/access.log main;

     

    sendfile on;

     

    #tcp_nopush on;

     

    keepalive_timeout 65;

     

    #gzip on;

     

    include /etc/nginx/conf.d/*.conf;

     

    }

     

    Server Blocks คืออะไร?

    บล็อกhttpที่แสดงด้านบนมี คำสั่ง includeซึ่งจะแจ้งให้ NGINX ทราบว่าไฟล์กำหนดค่าเว็บไซต์อยู่ที่ใด

     

    เมื่อทำการติดตั้งจากคลังข้อมูลอย่างเป็นทางการของ NGINX บรรทัดดังกล่าวจะแสดงเป็น include /etc/nginx/conf.d/*.conf ซึ่งคุณจะเห็นได้จาก บล็อก httpที่วางอยู่ด้านบน เว็บไซต์ทุกแห่งที่โฮสต์ด้วย NGINX ควรมีไฟล์กำหนดค่าเฉพาะใน /etc/nginx/conf.d/ และชื่อจะจัดรูปแบบเป็น example.com.conf เว็บไซต์ที่ถูกปิดใช้งาน — ไม่ได้รับบริการจาก NGINX — ควรมีชื่อว่า example.com.conf.disabled

     

    เมื่อติดตั้ง NGINX จากคลังข้อมูลของ Ubuntu หรือ Debian บรรทัดดังกล่าวจะแสดงว่า include /etc/nginx/sites-enabled/*; โฟลเดอร์ ../sites-enabled/ จะรวมลิงก์สัญลักษณ์ไปยังไฟล์การกำหนดค่าไซต์ที่อยู่ใน /etc/nginx/sites-available/ คุณสามารถปิดใช้งานไซต์ภายใน sites-available ได้หากคุณลบลิงก์สัญลักษณ์ไปยัง sites-enabled

     

    ตามแหล่งที่มาของการติดตั้ง สามารถพบไฟล์การกำหนดค่าประกอบได้ที่ /etc/nginx/conf.d/default.conf หรือ etc/nginx/sites-enabled/default

     

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

     

    ไฟล์: /etc/nginx/conf.d/example.com.conf

     

    server {

     

    listen 80 default_server;

     

    listen [::]:80 default_server;

     

    server_name example.com www.example.com;

     

    root /var/www/example.com;

     

    index index.html;

     

    try_files $uri /index.html;

     

    }

     

     

    พอร์ตการฟังคืออะไร?

    คำสั่ง listen จะแจ้งให้ NGINX ทราบเกี่ยวกับชื่อโฮสต์/IP และ พอร์ต TCPจึงจดจำได้ว่าจะต้องฟังที่ใดสำหรับการเชื่อมต่อ HTTP

     

    อาร์กิวเมนต์ default_server หมายความว่าโฮสต์เสมือนนี้จะตอบรับคำขอบนพอร์ต 80 ซึ่งไม่ตรงกับคำสั่ง listen ของโฮสต์เสมือนแยกต่างหาก เมื่อถึงคำสั่งที่สอง คำสั่งนี้จะรับฟังผ่านIPv6และแสดงพฤติกรรมที่คล้ายคลึงกัน

     

     

    การโฮสต์เสมือนตามชื่อคืออะไร?

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

     

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

     

    ประมวลผลคำขอสำหรับ example.com และ www.example.com:

     

    ไดเรกทิฟ server_name สามารถใช้ไวด์การ์ดได้ *.example.com และ .example.com แจ้งให้เซิร์ฟเวอร์ประมวลผลคำขอสำหรับโดเมนย่อย example.com ทั้งหมด:

     

    ไฟล์: /etc/nginx/conf.d/example.com.conf

     

    server_name *.example.com;

     

    server_name .example.com;

     

    ประมวลผลคำขอสำหรับชื่อโดเมนทั้งหมดเริ่มต้นด้วยตัวอย่าง:

     

    ไฟล์: /etc/nginx/conf.d/example.com.conf

     

    server_name example.*;

     

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

     

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

     

     

    Location Blocks คืออะไร?

    การตั้งค่าตำแหน่งของ NGINX ช่วยให้คุณตั้งค่าวิธีที่ NGINX ตอบสนองต่อคำขอทรัพยากรภายในเซิร์ฟเวอร์ เนื่องจากคำสั่ง server_name แจ้งให้ NGINX ทราบว่าควรประมวลผลคำขอสำหรับโดเมนอย่างไร คำสั่ง location จึงใช้กับคำขอสำหรับโฟลเดอร์และไฟล์บางไฟล์ (เช่น http://example.com/blog/.)

     

    มาพิจารณาตัวอย่างสักสองสามตัวอย่าง:

     

    ไฟล์: /etc/nginx/sites-available/example.com

     

    location / { }

     

    location /images/ { }

     

    location /blog/ { }

     

    location /planet/ { }

     

    location /planet/blog/ { }

     

    ตำแหน่งเหล่านี้เป็นการจับคู่สตริงตามตัวอักษรและตรงกับส่วนใดก็ได้ของคำขอ HTTP ที่ตามหลังเซกเมนต์โฮสต์:

     

    คำขอ: http://example.com/

     

    ผลลัพธ์:สมมติว่ามีรายการ server_name สำหรับ example.com ในกรณีนี้ ตำแหน่ง/ไดเรกทิฟจะกำหนดว่าจะเกิดอะไรขึ้นกับคำขอนี้

     

    ด้วย NGINX คำขอต่างๆ จะได้รับการตอบสนองด้วยการจับคู่ที่เฉพาะเจาะจงที่สุดเสมอ:

     

    คำขอ: http://example.com/planet/blog หรือ http://example.com/planet/blog/about/

     

    การส่งคืน:สิ่งนี้จะได้รับการเติมเต็มโดยตำแหน่งที่ตั้ง /planet/blog เนื่องจากมีความเฉพาะเจาะจงมากกว่า แม้ว่าตำแหน่งที่ตั้ง /planet จะตรงกันก็ตาม

     

    ไฟล์: /etc/nginx/sites-available/example.com

     

    location ~ IndexPage.php$ { }

     

    location ~ ^/BlogPlanet(/|/index.php)$ { }

     

    เมื่อคำสั่งตำแหน่งตามด้วย ~ (ทิลดา) NGINX จะดำเนินการจับคู่นิพจน์ปกติ ซึ่งจะคำนึงถึงตัวพิมพ์เล็ก/ใหญ่เสมอ

     

    ตัวอย่างเช่น IndexPage.php จะตรงกับตัวอย่างแรกข้างต้น ในขณะที่ indexpage.php จะไม่ตรงกัน

     

    ในตัวอย่างที่สอง นิพจน์ทั่วไป ^/BlogPlanet(/|/index.php)$ { } จะจับคู่คำขอสำหรับ /BlogPlanet/ และ /BlogPlanet/index.php แต่ไม่จับคู่กับ /BlogPlanet, /blogplanet/ หรือ /blogplanet/index.php NGINX ใช้ Perl Compatible Regular Expressions (PCRE)

     

    จะเป็นอย่างไรหากคุณต้องการให้การจับคู่ไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ คุณควรใช้เครื่องหมายติลเดอตามด้วยเครื่องหมายดอกจัน: ~* คุณจะเห็นตัวอย่างด้านบนซึ่งระบุว่า NGINX ควรประมวลผลคำขอที่ลงท้ายด้วยนามสกุลไฟล์บางนามสกุล ตัวอย่างแรกระบุว่าไฟล์ที่ลงท้ายด้วย .pl, PL, .cgi, .perl, .Perl, .prl และ .PrL (รวมถึงไฟล์อื่นๆ) จะตรงกับคำขอทั้งหมด

     

    ไฟล์: /etc/nginx/sites-available/example.com

     

    location ^~ /images/IndexPage/ { }

     

    location ^~ /blog/BlogPlanet/ { }

     

    เมื่อคุณเพิ่มเครื่องหมายแคเรตและเครื่องหมายทิลเดอ (^~) ลงในคำสั่งระบุตำแหน่ง คุณกำลังแจ้ง NGINX ว่า หากตรงกับสตริงตัวใดตัวหนึ่ง ระบบจะหยุดค้นหารายการที่ตรงกันเจาะจงมากขึ้น และใช้คำสั่งเหล่านี้แทน

     

    นอกจากนี้ คำสั่งเหล่านี้ยังทำงานในลักษณะเดียวกับการจับคู่สตริงตามตัวอักษรในกลุ่มแรก แม้ว่าจะมีการจับคู่ที่เฉพาะเจาะจงมากขึ้นในภายหลัง การตั้งค่าต่างๆ จะถูกใช้หากคำขอตรงกับคำสั่งเหล่านี้

     

    ตอนนี้มาดูรายละเอียดเพิ่มเติมเกี่ยวกับการประมวลผลการกำหนดตำแหน่งกัน

     

    ไฟล์: /etc/nginx/sites-available/example.com

     

    location = / { }

    สุดท้ายการเพิ่มสัญลักษณ์เท่ากับลงในการตั้งค่าตำแหน่งจะทำให้ต้องตรงกับเส้นทางที่ร้องขอและจบลงด้วยการค้นหารายการที่ตรงกันที่เฉพาะเจาะจงมากขึ้น

     

    ตัวอย่างเช่น ตัวอย่างสุดท้ายจะเป็นการจับคู่กับ http://example.com เท่านั้น ตรงกันข้ามกับ http://example.com/index.html หากคุณใช้การจับคู่แบบตรงเป๊ะ คุณสามารถเพิ่มความเร็วของเวลาคำขอได้ในระดับปานกลาง ซึ่งอาจเป็นประโยชน์หากมีคำขอบางรายการเกิดขึ้นบ่อยครั้ง

     

    การประมวลผลคำสั่งจะดำเนินไปตามลำดับนี้:

     

    การจับคู่สตริงที่แน่นอนจะถูกประมวลผลก่อน: NGINX จะหยุดการค้นหาหากพบการจับคู่และจะตอบสนองคำขอ

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

    ขั้นตอนต่อไปคือการประมวลผลคำสั่งระบุตำแหน่งแต่ละคำสั่งที่มีนิพจน์ทั่วไป (~ และ ~*) หากนิพจน์ทั่วไปตรงกับคำขอ NGINX จะยุติการค้นหาและดำเนินการตามคำขอ

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

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

     

    ไม่แนะนำหรือรองรับการบล็อกตำแหน่งแบบซ้อนกัน

     

     

    วิธีการใช้ตำแหน่งรูทและดัชนี

    การตั้งค่าตำแหน่งเป็นตัวแปรอีกตัวซึ่งมีบล็อกอาร์กิวเมนต์ของตัวเอง

     

    เมื่อ NGINX ระบุตำแหน่งไดเรกทิฟที่ตรงกับคำขอเฉพาะมากที่สุด การตอบสนองจะขึ้นอยู่กับเนื้อหาของบล็อกไดเรกทิฟตำแหน่งที่เกี่ยวข้อง ตัวอย่างเช่น:

     

    ไฟล์: /etc/nginx/sites-available/example.com

     

    location / {

     

    root html;

     

    index index.html index.htm;

     

    }

     

    จากตัวอย่างนี้ เราจะเห็นว่ารูทของเอกสารนั้นอยู่ในไดเร็กทอรี html/ ภายใต้คำนำหน้าการติดตั้งเริ่มต้นของ NGINX เส้นทางเต็มของตำแหน่งนั้นคือ /etc/nginx/html/

     

    คำขอ: http://example.com/blog/includes/style.css

     

    ส่งคืน: NGINX จะพยายามให้บริการไฟล์ที่พบใน /etc/nginx/html/blog/includes/style.css

     

    หมายเหตุ:

     

    คุณสามารถใช้เส้นทางสัมบูรณ์สำหรับไดเรกทิฟรูทได้หากต้องการ ตัวแปรดัชนีจะแจ้งให้ NGINX ทราบว่าควรให้บริการไฟล์ใดหากไม่มีการระบุ

     

    ดังนั้นตัวอย่างเช่น:

     

    คำขอ: http://example.com

     

    ผลลัพธ์: NGINX จะพยายามให้บริการไฟล์ที่พบใน /etc/nginx/html/index.html

     

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

     

    มาพิจารณาตัวอย่างที่ซับซ้อนกว่าซึ่งแสดงคำสั่งตำแหน่งหลายรายการสำหรับเซิร์ฟเวอร์ที่ตอบสนองต่อโดเมนตัวอย่าง:

     

    ไฟล์: /etc/nginx/sites-available/example.com คำสั่งระบุตำแหน่ง

     

    location / {

     

    root /srv/www/example.com/public_html;

     

    index index.html index.htm;

     

    }

     

    location ~ .pl$ {

     

    gzip off;

     

    include /etc/nginx/fastcgi_params;

     

    fastcgi_pass unix:/var/run/fcgiwrap.socket;

     

    fastcgi_index index.pl;

     

    fastcgi_param SCRIPT_FILENAME /srv/www/example.com/public_html$fastcgi_script_name;

     

    }

     

    ที่นี่ เราจะเห็นว่าบล็อกตำแหน่งที่สองจะจัดการคำขอทั้งหมดสำหรับทรัพยากรที่ลงท้ายด้วยนามสกุล .pl และจะระบุตัวจัดการ fastcgi สำหรับคำขอเหล่านั้น ในกรณีอื่น NGINX จะใช้คำสั่งตำแหน่งแรก

     

    ทรัพยากรสามารถพบได้ในระบบไฟล์ที่ /srv/www/example.com/public_html/ เมื่อไม่มีการกำหนดชื่อไฟล์ที่แน่นอนในคำขอ NGINX จะค้นหาไฟล์ index.html หรือ index.htm และจัดเตรียมให้ หากพบไฟล์ดัชนีเป็นศูนย์ ระบบจะแสดงข้อความแสดงข้อผิดพลาด 404

     

    มาพิจารณาสิ่งที่เกิดขึ้นระหว่างคำขอตัวอย่างจำนวนหนึ่ง:

     

    คำขอ: http://example.com/

     

    ผลลัพธ์: /srv/www/example.com/public_html/index.html หากมีอยู่ มิฉะนั้น จะแสดง /srv/www/example.com/public_html/index.htm และหากไม่มีทั้งสองรายการนี้ จะแสดงข้อผิดพลาด 404

     

    คำขอ: http://example.com/blog/

     

    ผลลัพธ์: /srv/www/example.com/public_html/blog/index.html หากมีอยู่ หากไม่พบไฟล์เนื่องจากไม่มีอยู่ ระบบจะแสดง /srv/www/example.com/public_html/blog/index.htm หากไม่มีไฟล์ใดอยู่เลย NGINX จะแสดงข้อผิดพลาด 404

     

    คำขอ: http://example.com/tasks.pl

     

    ส่งคืน: NGINX จะใช้ประโยชน์จากตัวจัดการ FastCGI เพื่อดำเนินการไฟล์ที่พบใน /srv/www/example.com/public_html/tasks.pl และส่งคืนผลลัพธ์ที่เกี่ยวข้อง

     

    คำขอ: http://example.com/username/roster.pl

     

    การส่งคืน: NGINX จะใช้ตัวจัดการ FastCGI เพื่อดำเนินการไฟล์ที่พบใน /srv/www/example.com/public_html/username/roster.pl และส่งคืนผลลัพธ์ที่เกี่ยวข้อง

     

บทความที่น่าสนใจ

บทความ ล่าสุด

บทความ ความรู้ด้านไอที, คอมพิวเตอร์ Techonlogy, Gadget, ความรู้เกี่ยวกับคอมพิวเตอร์ กับทาง SoftMelt.com