Nginx'i alt etki alanındaki farklı kök klasörlere sahip birden çok konumla yapılandırın


202

Sunucumdaki iki farklı klasöre bir alt alanın ve bir alt alanın dizininin kök URL'sini sunmak istiyorum. İşte sahip olduğum ve çalışmadığım basit kurulum ...

server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
            root /web/test.example.com/www;
    }

    location /static {
            root /web/test.example.com/static;
    }
}

Bu örnekte test.example.com/dizin dosyasını/web/test.example.com/www

ve test.example.com/staticindeks dosyasını/web/test.example.com/static

Yanıtlar:


238

aliasDirektifi aşağıdakiler için kullanmanız gerekir location /static:

server {

  index index.html;
  server_name test.example.com;

  root /web/test.example.com/www;

  location /static/ {
    alias /web/test.example.com/static/;
  }

}

Nginx wiki benden daha kökü ve takma daha iyi arasındaki farkı açıklıyor:

İlk bakışta kök yönergesine benzeyebileceğini, ancak belge kökünün değişmediğini, yalnızca istek için kullanılan dosya sistemi yolunu değiştirdiğini unutmayın. İsteğin konum kısmı, istek Nginx sorunlarına bırakılır.

Dikkat edin rootve aliassondaki eğik çizgileri farklı şekilde ele alın.


67
İhtiyacı yok alias. Lütfen, kullanıcılar tarafından doldurulan topluluk wiki'sini değil , resmi dokümanları okuyun . Alıntı: Konum yönerge değerinin son kısmı ile eşleştiğinde kök yönerge kullanılması daha iyidir .
VBart

9
Bu benim için işe yaradı, ancak sonunda bir eğik çizgi eksik. Takma ad şu şekilde olmalıdır: takma ad /web/test.example.com/static/;
ajma

8
@VBart dokümanlar, söylediklerini tam olarak ne söylediğinizi söylüyorlar, ancak bu talimatı hiç haklı çıkarmıyorlar - keyfi bir stil seçeneği gibi görünüyor. Arkasında mantıklı bir neden görüyor musunuz?
Mark Amery

104

Location yönergesi sistemi

Başlamak istediğiniz /staticve verilerinizde bulunan tüm istekleri iletmek istediğiniz gibi/var/www/static

Yani basit bir yöntem son klasörü tam yoldan ayırır, yani

Tam yol : /var/www/static

Son Yol: /static ve İlk yol:/var/www

location <lastPath> {
    root <FirstPath>;
}

Şimdi neyi yanlış yaptığınızı ve çözümlerinizin neler olduğunu görelim

Senin hatan :

location /static {
    root /web/test.example.com/static;
}

Çözümleriniz:

location /static {
    root /web/test.example.com;
}

2
Bu bana yardımcı oldu: ya klasörümü yeniden adlandırmam ya da işleri işler hale getirmek için bir sembolik bağlantı kurmam gerektiğini fark ettim.
cjm

3
çok teşekkür ederim, tam olarak bu şekilde başarısız
oluyordum

10
Bu, İstediğimi Yapma Özgürlüğü üzerinde oldukça ciddi bir sınırlama gibi görünüyor. Belirli bir yolla başlayan URI'lerin fiziksel dosya yolunda bu URI yolunu içermeyen bir dizinden sunulmasını istiyorum. Bu çözüm ile, belgelerimi "/ statik" ile biten bir yolun altına diske yerleştirmek için ZORUNLUyum. Bunu hiç sevmiyorum. Dosyaları istediğim yere koyma konusunda mutlak ve eksiksiz bir özgürlük istiyorum.
Szczepan Hołyszewski

48
server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
        root /web/test.example.com/www;
    }

    location /static {
        root /web/test.example.com;
    }
}

http://nginx.org/r/root


2
sorulanın farkı nedir?
TangMonk

5
@ Farkı ahşap: root /web/test.example.com;yerine root /web/test.example.com/static;. nginx, konuma göre belirtilen yolu ara ağaçla eşleştirir ve yol ve kaynak dizin aynı adı paylaştığından birlikte çalışır root.
rmoestl
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.