it-swarm-tr.com

NGinx En İyi Uygulamaları

NGinx kullanırken en iyi hangi uygulamaları kullanıyorsunuz?

46

Şimdiye kadar, gördüğüm en iyi ipuçları bu tuzak sayfasındaki yazardan: https://www.nginx.com/kaynaklar/wiki/başlangıç ​​/ konular/öğreticiler/config_pitfalls /

21
Roger

HTTP ve HTTPS blokları nasıl birleştirilir.

server {
    listen 80;
    listen 443 default ssl;

    # other directives
}

Bu farklı bir soruya cevap olarak gönderildi. Buraya bakın .

21
Jauder Ho

Genellikle "if" kullanmak kötü bir uygulamadır (nginx'in yazarına göre). mümkünse, "if (-f ...)" yerine error_page yönergelerinin try_file dosyasını kullanmak daha iyi

Ucu maintenanceence.html dosyasıyla ve ipucu try_files ile birleştirdiğimizde:

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

Bakım sona erdiğinde, $ root'tan mv maintenance.html.

15
Slava K

Daha güçlü SSL şifrelerini kullanmak için nginx'i yapılandırın. Varsayılan olarak, SSLv2 etkindir (mümkünse devre dışı bırakmanız gerekir).

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

Eşleşen alt alan adları için kök değiştirilirken normal ifadeler yerine map yönergesini kullanmak genellikle daha etkilidir:

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 modülü de özellikle (nagios/monit/etc kullanarak) monitör yanıtlarına ihtiyacınız varsa very kullanışlıdır:

location /token {
    empty_gif;
}

location /favicon.ico {
    empty_gif;
}

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

Debian ile Apache2'nin yaptığı gibi nginx yapılandırmasını işlemek için komut dosyaları içeren bu yemek kitabı ile Nginx'i Chef ile kurduk ve ayrıca aklı varsayılanları olan bazı örnek şablonlar.

6
jtimberman

İşte bir bakım sayfası döndürmek için iyi bir yöntem. Tüm istekler yeniden yazılır ve doğru http kodu döndürülür. (503 Hizmet Kullanılamıyor)

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

Nginx 0.7.12 ve sonrasında, "Host" üstbilgisi olmadan istekleri yakalamak için sunucu_adı içinde "" kullanılabilir.

Tanımlanmamış sanal ana bilgisayarlar için aşağıdakileri bir catchall olarak kullanabilirsiniz.

server {
  server_name _ "";
}
4
Unknown

Eski tarayıcıların sadece battaniye gzip ifadesiyle ilgili sorunları olabileceğinden, nginx ile gzip sıkıştırmasını düzgün bir şekilde nasıl ele alacağım hakkında da bir süre önce yayınladım. HTH.

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

3
Jauder Ho

En iyi uygulama olup olmadığını bilmiyorum, ancak nginx'te iç içe koşullar elde etmek için kesinlikle temiz bir kesmek. İşte nginx wiki'den bir örnek .

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

Aynı sunucu bloğu tarafından işlenen alt alanlar için http ve https arasında bağlamsal olarak çevirmeniz gerekiyorsa, bunu yapmak için değişkenleri kullanabilirsiniz. Bir şeyleri yapmanın en etkili yolu olmayabilir, ancak işe yarar:

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

Her zaman sunucu bloğunun üstündeki root yönergesini kullanmaya çalışırım, böylece $document_root değişkeni ve hiçbir zaman, ama asla, root yönergesini bir konum bloğuna dahil etmeyin.

Nginx wiki'sindeki Tuzaklar Sayfası en iyi uygulamalar hakkında bazı harika ipuçlarına sahiptir.

Nginx'i proxy olarak kullanıyorsanız, özellikle yüksek trafikli bir uygulama ile uğraşıyorsanız, zaman aşımı ayarlarının ayarlanmış olması, uygulamanız onlarla birlikte nginx bağlantı bırakmadığınızdan emin olmak için önemli olabilir:

proxy_connect_timeout
proxy_send_timeout
1
wjimenez5271
0
KPWINC