How to enable CORS in lighttpd

Follow these steps to enable CORS in lighttpd…

Step 1, edit lighttpd.conf to enable mod_setenv

server.modules = (
“mod_access”,
“mod_expire”,
……………..
“mod_setenv”, => Make sure mod_setenv enabled.
…………….)

After enabling mod_setenv, add these lines to your vhost block.

setenv.add-response-header = (
“Access-Control-Allow-Origin” => “*”,
“Access-Control-Allow-Methods” => “HEAD, GET, OPTIONS”,
“Access-Control-Expose-Headers” => “Content-Range, Date, Etag, Cache-Control, Last-Modified”,
“Access-Control-Allow-Headers” => “Content-Type, Origin, Accept, Range, Cache-Control”,
“Access-Control-Max-Age” => “600”,
“Timing-Allow-Origin” => “*” )

You might want to change values in headers, according to your case.

Keep in mind, setenv.add-response-header is accepting array as argument, you can add any additional headers there, followed by a comma.

To verify CORS headers are present, go to http://httpstatus.io and check response headers.

 

nginx üzerinde WordPress URL Rewrite (.htaccess)

nginz üzerinde WordPress çalıştırmak için aşağıdaki rewrite rule’ları kullanıyorum.

umarım işinize yarar.

    location / {

    #yoast seo pack icin
    rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
    rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

        if (!-f $request_filename){     
        set $rule_1 1$rule_1;
        }
        if (!-d $request_filename){     
        set $rule_1 2$rule_1;
        }
        if ($rule_1 = "21"){     
        rewrite /. /index.php last;
    } 
        try_files $uri $uri/ =404;
    }

Google Hesapları için çift taraflı doğrulama Google Authenticator

2 ay önce tamamen tesadüfen Google Authenticator uygulamasından haberdar oldum.
Sistem çok basit.

Google’a (gmail ve diğer servisler) her giriş yaptığınızda, sistem size bir kod soruyor. Cep telefonunuzdan bir kod üreterek hesabınıza giriş yapabiliyorsunuz.

Böylelikle, kullanıcı adınızı ve şifrenizi başkası bir bilse bile, kod üretmeden hesaba giriş sağlayamıyor.

Aslında şuan bankaların kullandığı “tek kullanımlık şifre ya da şifrematik” dediğimiz OTP cihazlarıyla aynı mantıkta çalışıyor.

Android kullandığım için, iPhone ve BlackBerry üzerinde test etmedim. Fakat hepsinde uygulama aynı.

Cep telefonunuzu kaybeder ya da unutursanız, sistem size giriş yapabileceğiniz 10 adet kod veriyor. Bunları bir yere not etmeyi ihmal etmeyin.

Kurulum ve daha fazla bilgi için: Google Yardım

nginx üzerinde SMF 2.0 + Pretty URLs

Merhaba,

Nginx üzerinde geliştirme yapmaya devam ediyorum. Tabi ki URL rewrite konusu Apache’ye göre biraz daha farklı işliyor.

Alıştığımız .htaccess maalesef nginx üzerinde yok. (Tabi ki include yaparak web root’a .htaccess koyabilirsiniz)

En son denememi SMF 2.0 ve Pretty URLs plugini ile gerçekleştirdim.

Eğer nginx üzerinde SMF çalıştırmak istiyorsanız, aşağıdaki rewrite rule’ları kullanabilirsiniz.

# Profil sayfalari icin
rewrite ^/forum/profile/([^/]+)/?$ "/forum/index.php?pretty;action=profile;user=$1" last;

# Actions icin
rewrite ^/forum/(activate|admin|ads|announce|attachapprove|ban|boardrecount|buddy|calendar|clock)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(collapse|convertentities|coppa|credits|deletemsg|detailedversion|display|dlattach|editpoll|editpoll2)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(emailuser|featuresettings|findmember|groups|help|helpadmin|im|jseditor|jsmodify)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(jsoption|lock|lockvoting|login|login2|logout|manageboards|managecalendar|managesearch|manageattachments|maintain|markasread|mascot)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(membergroups|mergetopics|mlist|moderate|modifycat|modifykarma|movetopic|movetopic2|news|notify)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(notifyboard|optimizetables|openidreturn|packages|permissions|pm|post|postsettings|post2|printpage|profile|quotefast)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(quickmod|quickmod2|recent|regcenter|register|register2|reminder|removepoll|removetopic2)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(repairboards|reporttm|requestmembers|restoretopic|reports|search|search2|sendtopic|serversettings|smileys|smstats|suggest)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(spellcheck|splittopics|stats|sticky|theme|trackip|about:mozilla|about:unknown)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(unread|unreadreplies|verificationcode|viewErrorLog|viewmembers|viewprofile|vote|viewquery|viewsmfile|who)/?$ "/forum/index.php?pretty;action=$1" last;
rewrite ^/forum/(\.xml|xmlhttp)/?$ "/forum/index.php?pretty;action=$1" last;

# Forumlar icin
rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/?$ "/forum/index.php?pretty;board=$1.0" last;
rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/([0-9]*)/?$ "/forum/index.php?pretty;board=$1.$2" last;

# Topicler icin
rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/?$ "/forum/index.php?pretty;board=$1;topic=$2.0" last;
rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/([0-9]*|msg[0-9]*|new)/?$ "/forum/index.php?pretty;board=$1;topic=$2.$3" last;

Yandex.Mail Kurumsal – Gönderim Hatası

Merhabalar,

Yandex’in yeni servisi, “Kurumlar için Mail”i yakın zamanda test etme fırsatım oldu.

Servisi, yönettiğim bazı sitelerde iletişim formu ve diğer formlardan alınan bilgileri göndermek için kullanmayı denedim. Hem iletişim formunu dolduran kişiye, hem de iletişim formundan alınan verilerin gönderileceği kişiye bir bildirim e-maili gönderen ve bu verileri ayrıca veritabanına kaydeden ufak bir script yazdım.

Tüm gönderiler için PHPMailer class’ı kullandım.
Mail içerikleri HTML olarak, charset olarak UTF-8, subject “İletişim Formu Bildirim” olarak set edildi. Gönderen (from) header’ı olarak da “Benimsitem.com İletişim” set edildi.

Host: smtp.yandex.ru – Port: 25

Sistem bir süre stabil çalıştı, her 2 partiye de mail gönderimi başarılı oldu.

Fakat bir süre sonra bazı iletişim formlarının iletilmediğini keşfettim. Veritabanında kayıt olmasına rağmen mail gelmiyordu. PHPMailer ile debug çalıştırdım. Fakat yeteri kadar bilgi dönmediği için direk sunucu üzerinde capture yapmaya karar verdim.

tcpdump -s 65535 -w mail.pcap port 25

 

Mail gönderimi sırasında aşağıdaki hatanın döndüğünü farkettim:

554 5.7.1 Message rejected under suspicion of SPAM

Cevap direk Yandex mail serverından geliyordu. Neyi spam olarak algıladığını anlayabilmek için, veritabanında olup da maili gitmeyen verileri iletişim formuna girdim. Belli kelimeler kullanıldığında ve uzunluk arttığında mailin gitmediğini farkettim.

Konuyla alakalı araştırma yapmama rağmen kimsenin bu sorunu yaşamadığını ya da denk gelmediğini farkettim. Yandex’e konuyla alakalı yazdım ama henüz bir dönüş alamadım.

Özetle sonuç hüsran 🙂 Google Apps ile karşılaştırıldığında, maalesef yetersiz kalıyor.
Bence en büyük eksiklikler:

  • DKIM (DomainKeys) desteği yok. Bu nedenle Yahoo bazen mailleri hiç almayabiliyor.
  • SMTP üzerinden gönderilen mailler, Yandex.Mail’in giden kutusuna düşmüyor. Bu Google Apps’ın en sevdiğim özelliği sanırım. Hangi yöntemle mail giderse gitsin, webmailden Sent Items’a ulaşıp, giden tüm mailleri görebiliyorsunuz.
  • SPF kayıtları standarta uygun değil. Doğrusu nedir ne değildir, hiç bir yerde yazmıyor. Özellikle sorunlu SPF kaydı ve DKIM olmayışı mailin spam olarak işaretlenmesine neden oluyor.
  • Tüm bu eksiklikler teknik olsa da, esas yönetim gücü ve kabiliyeti Google Apps özelliklerinin yakınından bile geçmiyor.

Şunu anladım ki, web geliştiricileri için en büyük sorunlardan biri mail göndermek.

Kendi sunucuma mail server kurarım, her şeyi konfigüre ederim, eksiksiz çalışır diyorsanız da Inbox’a mail ulaştırmanın da çok zor olduğunu unutmayın.

Maalesef Google Apps artık Free account alımını kapattı. Tavsiye edebileceğim 2 servis: MailJet ve MailChimp.

Bu servisler üzerinden sorunsuz gönderim yapabilirsiniz. Tabi para ödemedikçe, aylık ve günlük limitleri var.

Sizin de önerebileceğiniz alternatifler ya da sorunuz varsa yorumlarınızı beklerim.

PHP mail() çalıştırırken “sh: -t: not found” hatası

Merhaba,

PHP ile mail() çalıştırırken

sh: -t: not found

hatası alıyorsanız, sendmail_path set etmemiş olabilirsiniz.
Muhtemelen php.ini dosyanız olması gerektiği yerde değildir ya da sendmail yüklü olmayabilir.
php.ini var mı, öncelikle onu kontrol edelim (command line kullanabilenler, dedicated vps vs kullananlar icin)

php -i | grep php.ini

Eğer command line olarak erişim sağlayamıyorsanız, web sunucunuz üzerinden phpinfo(); ile aynı değerleri alabilirsiniz.

Çıktı şöyle olmalı:

Configuration File (php.ini) Path => /usr/local/php/lib

Loaded Configuration File => /usr/local/php/lib/php.ini

Buradaki /usr/local/php path’i sizde değişkenlik gösterebilir. Fakat bakılması gereken en önemli alan “loaded configuration file”, burada bir php.ini göremiyorsanız, configuration path içine php.ini oluşturabilirsiniz.
Default bir php.ini yüklemeniz yeterli olacaktır.
Ayrıca, php.ini olmadan phpnin çalışması da normaldir. Default değerlerle çalışmaktadır.

Sendmail yüklü mü?

whereis sendmail

çalıştırdığınızda

sendmail: /usr/sbin/sendmail /usr/lib/sendmail /usr/share/sendmail /usr/share/man/man8/sendmail.8.gz

çıktısı almanız lazım.php.ini varsa ve sorun düzelmiyorsa, php.ini’de sendmail_path değerini “/usr/sbin/sendmail -i -t”  olarak set edebilirsiniz. “-i ve -t” parametresini unutmayın. “man sendmail” ile ne işe yaradıklarına bakabilirsiniz.

Eğer hosting müşterisiyseniz ve buradaki çözümleri uygulamak istiyorsanız, hosting firmanızın teknik ekibine bildirmeniz gerekebilir. Buradaki değişikliklein tamamı sunucu tabanlıdır. Eğer böyle bir erişiminiz yoksa,

ini_set(“sendmail_path”, “/usr/sbin/sendmail -i -t”);

ile her php scriptinizde sendmail_path set edebilirsiniz…

Umarım yararlı olur.