NGinx kullanırken hangi en iyi uygulamaları kullanıyorsunuz?
NGinx kullanırken hangi en iyi uygulamaları kullanıyorsunuz?
Yanıtlar:
HTTP ve HTTPS blokları nasıl birleştirilir?
server {
listen 80;
listen 443 default ssl;
# other directives
}
Bu, farklı bir sorunun cevabı olarak gönderildi. Buraya bakınız .
Şimdiye kadar gördüğüm en iyi ipuçları , şu ana kadar sayfasındaki yazardan geliyor: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
Genellikle, "if" kullanmak kötü bir uygulamadır (nginx yazarına göre). mümkünse, "if (-f ...)" yerine error_page yönergelerinin try_file işlevini kullanmak daha iyi
Tipen maintenence.html dosyası ve tipin try_files ile birleştirilmesi:
yer / { try_files /maintenance.html $ uri $ uri / @wordpress; }
Bakım sona erdiğinde, $ root'dan sadece mv maintenance.html.
if (-f ...) { return 503; }
ve error_page 503 /maintenance.html
. Ne düşünüyorsun?
Nginx'i daha güçlü SSL şifreleri kullanacak şekilde 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
map
Eşleştirme alt etki alanları için kökü değiştirirken yönergeyi normal ifadelerin yerine 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 ayrıca çok sen (nagios / Monit / vs kullanılarak) web sunucusundan monitör yanıt ihtiyaç, özellikle, yararlıdır:
location /token {
empty_gif;
}
location /favicon.ico {
empty_gif;
}
location /img/1px.gif {
empty_gif;
}
access_log off;
bu konumlar için ortak bir uygulamadır
Debian'ın Apache2'yi yaptığı gibi nginx yapılandırmasını idare etmek için komut dosyaları ve aklı başında varsayılanlara sahip bazı örnek şablonlar içeren bu kitabı kullanarak Nginx'i Chef ile kurduk.
İşte bir bakım sayfasını 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;
}
if
Doğru kullanırsanız , ifadede yanlış bir şey yoktur - dokümanlar if
sizin için güvenliyse Sadece yapıyorum return xxx;
.
location = /maintenance.html { break; }
gerekli mi?
Nginx 0.7.12 ve sonrasında, bir "Host" başlığı olmadan istekleri yakalamak için server_name içinde "" kullanılabilir.
Aşağıdakileri tanımsız sanal konaklar için bir seçenek olarak kullanabilirsiniz.
server {
server_name _ "";
}
Bir süre önce, eski tarayıcıların yalnızca bir battaniye gzip ifadesinde sorun yaşayabileceği için nginx ile gzip sıkıştırmasının nasıl düzgün bir şekilde yapılacağı hakkında bir mesaj verdim. HTH.
http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx
Bunun en iyi uygulama olup olmadığını bilmiyorum, ama kesinlikle nginx içinde iç içe geçmiş koşullar elde etmek için düzgün 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 geçiş yapmanız gerekirse, bunu yapmak için değişkenleri kullanabilirsiniz. İşleri yapmanın en etkili yolu olmayabilir, ama işe yarıyor:
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
Direktifi her zaman sunucu bloğunun en üstünde kullanmaya çalışırım, böylece $document_root
değişkenden faydalanabilirim ve asla, ancak hiçbir zaman root
yönergeyi bir konum bloğunun içine dahil etmem .
Tuzaklar Sayfa Nginx vikiden iyi uygulamalar hakkında bazı harika ipuçları vardır.
Proxy olarak nginx kullanıyorsanız, zaman aşımı ayarlarının ayarlanması, özellikle de yoğun trafik uygulaması ile uğraşıyorsanız, uygulama onlarla bitmeden nginx bağlantı bırakmadığınızdan emin olmak için önemli olabilir:
proxy_connect_timeout
proxy_send_timeout
Buraya bir göz attın mı?