File statis Nginx khusus untuk subdomain

Saya memiliki aplikasi NodeJs yang berjalan di localhost:8000 dan saya menggunakan Nginx sebagai server proxy. Ini adalah satu-satunya aplikasi yang berjalan di Nodejs sementara aplikasi lainnya berbasis PHP.

Saya mencoba menyetel proxy di Nginx untuk mengalihkan semua permintaan dari "http://localhost/NodeApp/" ke " http://localhost:8000/". Hanya file css/js/images dari nodeapp ini yang harus diambil langsung oleh Nginx. Semua permintaan lainnya diarahkan ke server Apache. Konfigurasi Nginxnya seperti ini -

#Need to modify this code to fetch static files for NodeApp only!
location ~ ^/(uploads/|vendor/|images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) {
  root /var/www/NodeApp/public;
  access_log off;
}

location /NodeApp/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_pass http://localhost:8000/;
}

Konfigurasi Nginx di atas merusak aplikasi lain karena mencari file statis di folder publik NodeApp. Bagaimana saya harus mengubah konfigurasi di atas agar hanya berfungsi untuk "localhost/NodeApp/"

Saya mencoba konfigurasi di bawah ini tetapi itu merusak folder statis NodeApp yang memiliki sub-folder- /public/js/bootstrap/ /public/js/datepicker/ /public/css/bootstrap/ /public/css/datepicker/ /public/uploads/pdf / /publik/gambar/

location /NodeApp/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_pass http://OneDesktop/;
    alias /var/www/NodeApp/public/;
}

Ada saran? Saya mencoba banyak hal tetapi tidak berhasil!

Terima kasih!


person Legolas    schedule 25.01.2016    source sumber


Jawaban (1)


Soalnya aplikasi Node bukan hanya satu URI saja, melainkan kumpulan URI. Pendekatan yang paling bersih adalah dengan memodifikasi aplikasi itu sendiri sehingga berada di bawah /NodeApp/ (termasuk di mana ia menarik sumber daya statisnya).

Dengan situasi saat ini, file sumber daya untuk aplikasi Node tumpang tindih dengan namespace file sumber daya untuk aplikasi yang dihosting lainnya, dan sulit untuk menentukan aturan untuk memisahkan dua namespace yang tumpang tindih ini.

Salah satu opsi (yang kurang ideal) adalah meminta nginx untuk menyajikan file dari satu akar dokumen, lalu tunda ke akar dokumen lain jika file asli tidak ada.

Sesuatu seperti ini:

root /other/application/root;

location / {
    index ...;
    try_files $uri $uri/ =404;
}

location @other {
}

location ~ \.php$ {
    try_files $uri =404;
    ... 
}

location ~ ^/(uploads/|vendor/|images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) {
    root /var/www/NodeApp/public;
    access_log off;
    try_files $uri @other;
}

location /NodeApp/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_pass http://localhost:8000/;
}

Blok location @other akan menyajikan file statis dari root aplikasi lain. Blok lokasi PHP adalah regex pertama location sehingga diutamakan.

person Richard Smith    schedule 25.01.2016
comment
Terima kasih Richard. Hargai jawaban Anda. Akan mencoba pengaturan konfigurasi nginx malam ini dan memperbarui di sini lagi. Satu pertanyaan tentang implementasi aplikasi di bawah /NodeApp/ itu sendiri - Saya menggunakan hackathon-starter yang merekomendasikan meletakkan file statis di bawah public/js, public/css dll. Namun, dalam aplikasi itu, express menangani file statis . Apa yang Anda sarankan untuk tidak mengambil pendekatan ini? Apakah saya melakukan sesuatu yang salah karena dapat menemukan hal serupa di mana pun di internet. - person Legolas; 28.01.2016
comment
Maaf atas kesalahan ketik pada komentar sebelumnya - Apakah saya melakukan kesalahan karena tidak dapat menemukan hal serupa di mana pun di internet - person Legolas; 28.01.2016
comment
Maaf, saya membahas tentang URL dan bukan direktori fisik. Lokasi file Anda saat ini baik-baik saja. Masalahnya adalah memisahkan URL mereka dari URL aplikasi PHP. Menjalankan aplikasi yang berbeda dalam domain yang sama sering kali memerlukan solusi kreatif yang tidak dibahas dalam tutorial aplikasi tunggal. - person Richard Smith; 28.01.2016