DEV Community

Teddy Zugana
Teddy Zugana

Posted on

Cara Mengatur Blok Server Nginx (Host Virtual) di Ubuntu

aat menggunakan server web Nginx, blok server (mirip dengan host virtual di Apache) dapat digunakan untuk merangkum detail konfigurasi dan menghosting lebih dari satu domain pada satu server.

Dalam panduan ini, kita akan membahas cara mengonfigurasi blok server di Nginx pada server Ubuntu 16.04.

Terapkan aplikasi Anda dari GitHub menggunakan DigitalOcean App Platform . Biarkan DigitalOcean fokus pada penskalaan aplikasi Anda.
Prasyarat

Kami akan menggunakan pengguna non-root dengan sudohak istimewa di sepanjang tutorial ini. Jika Anda belum mengonfigurasi pengguna seperti ini, Anda dapat membuatnya dengan mengikuti panduan pengaturan server awal Ubuntu 16.04 kami .

Anda juga perlu memasang Nginx di server Anda. Panduan berikut membahas prosedur ini:

Cara Memasang Nginx di Ubuntu 16.04 : Gunakan panduan ini untuk menyiapkan Nginx sendiri.
Cara Menginstal Linux, Nginx, MySQL, PHP (tumpukan LEMP) di Ubuntu 16.04 : Gunakan panduan ini jika Anda akan menggunakan Nginx bersama dengan MySQL dan PHP.

Jika Anda telah memenuhi persyaratan ini, Anda dapat melanjutkan dengan panduan ini.
Contoh Konfigurasi

Untuk keperluan demonstrasi, kita akan menyiapkan dua domain dengan server Nginx kita. Nama domain yang akan kita gunakan dalam panduan ini adalah example.com dan test.com .

Catatan: untuk informasi lebih lanjut tentang menyiapkan domain dengan DigitalOcean, silakan lihat dokumentasi produk Domain dan DNS kami .

Jika Anda tidak memiliki dua nama domain cadangan untuk digunakan, gunakan nama pengganti untuk saat ini dan kami akan menunjukkan kepada Anda nanti cara mengonfigurasi komputer lokal untuk menguji konfigurasi Anda.
Langkah 1 — Menyiapkan Direktori Root Dokumen Baru

Secara default, Nginx pada Ubuntu 16.04 memiliki satu blok server yang diaktifkan. Blok ini dikonfigurasi untuk menyajikan dokumen dari direktori di /var/www/html.

Meskipun ini berfungsi dengan baik untuk satu situs, kita memerlukan direktori tambahan jika kita akan melayani beberapa situs. Kita dapat menganggap /var/www/htmldirektori tersebut sebagai direktori default yang akan dilayani jika permintaan klien tidak cocok dengan situs kita yang lain.

Kami akan membuat struktur direktori /var/wwwuntuk setiap situs kami. Konten web yang sebenarnya akan ditempatkan dalam htmldirektori di dalam direktori khusus situs ini. Ini memberi kami fleksibilitas tambahan untuk membuat direktori lain yang terkait dengan situs kami sebagai saudara dari htmldirektori tersebut jika perlu.

Kita perlu membuat direktori ini untuk setiap situs kita. -pBendera tersebut memberitahu mkdiruntuk membuat direktori induk yang diperlukan di sepanjang jalan:

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html

Sekarang setelah kita memiliki direktori, kita akan menetapkan kembali kepemilikan direktori web ke akun pengguna normal kita. Ini akan memungkinkan kita menulis ke direktori tersebut tanpa sudo.

Catatan: Bergantung pada kebutuhan Anda, Anda mungkin perlu menyesuaikan izin atau kepemilikan folder lagi untuk mengizinkan akses tertentu bagi www-datapengguna. Misalnya, situs dinamis sering kali memerlukan ini. Persyaratan izin dan kepemilikan khusus sepenuhnya bergantung pada konfigurasi Anda. Ikuti rekomendasi untuk teknologi tertentu yang Anda gunakan.

Kita dapat menggunakan $USERvariabel lingkungan untuk menetapkan kepemilikan pada akun yang saat ini kita gunakan untuk masuk (pastikan Anda tidak masuk sebagai root ). Ini akan memudahkan kita untuk membuat atau mengedit konten dalam direktori ini:

sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/test.com/html

Izin root web kita seharusnya sudah benar jika Anda belum mengubah umasknilainya, tetapi kita dapat memastikannya dengan mengetik:

sudo chmod -R 755 /var/www

Struktur direktori kita sekarang telah dikonfigurasikan dan kita dapat melanjutkan.
Langkah 2 — Membuat Halaman Contoh untuk Setiap Situs

Sekarang setelah kita menyiapkan struktur direktori, mari buat halaman default untuk setiap situs kita sehingga kita akan memiliki sesuatu untuk ditampilkan.

Buat index.htmlfile di domain pertama Anda:

nano /var/www/example.com/html/index.html

Di dalam berkas tersebut, kita akan membuat berkas dasar yang menunjukkan situs mana yang sedang kita akses. Tampilannya akan seperti ini:
/var/www/contoh.com/html/index.html


Welcome to Example.com!


Success! The example.com server block is working!



Simpan dan tutup berkas saat Anda selesai. Untuk melakukannya nano, tekan CTRL+ountuk menulis berkas, lalu CTRL+xuntuk keluar.

Karena berkas untuk situs kedua kita pada dasarnya akan sama, kita dapat menyalinnya ke akar dokumen kedua kita seperti ini:

cp /var/www/example.com/html/index.html /var/www/test.com/html/

Sekarang, kita dapat membuka file baru di editor kita:

nano /var/www/test.com/html/index.html

Ubahlah sehingga merujuk ke domain kedua kita:
/var/www/test.com/html/indeks.html


Welcome to Test.com!


Success! The test.com server block is working!



Simpan dan tutup berkas ini setelah selesai. Sekarang kita memiliki beberapa halaman untuk ditampilkan kepada pengunjung kedua domain kita.
Langkah 3 — Membuat File Blok Server untuk Setiap Domain

Sekarang setelah kita memiliki konten yang ingin disajikan, kita perlu membuat blok server yang akan memberi tahu Nginx cara melakukannya.

Secara default, Nginx berisi satu blok server yang disebut defaultyang dapat kita gunakan sebagai templat untuk konfigurasi kita sendiri. Kita akan mulai dengan mendesain blok server domain pertama kita, yang kemudian akan kita salin untuk domain kedua kita dan buat modifikasi yang diperlukan.
Membuat File Blok Server Pertama

Seperti disebutkan di atas, kita akan membuat file konfigurasi blok server pertama kita dengan menyalin file default:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

Sekarang, buka file baru yang Anda buat di editor teks Anda dengan sudohak istimewa:

sudo nano /etc/nginx/sites-available/example.com

Mengabaikan baris yang diberi komentar, berkasnya akan terlihat seperti ini:
/etc/nginx/situs-tersedia/contoh.com

server {
listen 80 default_server;
listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

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

}

Pertama, kita perlu melihat perintah listen. Hanya satu blok server di server yang dapat default_servermengaktifkan opsi tersebut. Ini menentukan blok mana yang harus melayani permintaan jika yang server_namediminta tidak cocok dengan salah satu blok server yang tersedia. Ini seharusnya tidak sering terjadi dalam skenario dunia nyata karena pengunjung akan mengakses situs Anda melalui nama domain Anda.

Anda dapat memilih untuk menetapkan salah satu situs Anda sebagai "default" dengan menyertakan default_serveropsi tersebut dalam listenarahan, atau Anda dapat membiarkan blok server default diaktifkan, yang akan menyajikan konten direktori /var/www/htmljika host yang diminta tidak dapat ditemukan.

Dalam panduan ini, kami akan membiarkan blok server default tetap digunakan untuk melayani permintaan yang tidak cocok, jadi kami akan menghapus default_serverdari blok server ini dan berikutnya. Anda dapat memilih untuk menambahkan opsi ke blok server mana pun yang menurut Anda masuk akal.
/etc/nginx/situs-tersedia/contoh.com

server {
listen 80;
listen [::]:80;

    . . .

}

Catatan: Anda dapat memeriksa apakah default_serveropsi tersebut hanya diaktifkan dalam satu file aktif dengan mengetik:

grep -R default_server /etc/nginx/sites-enabled/

Jika kecocokan ditemukan tanpa komentar di lebih dari satu file (ditampilkan di kolom paling kiri), Nginx akan mengeluh tentang konfigurasi yang tidak valid.

Hal berikutnya yang harus kita sesuaikan adalah root dokumen, yang ditentukan oleh rootperintah. Arahkan ke root dokumen situs yang Anda buat:
/etc/nginx/situs-tersedia/contoh.com

server {
listen 80;
listen [::]:80;

    root /var/www/example.com/html;

}

Selanjutnya, kita perlu memodifikasi server_nameagar sesuai dengan permintaan untuk domain pertama kita. Kita juga dapat menambahkan alias apa pun yang ingin kita cocokkan. Kita akan menambahkan www.example.comalias untuk menunjukkannya.

Setelah selesai, berkas Anda akan terlihat seperti ini:
/etc/nginx/situs-tersedia/contoh.com

server {
listen 80;
listen [::]:80;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

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

}

Itu saja yang kita perlukan untuk konfigurasi dasar. Simpan dan tutup berkas untuk keluar.
Membuat File Blok Server Kedua

Sekarang setelah kita memiliki konfigurasi blok server awal, kita dapat menggunakannya sebagai dasar untuk file kedua kita. Salin untuk membuat file baru:

sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com

Buka file baru dengan sudohak istimewa di editor Anda:

sudo nano /etc/nginx/sites-available/test.com

Sekali lagi, pastikan Anda tidak menggunakan default_serveropsi untuk listenarahan dalam berkas ini jika Anda telah menggunakannya di tempat lain. Sesuaikan rootarahan agar mengarah ke akar dokumen domain kedua Anda dan sesuaikan server_nameagar sesuai dengan nama domain situs kedua Anda (pastikan untuk menyertakan alias apa pun).

Setelah selesai, berkas Anda kemungkinan akan terlihat seperti ini:
/etc/nginx/situs-tersedia/test.com

server {
listen 80;
listen [::]:80;

    root /var/www/test.com/html;
    index index.html index.htm index.nginx-debian.html;

    server_name test.com www.test.com;

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

}

Setelah selesai, simpan dan tutup berkas.
Langkah 4 — Mengaktifkan Blok Server dan Memulai Ulang Nginx

Sekarang setelah kita memiliki berkas blok server, kita perlu mengaktifkannya. Kita dapat melakukannya dengan membuat tautan simbolik dari berkas-berkas ini ke sites-enableddirektori, yang dibaca Nginx saat memulai.

Kita dapat membuat tautan ini dengan mengetik:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

File-file ini sekarang ditautkan ke direktori yang diaktifkan. Sekarang kita memiliki tiga blok server yang diaktifkan, yang dikonfigurasi untuk merespons berdasarkan listenarahannya dan server_name(Anda dapat membaca lebih lanjut tentang cara Nginx memproses arahan ini di sini ):

example.com:Akan menanggapi permintaan untuk example.comdanwww.example.com
test.com:Akan menanggapi permintaan untuk test.comdanwww.test.com
default: Akan menanggapi permintaan apa pun pada port 80 yang tidak cocok dengan dua blok lainnya.

Untuk menghindari kemungkinan masalah memori hash bucket yang dapat muncul akibat penambahan nama server tambahan, kami juga akan menyesuaikan satu nilai dalam /etc/nginx/nginx.confberkas kami. Buka berkas sekarang:

sudo nano /etc/nginx/nginx.conf

Di dalam berkas, temukan server_names_hash_bucket_sizeperintah tersebut. Hapus #simbol untuk menghapus komentar pada baris:
/etc/nginx/nginx.conf

http {
. . .

server_names_hash_bucket_size 64;

. . .

}

Simpan dan tutup berkas jika Anda sudah selesai.

Berikutnya, uji untuk memastikan tidak ada kesalahan sintaksis di salah satu file Nginx Anda:

sudo nginx -t

Jika tidak ada masalah yang ditemukan, mulai ulang Nginx untuk mengaktifkan perubahan Anda:

sudo systemctl restart nginx

Nginx sekarang seharusnya melayani kedua nama domain Anda.
Langkah 5 — Memodifikasi File Host Lokal Anda untuk Pengujian (Opsional)

Jika Anda belum menggunakan nama domain yang Anda miliki dan malah menggunakan nilai pengganti, Anda dapat mengubah konfigurasi komputer lokal agar Anda dapat menguji konfigurasi blok server Nginx untuk sementara.

Ini tidak akan memungkinkan pengunjung lain melihat situs Anda dengan benar, tetapi akan memberi Anda kemampuan untuk mengakses setiap situs secara independen dan menguji konfigurasi Anda. Ini bekerja dengan cara mencegat permintaan yang biasanya masuk ke DNS untuk menyelesaikan nama domain. Sebagai gantinya, kita dapat mengatur alamat IP yang kita inginkan agar komputer lokal kita tuju saat kita meminta nama domain.

Catatan: Pastikan Anda menjalankannya di komputer lokal selama langkah-langkah ini dan bukan di server jarak jauh. Anda harus memiliki akses root, menjadi anggota grup administratif, atau dapat mengedit file sistem untuk melakukan ini.

Jika Anda menggunakan komputer Mac atau Linux di rumah, Anda dapat mengedit berkas yang diperlukan dengan mengetik:

sudo nano /etc/hosts

Jika Anda menggunakan Windows, Anda dapat menemukan petunjuk untuk mengubah berkas host Anda di sini.

Anda perlu mengetahui alamat IP publik server Anda dan domain yang ingin Anda rutekan ke server. Dengan asumsi bahwa alamat IP publik server saya adalah 203.0.113.5, baris yang akan saya tambahkan ke berkas saya akan terlihat seperti ini:
/dll/host

127.0.0.1 localhost
. . .

203.0.113.5 example.com www.example.com
203.0.113.5 test.com www.test.com

Ini akan mencegat semua permintaan untuk example.comdan test.comdan mengirimkannya ke server Anda, yang merupakan apa yang kita inginkan jika kita tidak benar-benar memiliki domain yang kita gunakan.

Simpan dan tutup berkas jika Anda sudah selesai.
Langkah 6 — Menguji Hasil Anda

Setelah semuanya siap, Anda harus menguji apakah blok server berfungsi dengan benar. Anda dapat melakukannya dengan mengunjungi domain di peramban web Anda:

http://example.com

Anda akan melihat halaman seperti ini:

Blok server pertama Nginx

Jika Anda mengunjungi nama domain kedua Anda, Anda akan melihat situs yang sedikit berbeda:

http://test.com

Blok server kedua Nginx

Jika kedua situs ini berfungsi, Anda telah berhasil mengonfigurasi dua blok server independen dengan Nginx.

Pada titik ini, jika Anda menyesuaikan hostsberkas di komputer lokal untuk pengujian, Anda mungkin ingin menghapus baris yang Anda tambahkan.

Jika Anda memerlukan akses nama domain ke server Anda untuk situs publik, Anda mungkin ingin membeli nama domain untuk setiap situs Anda.
Kesimpulan

Sekarang Anda seharusnya memiliki kemampuan untuk membuat blok server untuk setiap domain yang ingin Anda hosting dari server yang sama. Tidak ada batasan nyata pada jumlah blok server yang dapat Anda buat, selama perangkat keras Anda dapat menangani lalu lintas.

Scale globally with MongoDB Atlas. Try free.

Scale globally with MongoDB Atlas. Try free.

MongoDB Atlas is the global, multi-cloud database for modern apps trusted by developers and enterprises to build, scale, and run cutting-edge applications, with automated scaling, built-in security, and 125+ cloud regions.

Learn More

Top comments (0)

Gen AI apps are built with MongoDB Atlas

Gen AI apps are built with MongoDB Atlas

MongoDB Atlas is the developer-friendly database for building, scaling, and running gen AI & LLM apps—no separate vector DB needed. Enjoy native vector search, 115+ regions, and flexible document modeling. Build AI faster, all in one place.

Start Free

👋 Kindness is contagious

If this **helped, please leave a ❤️ or a friendly comment!

Okay