pengembangan-web-mp.com

NGinx Praktik Terbaik

Praktik terbaik apa yang Anda gunakan saat menggunakan NGinx?

46

Sejauh ini, tips terbaik yang pernah saya lihat berasal dari penulis di halaman perangkapnya: https://www.nginx.com/resources/wiki/start/topik/tutorial/config_pitfalls /

21
Roger

Cara menggabungkan blok HTTP dan HTTPS.

server {
    listen 80;
    listen 443 default ssl;

    # other directives
}

Ini diposting sebagai jawaban untuk pertanyaan yang berbeda. Lihat disini .

21
Jauder Ho

Secara umum, menggunakan "jika" adalah praktik yang buruk (menurut penulis nginx). jika memungkinkan, lebih baik menggunakan try_file dari arahan error_page sebagai gantinya "jika (-f ...)"

Menggabungkan tip dengan file maintenence.html dan tip dengan try_files kita dapatkan:

 location/{
 try_files /maintenance.html $ uri $ uri/@wordpress; 
} 

Ketika pemeliharaan berakhir, cukup mv maintenance.html dari $ root.

15
Slava K

Konfigurasikan nginx untuk menggunakan cipher SSL yang lebih kuat. Secara default, SSLv2 diaktifkan (yang harus dinonaktifkan jika memungkinkan).

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

11
Jauder Ho

Seringkali lebih efisien menggunakan direktif map sebagai pengganti ekspresi reguler saat mengganti root untuk subdomain yang cocok:

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;

}
8

empty_gif modul juga sangat bermanfaat, terutama jika Anda membutuhkan respons monitor dari server web (menggunakan nagios/monit/etc):

location /token {
    empty_gif;
}

location /favicon.ico {
    empty_gif;
}

location /img/1px.gif {
    empty_gif;
} 
8

Kami mengatur Nginx dengan Chef, menggunakan buku masak ini yang berisi skrip untuk menangani konfigurasi nginx mirip dengan bagaimana Debian melakukan Apache2, dan juga beberapa templat contoh dengan standar waras.

6
jtimberman

Berikut adalah metode yang baik untuk mengembalikan halaman pemeliharaan. Semua permintaan ditulis ulang dan kode http yang benar dikembalikan. (503 Layanan tidak tersedia)

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;
}
5

Dari nginx 0.7.12 dan yang lebih baru, "" dapat digunakan di server_name untuk menangkap permintaan tanpa header "Host".

Anda dapat menggunakan yang berikut ini sebagai catchall untuk host virtual yang tidak terdefinisi.

server {
  server_name _ "";
}
4
Unknown

Saya juga memposting beberapa waktu yang lalu tentang cara menangani kompresi gzip dengan nginx dengan benar karena browser yang lebih lama mungkin memiliki masalah dengan pernyataan blanket gzip. HTH.

http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx

3
Jauder Ho

Saya tidak tahu apakah ini adalah praktik terbaik, tapi pasti peretasan yang rapi untuk mendapatkan kondisi bersarang di nginx. Ini contoh dari wiki 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.
  } 
}
3
sajal

Jika Anda perlu membalik secara kontekstual antara http dan https untuk subdomain yang ditangani oleh blok server yang sama, Anda dapat menggunakan variabel untuk melakukannya. Mungkin bukan cara paling efisien untuk melakukan sesuatu, tetapi ini bekerja:

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;
  }

}
2

Saya selalu mencoba menggunakan arahan root di bagian atas blok server sehingga saya dapat mengambil keuntungan dari $document_root variabel dan tidak pernah, tetapi tidak pernah, termasuk root directive di dalam blok lokasi.

The Pitfalls Page dari Nginx wiki memiliki beberapa kiat hebat tentang praktik terbaik.

Jika Anda menggunakan nginx sebagai proxy, menyesuaikan pengaturan batas waktu bisa penting untuk memastikan Anda tidak memiliki koneksi drop nginx sebelum aplikasi Anda selesai, terutama jika Anda berurusan dengan aplikasi lalu lintas tinggi:

proxy_connect_timeout
proxy_send_timeout
1
wjimenez5271
0
KPWINC