-
-
Save roktas/575865 to your computer and use it in GitHub Desktop.
# kanonik kök dizin | |
root /srv/www/$host/site; | |
# öntanımlı indeksler | |
index index.html index.htm index.php; | |
# flv dosyalarında flv modülü etkin | |
location ~ \.flv$ { | |
flv; | |
} | |
# logları kirleten bazı botları reddet | |
if ($http_user_agent ~* (Baiduspider|Morfeus\ strikes)) { | |
return 444; | |
} | |
# nokta dosyalar daima gizli olmalı | |
location ~ /\. { | |
deny all; | |
} | |
# logları kirleten script-kiddie istekleri | |
location ~* /(phpmyadmin|php-my-admin)/ { | |
deny all; | |
} | |
# sahte refererları reddet | |
if ($http_referer ~* (babes|click|diamond|forsale|girl|jewelry|love|nudit|organic|poker|porn|poweroversoftware|sex|teen|video|webcam|zippo)) { | |
return 444; | |
} | |
# bakım kipi - kök dizinde .503 dosyası varsa sistem bakımda | |
if ( -f $document_root/.503) { | |
return 503; | |
} | |
# robot dosyası yoksa logları kirletme | |
location = /robots.txt { | |
log_not_found off; | |
} | |
# debian paket deposu sunuyorsak loglar kirlenmesin | |
location ~ /debian/.*(/i18n/Translation-|\.diff/Index).*$ { | |
log_not_found off; | |
} | |
# standart www yönlendirmesi | |
if ($host ~* www\.(.*)) { | |
set $x_host_without_www $1; | |
rewrite ^(.*)$ http://$x_host_without_www$1 permanent; | |
} | |
# özel 404 sayfası daima /40x/ dizininde | |
error_page 404 @40x; | |
location @40x { | |
rewrite ^(.*)$ /40x/index.html break; | |
} | |
# sistem bakımda sayfası daima /50x/ dizininde | |
error_page 500 502 503 504 @50x; | |
location @50x { | |
rewrite ^(.*)$ /50x/index.html break; | |
} | |
# statik dosyalarda zaman aşımını uzat | |
#location ~* \.(js|css|jpe?g|gif|png|svg|swf|pdf|docx?|odf|ppt|tar\.gz|zip|rar)$ { | |
# expires 31d; | |
# break; | |
#} | |
# bunun yerine | |
# tüm dosyalar için öntanımlı zaman aşımı değeri | |
location / { | |
expires 30d; | |
} | |
# php hangi dosyalarda etkin? | |
location ~ \.(php|phtml)$ { | |
fastcgi_pass 127.0.0.1:9000; | |
fastcgi_index index.php; | |
fastcgi_param SCRIPT_FILENAME $request_filename; | |
include fastcgi_params; | |
} |
bu kodu nginx yapılandırma köküne örneğin base.conf
gibi bir isimle (debian ve türevi dağıtımlarda /etc/nginx/base.conf
) aldıktan sonra include
etmeniz yeterli olmalı. şöyle:
server {
listen 80;
server_name .<ALANADI>; # alan adının başında "." var, bu şekilde wilcard alan adlarını da yönetebilirsiniz
include base.conf;
# varsa özel ayarlar
}
server {
listen 443;
server_name .<ALANADI>;
include base.conf;
# ssl stanza
# varsa özel ayarlar
}
Anladım siz de benimkiyle benzer bir yöntem yapmışsınız. Fakat burda alan adına özel olarak log kaydı, fastcgi gibi şeyler eklendiğinde if cümlecikleri iyi olmuyor. Bir bash script ile bu işi otomatize ettim. Ama bu işi kendilğinden yaptırmak şimdilik çok fazla gelir galiba.
http{ # genel ayarlarınız include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-available/*; }
alanadına özel olarak tanımlanmış dosya: ALANADI
server { listen 80; server_name ALANADI www.ALANADI; access_log /var/www/ALANADI/log/access.log; error_log /var/www/ALANADI/log/error.log; server_name_in_redirect off; location / { root /var/www/ALANADI/public/; index index.php index.html index.htm; } location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ { root /var/www/ALANADI/public/; expires 30d; break; } #location ~ \.php$ { location ~ wp\-.*\.php|wp\-admin|\.php$ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/ALANADI/public/$fastcgi_script_name; fastcgi_param CONTENT-LENGTH $content_length; } include drop; }
Öncelikle bu yapılandırmanın çok sayıda ince ayar gerektirebilecek high profile veya özel amaçlı sunucular için değil de, genel amaçlı sunucular için uygun olduğunu söyleyeyim. Bu varsayım altında pek çok durumda ve directive'de ALANADI
'nı açık halde vermenize gerek yok. Burada bir kaç imkan var:
- konvansiyon oluşturmalı ve yapılandırmada bu konvansyion varsayımlarını izlemelisiniz
$host
değişkenini kullanabilirsiniz:root /var/www/ALANADI/public/
yerine/var/www/$host/public
gibi.- rölatif değişkenlerden yararlanabilirsiniz:
fastcgi_param SCRIPT_FILENAME $request_filename
gibi.
Bahsettiğiniz gibi shell veya bir başka sistemle şablonlama yoluyla yapılandırma üretmek de mümkün. Ama bu tür yöntemlerde üretilmiş yapılandırmaları daha sonra güncelleme ihtiyacı ortaya çıktığında sıkıntı olabiliyor. Basit sunucular için ortak ayarların basitçe include edilmesi yöntemini bu nedenle tercih ediyorum. Fakat bana soracak olursanız yönettiğiniz sunucu sayısı çok fazlaysa tüm bu otomasyon işlemleri için puppet
gibi modern ve güçlü bir yapılandırma framework'ünü kullanmak en doğrusu.
Örneğin yukarıda verdiğiniz yapılandırmada sadece server_name kısmında ALANADI
gerekiyor. Diğer ayarların hiçbirinde ALANADI
kullanmanıza gerek yok. Nginx'in pek çok özelliği var. Fakat bu özellikler ayrıntılı şekilde dokümante edilmediğinden bazen bunları keşfetmek zor oluyor.
Benim şuanki konfigürasyonumda server_name
tek başına yeterli olmayacaktır. Çünkü burdaki girdiğim pathler harici bir yere erişmesini istemiyorum kodun misal fastcgi_param SCRIPT_FILENAME $request_filename
ile başka bir dizindeki bir dosyaya erişmesi mümkün sanki?
Nginx'in çok güzel özellikleri var. Ama dediğiniz gibi keşfetmek için çok araştırmak ve denemeler yapmak zorunda kalıyoruz. Bilgilerimizi paylaşalım :)
aynen, nginx'te vhost olarak yapılandırmasını otomatize etmişsiniz anladığım kadarıyla, bunu nasıl yaptığınızı sorabilir miyim? Normalde
include *
edilerekserver
eklenebiliyor.