Konfigurasikan nginx dengan beberapa lokasi dengan folder root berbeda pada subdomain


202

Saya mencari untuk melayani url root dari subdomain dan direktori subdomain ke dua folder berbeda di server saya. Berikut ini adalah pengaturan sederhana yang saya miliki dan tidak berfungsi ...

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;
    }
}

Dalam contoh ini test.example.com/akan membawa file indeks/web/test.example.com/www

dan test.example.com/staticakan membawa file indeks/web/test.example.com/static

Jawaban:


238

Anda perlu menggunakan aliasarahan untuk 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/;
  }

}

The nginx wiki menjelaskan perbedaan antara akar dan alias lebih baik daripada aku dapat:

Perhatikan bahwa ini mungkin terlihat mirip dengan direktif root pada pandangan pertama, tetapi root dokumen tidak berubah, hanya jalur sistem file yang digunakan untuk permintaan tersebut. Bagian lokasi permintaan dijatuhkan dalam masalah permintaan Nginx.

Catat itu rootdan aliastangani trailing slash secara berbeda.


67
Dia tidak butuh alias. Tolong, baca dokumen resmi , bukan wiki komunitas yang diisi oleh pengguna. Kutipan: Ketika lokasi cocok dengan bagian terakhir dari nilai direktif, lebih baik menggunakan direktif root .
VBart

9
Ini bekerja untuk saya kecuali bahwa itu tidak ada garis miring. Alias ​​harus membaca: alias /web/test.example.com/static/;
ajma

8
@ VBarilah dokumen mengatakan apa yang Anda kutip katakan, tetapi mereka tidak membenarkan instruksi itu sama sekali - sepertinya pilihan gaya yang sewenang-wenang. Apakah Anda melihat alasan logis di baliknya?
Mark Amery

104

Sistem arahan Lokasi adalah

Seperti Anda ingin meneruskan semua permintaan yang dimulai /staticdan data Anda hadir/var/www/static

Jadi metode sederhana memisahkan folder terakhir dari path lengkap, itu artinya

Jalur penuh : /var/www/static

Jalur Terakhir: /static dan Jalur Pertama:/var/www

location <lastPath> {
    root <FirstPath>;
}

Jadi mari kita lihat apa yang Anda lakukan salah dan apa solusi Anda

Kesalahanmu :

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

Solusi Anda:

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

2
Itu membantu saya: membuat saya sadar bahwa saya perlu mengubah nama folder saya atau membuat symlink untuk membuat semuanya berfungsi.
cjm

3
terima kasih banyak, saya gagal persis seperti ini :)
bobmoff

10
Ini terlihat seperti batasan SEVERE pada Freedom To Do What I Want. Saya ingin URI dimulai dengan jalur tertentu untuk dilayani dari direktori yang tidak mengandung jalur URI di jalur file fisiknya. Dengan solusi ini, saya dipaksa untuk meletakkan dokumen saya di disk di bawah jalur yang diakhiri dengan "/ statis". Saya tidak suka ini sama sekali. Saya ingin kebebasan mutlak dan lengkap untuk meletakkan file di mana pun saya inginkan.
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
apa bedanya dengan bertanya?
TangMonk

5
@ Kayu perbedaannya: root /web/test.example.com;bukannya root /web/test.example.com/static;. nginx memetakan path yang ditentukan oleh lokasi ke pohon direktori dan karena path dan direktori sumber berbagi nama yang sama, ia bekerja dengannya root.
rmoestl
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.