Praktik terbaik apa yang Anda gunakan saat menggunakan NGinx?
Praktik terbaik apa yang Anda gunakan saat menggunakan NGinx?
Jawaban:
Cara menggabungkan blok HTTP dan HTTPS.
server {
listen 80;
listen 443 default ssl;
# other directives
}
Ini diposting sebagai jawaban untuk pertanyaan yang berbeda. Lihat di sini .
Sejauh ini, kiat-kiat terbaik yang pernah saya lihat berasal dari penulis di halaman perangkapnya: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
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:
lokasi / { try_files /maintenance.html $ uri $ uri / @wordpress; }
Ketika pemeliharaan berakhir, cukup mv maintenance.html dari $ root.
if (-f ...) { return 503; }
dan error_page 503 /maintenance.html
. Bagaimana menurut anda?
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
Sering kali lebih efisien untuk menggunakan map
arahan sebagai ganti 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;
}
The empty_gif
Modul ini juga sangat berguna, terutama jika Anda perlu tanggapan monitor dari webserver (menggunakan nagios / monit / etc):
location /token {
empty_gif;
}
location /favicon.ico {
empty_gif;
}
location /img/1px.gif {
empty_gif;
}
access_log off;
untuk lokasi tersebut adalah praktik umum
Kami mengatur Nginx dengan Chef, menggunakan buku resep ini yang berisi skrip untuk menangani konfigurasi nginx mirip dengan bagaimana Debian melakukan Apache2, dan juga beberapa templat contoh dengan standar waras.
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;
}
if
pernyataan jika Anda menggunakannya dengan benar - dokumen mengatakan bahwa if
s aman jika Anda sedang dilakukan return xxx;
.
location = /maintenance.html { break; }
perlu?
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 _ "";
}
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
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.
}
}
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 yang paling efisien untuk melakukan sesuatu, tetapi ia 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;
}
}
Saya selalu mencoba menggunakan root
arahan di bagian atas blok server sehingga saya dapat mengambil keuntungan dari $document_root
variabel dan tidak pernah, tetapi tidak pernah, termasuk root
arahan di dalam blok lokasi.
The Pitfalls Halaman dari Nginx wiki memiliki beberapa tips besar tentang praktik terbaik.
Jika Anda menggunakan nginx sebagai proxy, menyesuaikan pengaturan batas waktu bisa penting untuk memastikan Anda tidak memiliki koneksi nginx drop sebelum aplikasi Anda selesai, terutama jika Anda berurusan dengan aplikasi lalu lintas tinggi:
proxy_connect_timeout
proxy_send_timeout
Apakah Anda melihat ke sini?