NGinx kullanırken en iyi hangi uygulamaları kullanıyorsunuz?
Ş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 /
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 .
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.
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
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;
}
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;
}
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.
İş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;
}
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 _ "";
}
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
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.
}
}
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;
}
}
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
Buraya bir baktın mı?