Nginx değişkeninin ayarlanıp ayarlanmadığını test edin


15

Önceden ayarlanmamışsa bir değişkeni varsayılan değere ayarlamam gerekir. Aşağıdaki yapılandırma işi yapar:

if ($foo ~ "^$") {
   set $foo default-value;
}

Ancak çalışma zamanı uyarıları oluşturur:

başlatılmamış "foo" değişkeni kullanarak

Bir değişkenin uyarı oluşturmadan ve uyarıyı genel olarak kapatmadan test edilmesinin bir yolu var mı:

uninitialized_variable_warn off;


2
Bunu benzer bir şey ararken buldum, ancak uninitialized_variable_warnküresel olarak ayarlanması gerekmiyor gibi görünüyor , sadece potansiyel olarak başlatılmamış değişkenleri kullanmanız gereken yere ayarlayabilirsiniz. Ben SSL SSL sayfasına geçmek için kullanıyorum, bu sayfa SSL olmadan erişilirse boş olacak.
Haravikk

Haravikk durum böyle değilnginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te

Hâlâ başka bir yere koymuş musunuz? Ben sadece PHP destekleyen konumlar tarafından ithal uninitialized_variable_warnbir parçası olarak kullanıyorum php.conf, bu yüzden kesinlikle her yerde uyarı bırakarak, sadece bu kapsamlarda kullanıyorum. Ben sahip olmayan uninitialized_variable_warn(o varsayılan izin gerçi başka kapsam olarak belirlenmiştir true).
Haravikk

Yanıtlar:


11

Bir değişken olup olmadığını kontrol etmek için aşağıdakileri kullanıyorum:

if ($dir = false) {
    set $dir "";
}

Bu konum bloğuna ulaşmadan ayarlanmazsa, boş bir dizeye ayarlar. Tırnaklar arasına kolayca bir dize ekleyebilirsiniz. Bunu kullanarak bir yapılandırma testi yaparken herhangi bir hata almıyorum.

Başka türlü görüp görmediğinizi lütfen bize bildirin.


Ben nginx görüyorum: [ortaya çıkan] bilinmeyen "dir" değişken
Alex Barker

1
Bu yanlış kontrol artık çalışmıyor, lütfen kullanın$foo ~ "^$"
Valdrinium

2

Davranış değişti veya en azından kullanarak sorgu parametre değerleri için farklı görünüyor $arg_<name>. Nginx 1.13.6 üzerinde, ngx değişkeninde bir sorgu değerinin olup olmadığını kontrol etmek için aşağıdakileri kullanın:

if ($arg_test = false) {
    default_type 'text/plain';
    return 404;
}

404'e geçmez.

if ($arg_test = '') {
    default_type 'text/plain';
    return 404;
}

query parametresi yoksa bir 404 döndürür. Gerekli bir sorgu parametresi yoksa yukarı akışa çarpmamak için kullanışlıdır.



0

Eklenen dosyada isteğe bağlı olarak değişkeni ayarlıyorsanız, kolay bir seçenek ilk önce varsayılan değeri ayarlamaktır.

set $value 'default';
include maybe-set-value.conf;

Conf dosyasındaki ikinci set deyimi varsayılan değerin yerini alacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.