คุณใช้แนวปฏิบัติที่ดีที่สุดในการใช้ NGinx อย่างไร
คุณใช้แนวปฏิบัติที่ดีที่สุดในการใช้ NGinx อย่างไร
คำตอบ:
วิธีรวมบล็อก HTTP และ HTTPS
server {
listen 80;
listen 443 default ssl;
# other directives
}
โดยไกลเคล็ดลับที่ดีที่สุดที่ฉันเคยเห็นมาจากผู้เขียนในหน้าหลุมพราง: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
โดยทั่วไปแล้วการใช้ "if" เป็นวิธีปฏิบัติที่ไม่ดี (อ้างอิงจากผู้เขียน nginx) ถ้าเป็นไปได้ควรใช้คำสั่ง try_file ของ error_page แทน "if (-f ... )"
รวมเคล็ดลับเข้ากับไฟล์ maintenence.html และเคล็ดลับกับ try_files ที่เราได้รับ:
ตำแหน่ง / { try_files /maintenance.html $ uri $ uri / @wordpress; }
เมื่อสิ้นสุดการบำรุงรักษาเพียง mv maintenance.html จาก $ root
if (-f ...) { return 503; }
error_page 503 /maintenance.html
คุณคิดอย่างไร?
กำหนดค่า nginx เพื่อใช้ ciphers SSL ที่แข็งแกร่งขึ้น โดยค่าเริ่มต้น SSLv2 จะเปิดใช้งาน (ซึ่งคุณควรปิดการใช้งานหากเป็นไปได้)
ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl
บ่อยครั้งจะมีประสิทธิภาพมากกว่าในการใช้map
คำสั่งแทนที่นิพจน์ทั่วไปเมื่อสลับรูทสำหรับการจับคู่โดเมนย่อย:
server {
server_name mysite.tld ~^.+\.mysite\.tld$;
map $host $files {
default common;
mysite.tld common;
www.mysite.tld common;
admin.mysite.tld admin;
system.mysite.tld system;
*.mysite.tld users;
}
root /var/www/mysite/$files;
}
empty_gif
โมดูลยังเป็นอย่างมากที่มีประโยชน์โดยเฉพาะอย่างยิ่งถ้าคุณต้องการการตอบสนองการตรวจสอบจากเว็บเซิร์ฟเวอร์ (ใช้ nagios / monit / ฯลฯ ):
location /token {
empty_gif;
}
location /favicon.ico {
empty_gif;
}
location /img/1px.gif {
empty_gif;
}
access_log off;
สำหรับสถานที่เหล่านั้นเป็นเรื่องธรรมดา
เราตั้งค่า Nginx กับ Chef โดยใช้ตำรานี้ซึ่งมีสคริปต์สำหรับจัดการการกำหนดค่า nginx คล้ายกับวิธี Debian ทำ Apache2 และแม่แบบตัวอย่างบางส่วนที่มีค่าเริ่มต้นที่มีสติ
นี่เป็นวิธีที่ดีในการส่งคืนหน้าการบำรุงรักษา คำขอทั้งหมดจะถูกเขียนใหม่และรหัส http ที่ถูกต้องจะถูกส่งกลับ (503 - บริการไม่พร้อมใช้งาน)
error_page 503 /maintenance.html;
location /
{
if (-f $document_root/maintenance.html)
{
return 503;
}
try_files $uri /index.php?$args;
}
location = /maintenance.html
{
rewrite ^ /maintenance.html break;
}
if
คำสั่งถ้าคุณใช้อย่างถูกต้อง - เอกสารบอกว่าif
ปลอดภัย กำลังทำreturn xxx;
อยู่
location = /maintenance.html { break; }
จำเป็นหรือไม่
จาก nginx 0.7.12 และใหม่กว่า "" สามารถใช้งานได้ใน server_name เพื่อรับคำขอโดยไม่มีส่วนหัว "โฮสต์"
คุณสามารถใช้สิ่งต่อไปนี้เป็น catchall สำหรับโฮสต์เสมือนที่ไม่ได้กำหนด
server {
server_name _ "";
}
ฉันยังโพสต์เมื่อเร็ว ๆ นี้เกี่ยวกับวิธีจัดการการบีบอัด gzip ด้วย nginx อย่างถูกต้องเนื่องจากเบราว์เซอร์รุ่นเก่าอาจมีปัญหากับคำสั่งครอบคลุม gzip HTH
http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx
ฉันไม่รู้ว่านี่เป็นวิธีปฏิบัติที่ดีที่สุดหรือไม่ แต่เป็นแฮ็คที่เรียบร้อยเพื่อรับสภาพที่ซ้อนใน nginx นี่คือตัวอย่างจากวิกิพีเดีย Nginx
location /xxxx/ {
set $test "";
if ($request_method = POST) {
set $test P;
}
if ($http_cookie ~* "CCCC=.+(?:;|$)" ) {
set $test "${test}C";
}
if ($test = PC) {
#rewrite rule goes here.
}
}
หากคุณต้องการพลิกบริบทระหว่าง http และ https สำหรับโดเมนย่อยที่จัดการโดยบล็อกเซิร์ฟเวอร์เดียวกันคุณสามารถใช้ตัวแปรเพื่อทำเช่นนั้น อาจไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการทำสิ่งต่าง ๆ แต่ใช้งานได้:
server {
server mysite.tld ~^.+\.mysite\.tld$;
set $req_ssl = 0;
map $host $files {
default common;
mysite.tld common;
www.mysite.tld common;
admin.mysite.tld admin;
system.mysite.tld system;
*.mysite.tld users;
}
root /var/www/mysite/$files;
if ( $files = "admin" ){
set $req_ssl 1;
}
if ( $files = "common" ){
set $req_ssl 2;
}
if ( $scheme = http )
{
set $req_ssl $req_ssl.1;
}
if ( $scheme = https )
{
set $req_ssl $req_ssl.2;
}
if ($req_ssl = 1.1){
rewrite ^ https://$host$uri;
}
if ($req_ssl = 2.2){
rewrite ^ http://$host$uri;
}
}
ฉันพยายามใช้root
คำสั่งที่ด้านบนสุดของบล็อกเซิร์ฟเวอร์เสมอดังนั้นฉันจึงสามารถใช้ประโยชน์จาก$document_root
ตัวแปรและไม่เคย แต่ไม่รวมถึงroot
คำสั่งในบล็อกตำแหน่งที่ตั้ง
ผิดพลาดหน้าจากวิกิพีเดีย Nginx มีเคล็ดลับที่ดีบางอย่างเกี่ยวกับการปฏิบัติที่ดีที่สุด
หากคุณกำลังใช้ nginx เป็นพร็อกซีการปรับการตั้งค่าการหมดเวลาอาจเป็นสิ่งสำคัญเพื่อให้แน่ใจว่าคุณไม่ได้มีการเชื่อมต่อการปล่อย nginx ก่อนที่แอปพลิเคชันของคุณจะทำกับพวกเขาโดยเฉพาะอย่างยิ่ง
proxy_connect_timeout
proxy_send_timeout
คุณลองมาดูที่นี่ไหม?