Nginx Yapılandırma Doğrulayıcı
Nginx'i yeniden yüklemeden önce bir nginx.conf yapıştırın; sözdizimi hatalarını, yanlış yerleştirilmiş yönergeleri ve yaygın güvenlik hatalarını yakalayın.
Buraya bir .conf dosyası bırakın veya yapılandırma metnini yukarıya yapıştırın.
Her şey tarayıcınızda çalışır — yapılandırmanız hiçbir sunucuya yüklenmez.
Yukarıya bir nginx yapılandırması yapıştırın (veya örneği yükleyin); denetimler burada görünecek.
nginx'in gerçek PCRE motoru yerine JavaScript'in regex motorunu kullanır — çok benzer ama aynı değildir (possessive niceleyiciler/atomik gruplar yoktur).
nginx yapılandırma hatalarını üretime ulaşmadan yakalamak
Bozuk bir nginx.conf genellikle iki nahoş yoldan biriyle kendini belli eder: `nginx -t`nin gizemli bir satır numarası hatasıyla yeniden yüklemeyi reddetmesi ya da — daha kötüsü — bir `reload`un yeni yapılandırma diskte bozuk dururken eski (çalışan) yapılandırmayı bellekte sessizce tutması; böylece bir sonraki tam yeniden başlatmaya kadar bir sorun yokmuş gibi görünür. İkisi de, aynı türden hataları siz daha düzenleme aşamasındayken yakalayarak önlenebilir.
Gerçek dünyadaki en yaygın nginx.conf hatası egzotik değildir — unutulmuş bir noktalı virgüldür. nginx'in dilbilgisi yalnızca `;`, `{` ve `}` ile ilgilendiğinden (satır sonlarıyla değil), eksik bir `;` çoğu modern ayrıştırıcının verdiği temiz bir "satır 12: ; bekleniyordu" hatasını üretmez; bunun yerine bir sonraki yönergenin adı ve bağımsız değişkenleri önceki yönergenin ek bağımsız değişkenleri olarak sessizce emilir, bazen aşağıda bir şey tuhaf davranana kadar hiç hata vermeden. Bu aracın satır sonu sezgisi tam olarak bu kalıbı izler — yeni bir kaynak satırında, bağımsız değişken listesinin ortasında beliren bilinen bir yönerge adı — ve bu bir destek talebine dönüşmeden önce işaretler.
Yönerge yerleşimi ikinci yaygın tuzaktır: `proxy_pass` yalnızca bir `location` (veya `if`) bloğunun içinde, `listen`/`server_name` yalnızca `server` içinde anlamlıdır ve benzeri — ancak nginx'in kendi ayrıştırıcısı, yönerge adını daha geniş anlamda tanıyorsa onu alışılmadık bir yerde olduğu için reddetmeyebilir ve hata mesajları "bunu yanlış iç içe koydunuz" yerine nginx'in dahili yönerge kayıt defterine işaret eder. Bu doğrulayıcı yönerge-bağlam tablosunu doğrudan denetler; böylece yanlışlıkla `http` düzeyinde (herhangi bir `server`/`location` dışında) bırakılmış bir `proxy_pass`, yalnızca "yapılandırma yüklenemedi" demek yerine tam satırıyla işaretlenir.
Sözdiziminin ötesinde, birkaç küçük yapılandırma tercihinin orantısız güvenlik sonuçları vardır: `server_tokens`ı varsayılanında (`on`) bırakmak her yanıt header'ında ve varsayılan hata sayfasında tam nginx sürümünüzü ele verir; bu, sürüme özgü bir CVE arayan herkes için bedava keşiftir. Bir `return`/`rewrite`/`add_header` içinde ham `$request_uri` yerine URL çözülmüş `$uri` değişkenini kullanmak da bazı yapılandırmalarda saldırganın bir yönlendirme hedefine karakter enjekte etmesine izin verebilir. Bunların hiçbiri normal testlerde gözle görülür bir şeyi bozmaz; 200 satırlık bir yapılandırmada gözle fark etmeye güvenmek yerine ayrı bir denetimi hak etmelerinin nedeni de budur.
Sık sorulan sorular
Bu araç `nginx -t` yerine geçer mi?
Hayır. `nginx -t`, yapılandırmanızı sunucunuzda gerçekten kurulu olan nginx derlemesine ve modüllerine göre denetleyen tek araçtır ve yeniden yüklemeden önceki son sözdür. Bu doğrulayıcı aynı türden hataları (söz dizimi hataları, yanlış yönerge yerleşimi, birkaç güvenlik kokusu) nginx kurulu bir sunucuya ulaşmadan önce yakalar — yerelde düzenlerken, bir CI adımında veya hedef makineye henüz kabuk erişiminiz yokken işe yarar.
Güvenlik denetim listesi kapsamlı mı?
Hayır — açık kaynaklı nginx yapılandırma denetçisi Gixy'den esinlenen, bilinçli seçilmiş küçük bir denetim kümesini kapsar (eksik `server_tokens off;`, `autoindex on;` ve `$request_uri`nin daha güvenli olduğu yerde kullanılan `$uri`). Gixy'nin ya da tam bir güvenlik denetiminin yerini tutmaz.
Regex test aracı neden gerçek nginx'ten biraz farklı davranıyor?
nginx'in `location ~` ve `location ~*` eşleştirmesi PCRE kullanır (nginx ikilisindeki paketlenmiş PCRE kütüphanesiyle). Bu araç tamamen tarayıcınızda çalıştığı için bunun yerine JavaScript'in yerleşik RegExp motorunu kullanır — yaygın desenlerde ikisi çok yakındır, ancak possessive niceleyiciler veya atomik gruplar gibi yalnızca PCRE'ye özgü özellikler burada aynı şekilde davranmaz.
Yapılandırmam tarayıcımdan hiç çıkıyor mu?
Hayır. Ayrıştırma, doğrulama ve her iki simülatör de bu sekmede düz JavaScript ile çalışır. Hiçbir şey yüklenmez, günlüğe kaydedilmez veya bir yere gönderilmez — sayfa yüklendikten sonra internet bağlantınızı kesseniz bile çalışmaya devam eder.