Ada dua cara untuk mencapai ini. Entah Anda melakukan semuanya berdasarkan alamat IP, dengan lokasi subfolder, atau Anda perlu membeli satu domain dan kemudian memiliki beberapa subdomain pada domain itu (subdomain tidak boleh dikenakan biaya apa pun, jika Anda membeli domain, tetapi periksa dengan registrar Anda).
Saya tidak menyarankan metode alamat IP jika hanya karena sangat jahat harus mengingat alamat IP, dan jika Anda mencoba berbagi informasi kepada orang lain, Anda juga memiliki masalah yang sama dengan orang lain yang harus mengingat alamat IP.
Pendekatan satu-IP, banyak subfolder, tanpa nama domain
MEMPERHATIKAN! Kami tidak memiliki informasi tentang proyek yang sedang Anda kerjakan. Kami perlu tahu lebih banyak untuk menentukan apakah Anda dapat melakukan pendekatan ini, karena banyak kerangka kerja web tidak akan berfungsi tanpa nama domain yang benar terkait dengannya.
PERINGATAN : Dalam pengujian berkelanjutan terhadap contoh-contoh ini, ditemukan bahwa pendekatan "Satu domain, banyak subdirektori" tidak dengan baik hati melakukan reverse-proxy data ke backend, karena URI yang diminta akan menyertakan subdirektori dalam URI; ini mungkin membuat server backend memiliki masalah dalam berperilaku dengan benar.
Di nginx
sisi, kita perlu melakukan pendekatan 'jahat' untuk ini - satu alamat IP, banyak lokasi dokumen dan subfolder. Ini adalah pendekatan yang sangat sangat jahat dan dapat menyebabkan banyak masalah dengan beberapa kerangka kerja web.
Dengan anggapan nginx
instalasi default sebagai basis dari repositori, maka kita harus membuat konfigurasi situs untuk menangani setiap permintaan subdirektori proyek. Maka kita harus menghubungkannya di lokasi yang tepat.
Buat /etc/nginx/sites-available/my-projects
dengan yang berikut (gunakan ini sebagai templat / panduan - ini mengasumsikan tiga proyek dengan HTML statis dan tidak ada aplikasi web dinamis dalam PHP atau python atau yang serupa, dan Anda dapat menyalin masing-masing blok lokasi dan membuat lokasi baru sesuai; itu juga mengasumsikan Anda IP server adalah 1.2.3.4
).
server {
listen 80 default_server;
server_name 1.2.3.4;
location / {
return 410; # Default root of site won't exist.
}
location /proj1/ {
alias /var/www/proj1;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj2/ {
alias /var/www/proj2;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj3/ {
alias /var/www/proj3;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
}
Sekarang kita ganti konfigurasi default (hapus) dan tambahkan milik kita:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
Dan kemudian restart nginx
layanan:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
Pendekatan satu domain, banyak subdomain.
Bagian jawaban ini menganggap Anda memiliki satu domain dan beberapa subdomain di dalamnya. Jika Anda tidak memiliki ini, harap klarifikasi dalam pertanyaan Anda
Dengan setiap nginx
server {}
blok dalam konfigurasi, Anda perlu menentukan nama server, dan kemungkinan mengatur blok server keempat sebagai 'tangkap semua' untuk permintaan lainnya.
Contoh: Saya memiliki tiga proyek, proj1
, proj2
, proj3
. Saya memiliki domain bernama evil-projects.net
(CATATAN: Tidak ada benar-benar). Saya ingin tiga subdomain yang berbeda, satu untuk setiap nginx
konfigurasi yang akan menunjuk ke satu proyek masing-masing. Server saya berada di 1.2.3.4, dan akan melayani semua situs.
Dengan skenario di atas, kami memiliki dua bagian: domain dan subdomain, dan konfigurasi server.
(1): Konfigurasi DNS
Siapkan DNS Anda di host Anda sedemikian rupa sehingga yang berikut ini benar dengan catatan DNS:
evil-projects.net IN A 1.2.3.4
proj1.evil-projects.net IN A 1.2.3.4
proj2.evil-projects.net IN A 1.2.3.4
proj3.evil-projects.net IN A 1.2.3.4
(2): Konfigurasi NGINX di server (1.2.3.4)
Sekarang untuk nginx
konfigurasi Anda . Saya berasumsi Anda akan memiliki setup nginx default dan paket-paket dari Repositori (saya akan menggunakan 14,04 sebagai contoh dasar). Kami akan memiliki empat file konfigurasi /etc/nginx/sites-available
, pertama. Anda mungkin perlu menggunakan sudo
saat membuat file-file ini, karena folder tersebut dimiliki oleh root
.
/etc/nginx/sites-available/catch-all
- ini akan menjadi 'tangkap semua' untuk domain yang tidak valid. Saya suka mengembalikan kode kesalahan http 410 (PERGI).
server {
listen 80 default_server;
server_name _;
return 410;
}
Selanjutnya, kami mengatur konfigurasi untuk situs / proyek Anda. Saya akan menganggap mereka semua file statis. Masing-masing menyiratkan bahwa Anda memiliki direktori web yang berbeda untuk setiap proyek di server juga ('akar dokumen' berbeda)
/etc/nginx/sites-available/proj1.evil-projects.net
:
server {
listen 80;
server_name proj1.evil-projects.net;
root /var/www/proj1;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj2.evil-projects.net
:
server {
listen 80;
server_name proj2.evil-projects.net;
root /var/www/proj2;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj3.evil-projects.net
:
server {
listen 80;
server_name proj3.evil-projects.net;
root /var/www/proj3;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
Kami kemudian harus menghapus konfigurasi 'default' dari /etc/nginx/sites-enabled
, dan menambahkan milik kami. Lagi-lagi sudo
diperlukan di sini.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/
Dan kemudian kita memulai kembali nginx
proses:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Setelah DNS menjalar, situs akan berfungsi sebagaimana mestinya.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Mengapa Anda tidak bisa mendapatkan domain untuk mereka? (Anda dapat menetapkan IP yang sama untuk banyak domain)?