Koşullu olarak Nginx vhost'a nasıl dosya eklersiniz?


12

Aşağıdaki satırlarda, ben belki ek içeren bir siteye özgü konfigürasyon dosyasına sahip fastcgi_params bu siteye özgü. Bu dosya varsa yüklemek istiyorum.

server {
        listen 80 default;
        server_name _;
        root /path/www/$host;

        # Pass PHP scripts to php-fastcgi listening on port 9000
        location ~ \.php {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;


                if (-f /path/www/$host/nginx.conf) {
                        include /path/www/$host/nginx.conf;
                }
        }
}

Ancak, bu işe yaramaz ve aldığım hata:

nginx: [geliş] "içerme" yönergesine burada izin verilmez ...

Güncelleme

Ben ayrı ayrı kontrol etmek yerine, benim için kontrol dahil izin verebilir düşündüm.

server {
        listen 80 default;
        server_name _;
        root /path/www/$host;

        # Pass PHP scripts to php-fastcgi listening on port 9000
        location ~ \.php {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000;

                include /path/www/$host/*.nginx;
        }
}

Ancak, bu işe yaramıyor gibi görünüyor.


Bu soruna bir çözüm buldunuz mu? Aynı gemideyim ve bunu nasıl yaptığını merak ediyorum?
jackweirdy

Üzgünüm, nihayet sorun farklı bir şekilde olursa olsun sonunda çözdüm.
Xeoncross

Yanıtlar:


8

includesunucu başlatma sırasındaki şeyi yapar - gibi çalışma zamanı değişkenleri $hostkullanılamaz ve iföğrendiğiniz gibi bir bağlamda kullanılamaz .

serverFarklı ana bilgisayarlar için blokları ayırmanız gerekir . Üzgünüm!


31

Bu oldukça eski, ama yine de, bir çözüm buldum.

Bu tarzda yapılandırılmış vhosts ile bir kurulum var:

/etc/nginx/sites-enabled/site.com.conf

Dosyanın var olup olmadığını kontrol etmek yerine (ki bu mümkün değildir), sadece yapmak:

include /etc/nginx/sites-customizations/site.com.*.conf

Bu şekilde, basitçe sites-customizations-folder'da, kuralımla ana yapılandırma ile aynı adlı bir dosya oluşturabilirim . *Hiçbir ekstra yapılandırma dosyaları varsa hemen hemen gibi eserler eğer sonu yok olarak. İsterseniz, bu ayrıca ayrı dosyalara birden fazla ekstra yapılandırma eklemenizi sağlar.


5

Bunun eski olduğunu biliyorum ama çözüm, benim gibi bir cevap arayan birine yardımcı olabilir.

Ben sadece belirli bir ana bilgisayar için dahil edilmesi gereken yönlendirmeler bir grup vardı includeve ifdirektif izin verilmez iken , ben ifdahil edildi dosyanın içine ekleyerek sona erdi ...

Yani ben include /etc/nginx/conf.d/redirectsve bu dosyanın içinde ben var:

if ($host = "www.example.com") {
    # Some conf or redirects for this site only.
}

5

Yönerge glob()içinde nginx tarafından kullanılan includeve Debian sunucularımda iyi çalışan fonksiyon kalıbı genişletmesinden faydalanıyorum .

Sizin durumunuzda, bu satırı değiştirmeyi deneyin:

include /path/www/$host/nginx.conf;

Bununla birlikte:

include /path/www/<hostname>/nginx[.]conf;

yalnızca bir dosyayla eşleşen bir dosya maskesidir ve dosya yoksa nginx'i şikayet etmeyecektir. Ancak, içerme yönergelerinde değişkenlere izin verilmediğinden, içinde sabit bir değer sağlamanız gerekir <hostname>. Tek tek .conf dosyaları (her vhost için bir tane) oluşturan bir komut dosyası oluşturmak zorundaydık.

Düzenle

As Gerald Schneider işaret, izlemem gereken düşündüren $hostizin verilmez yerine, içinde. Yukarıdaki öneriyi değiştirdim.


1
değişken $hosthala burada çalışmayacak.
Gerald Schneider

Üzgünüz, haklısınız, dahil etme yönergelerinde değişkenlere izin verilmiyor. Listeden her vhost için tek bir .conf oluşturan bir python betiği kullanırız, ancak standarttan "özel" ek vhost başına ek sapmaları kapsamlı olarak kullanırız.
Alberto Pastore
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.