15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
31.10.2024

Cara Mengonfigurasi Virtual Hosts di Nginx pada Ubuntu

Mengonfigurasi virtual host di Nginx adalah salah satu teknik paling powerful untuk hosting multiple websites di single server, masing-masing dengan domain name, root directory, dan independent configuration sendiri. Nginx menangani ini melalui server blocks — flexible, lightweight configuration units yang mendefinisikan bagaimana web server merespons requests untuk setiap domain.

Baik Anda mengelola personal portfolio, menjalankan client websites, atau scaling multi-tenant application, guide ini menyediakan complete, production-ready walkthrough untuk setup Nginx virtual hosts di Ubuntu. Kami akan cover directory structure, server block configuration, enabling sites, SSL/HTTPS setup, dan troubleshooting — everything yang Anda butuhkan untuk go dari zero ke fully functional multi-site Nginx server.

> Mencari reliable Ubuntu server untuk follow along? AlexHost's VPS Hosting plans memberikan Anda full root access, SSD storage, dan instant deployment — perfect untuk exact use case ini.

Table of Contents

  1. Prerequisites
  2. Set Up Directories for Each Website
  3. Create Sample HTML Content
  4. Create Virtual Host Configuration Files
  5. Enable the Virtual Hosts
  6. Test the Nginx Configuration
  7. Restart Nginx to Apply Changes
  8. Access Your Websites
  9. Enable HTTPS with Let's Encrypt (Recommended)
  10. Troubleshooting Common Issues
  11. Conclusion

Prerequisites

Sebelum Anda mulai, pastikan kondisi berikut terpenuhi:

Nginx Installed di Server Anda

Jika Nginx belum terinstall, jalankan commands berikut di Ubuntu server Anda:

sudo apt update
sudo apt install nginx

Verifikasi installation dan check bahwa service sedang running:

sudo systemctl status nginx

Anda seharusnya melihat active (running) di output. Jika tidak, start secara manual:

sudo systemctl start nginx
sudo systemctl enable nginx

Domain Names Pointed ke Server Anda

Setiap virtual host memerlukan domain name yang resolves ke server's public IP address Anda. Anda akan perlu membuat A records di DNS settings Anda pointing ke server's IP.

> Butuh domain? Daftarkan milik Anda melalui AlexHost Domain Registration dan manage DNS records langsung dari control panel Anda.

Untuk local testing purposes, Anda dapat bypass DNS entirely dengan editing /etc/hosts file Anda (covered di Step 7).

Required Permissions

Anda akan memerlukan sudo privileges di Ubuntu server Anda untuk create directories, edit configuration files, dan manage Nginx service.

Step 1: Set Up Directories for Each Website

Setiap website yang di-host di server Anda seharusnya memiliki isolated directory sendiri untuk store web files. Separation ini menjaga projects Anda organized dan prevents configuration conflicts.

Di guide ini, kami akan configure dua example domains: example1.com dan example2.com. Replace ini dengan actual domain names Anda throughout.

Create the Web Root Directories

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html

-p flag creates semua intermediate directories sesuai kebutuhan.

Assign Correct Ownership

Grant ownership dari directories ini ke www-data, system user yang Nginx jalankan:

sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/html

Ini memastikan Nginx memiliki necessary read permissions untuk serve files dari directories ini.

Set Directory Permissions

sudo chmod -R 755 /var/www

755 permission berarti owner memiliki full read/write/execute access, sementara groups dan other users memiliki read dan execute access — appropriate untuk publicly served web content.

Step 2: Create Sample HTML Content

Untuk verify bahwa setiap virtual host bekerja dengan benar, create simple index.html file untuk setiap site.

Untuk example1.com

echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.html

Untuk example2.com

echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.html

Placeholder pages ini akan confirm bahwa Nginx sedang routing requests ke correct document root untuk setiap domain.

Step 3: Create Virtual Host Configuration Files

Nginx menyimpan site configuration files di /etc/nginx/sites-available/. Setiap file mendefinisikan server block — Nginx equivalent dari Apache virtual host. Enabled sites kemudian di-symlink ke /etc/nginx/sites-enabled/.

Configuration untuk example1.com

Create new configuration file:

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

Add server block berikut:

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

    server_name example1.com www.example1.com;

    root /var/www/example1.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example1.com.access.log;
    error_log  /var/log/nginx/example1.com.error.log;

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

Save dan close file (Ctrl+X, kemudian Y, kemudian Enter).

Configuration untuk example2.com

Create second configuration file:

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

Add server block berikut:

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

    server_name example2.com www.example2.com;

    root /var/www/example2.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example2.com.access.log;
    error_log  /var/log/nginx/example2.com.error.log;

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

Key Directives Explained

DirectivePurpose
listen 80Listens untuk incoming HTTP connections di port 80
listen [::]:80Enables IPv6 support di port 80
server_nameMendefinisikan domain names mana yang block ini handle
rootSets document root — di mana website files disimpan
indexSpecifies default file untuk serve ketika directory di-request
try_filesAttempts untuk serve requested file; returns 404 jika tidak ditemukan
access_log / error_logSeparate log files per site untuk easier debugging

Step 4: Enable the Virtual Hosts

Nginx mengaktifkan sites dengan membuat symbolic links dari sites-available ke sites-enabled. Design ini memungkinkan Anda untuk prepare configurations tanpa immediately mengaktifkannya.

sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/

Jika Anda ingin prevent Nginx's default placeholder page dari interfering, disable:

sudo rm /etc/nginx/sites-enabled/default

Anda dapat selalu re-enable nanti dengan recreating symlink.

Step 5: Test the Nginx Configuration

Sebelum restart Nginx, selalu validate configuration files Anda untuk syntax errors. Misconfigured file dapat bring down semua sites di server.

sudo nginx -t

Successful test mengembalikan:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Jika Anda melihat errors, Nginx akan indicate file dan line number di mana problem terjadi. Review relevant configuration file dan correct setiap typos atau missing semicolons sebelum melanjutkan.

Step 6: Restart Nginx to Apply Changes

Setelah configuration test passes, reload atau restart Nginx untuk apply changes Anda:

sudo systemctl restart nginx

Alternatively, gunakan reload untuk graceful restart yang tidak interrupt active connections:

sudo systemctl reload nginx

Step 7: Access Your Websites

Jika DNS Sudah Dikonfigurasi

Jika domain names Anda sudah pointing ke server's IP address Anda via DNS A records, simply buka browser dan navigate ke:

  • http://example1.com
  • http://example2.com

Anda seharusnya melihat respective "Welcome" messages yang Anda create di Step 2.

Untuk Local Testing (Without DNS)

Jika Anda testing locally atau DNS belum propagated, Anda dapat simulate domain resolution dengan editing local machine's /etc/hosts file (di Linux/macOS) atau C:WindowsSystem32driversetchosts (di Windows).

Open file dengan elevated privileges:

sudo nano /etc/hosts

Add lines berikut, replacing YOUR_SERVER_IP dengan actual server IP Anda:

YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.com

Save file dan test di browser Anda. Remember untuk remove entries ini setelah real DNS records Anda live.

Menjalankan websites di plain HTTP tidak lagi acceptable untuk production environments. HTTPS mengenkripsi traffic antara server Anda dan visitors, improves SEO rankings, dan required untuk modern browser features. Let's Encrypt menyediakan free, automatically renewable SSL/TLS certificates.

> Prefer premium SSL solution? AlexHost menawarkan trusted SSL Certificates untuk businesses yang memerlukan extended validation atau wildcard coverage.

Install Certbot

sudo apt install certbot python3-certbot-nginx

Obtain dan Install SSL Certificates

Run Certbot untuk setiap domain. --nginx plugin automatically memodifikasi Nginx configuration Anda untuk enable HTTPS:

sudo certbot --nginx -d example1.com -d www.example1.com
sudo certbot --nginx -d example2.com -d www.example2.com

Follow interactive prompts. Certbot akan:

  1. Verify domain ownership via HTTP challenge
  2. Obtain signed certificate dari Let's Encrypt
  3. Automatically update Nginx server block Anda untuk listen di port 443
  4. Configure HTTP-to-HTTPS redirection

Verify Auto-Renewal

Let's Encrypt certificates expire setiap 90 hari. Certbot installs systemd timer untuk handle renewals automatically. Test dengan:

sudo certbot renew --dry-run

Jika dry run completes tanpa errors, certificates Anda akan renew automatically tanpa manual intervention apapun.

What Your Updated Server Block Will Look Like

Setelah Certbot runs, configuration Anda akan automatically diupdate ke something seperti ini:

server {
    listen 443 ssl;
    server_name example1.com www.example1.com;

    root /var/www/example1.com/html;
    index index.html;

    ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

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

server {
    listen 80;
    server_name example1.com www.example1.com;
    return 301 https://$host$request_uri;
}

Troubleshooting Common Issues

Bahkan dengan careful configuration, issues dapat arise. Berikut adalah most common problems dan cara menyelesaikannya:

502 Bad Gateway

Ini typically berarti Nginx tidak dapat communicate dengan backend service (e.g., PHP-FPM atau Node.js app). Verify upstream service sedang running dan bahwa socket/port di configuration Anda correct.

403 Forbidden

Usually permissions issue. Check bahwa www-data owns web root dan bahwa file permissions di-set dengan benar:

sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com

404 Not Found

Verify bahwa root directive di server block Anda points ke correct directory dan bahwa index.html exists di path tersebut.

Wrong Site Loading

Jika visiting example1.com loads example2.com's content, check bahwa:

  • Setiap server_name directive adalah unique dan correct
  • Symlinks di sites-enabled adalah valid: ls -la /etc/nginx/sites-enabled/
  • Default site di-disable jika conflicts

Nginx Fails to Start After Config Change

Selalu run sudo nginx -t sebelum restart. Review error output dengan careful — ini akan point ke exact file dan line yang causing issue.

Checking Logs

Per-site logs (configured di Step 3) adalah best debugging resource Anda:

sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.log

Advanced Considerations

Hosting PHP Applications

Jika sites Anda run PHP (e.g., WordPress, Laravel), Anda akan perlu install PHP-FPM dan add fastcgi_pass directive ke server block Anda:

location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Using a Control Panel

Managing Nginx virtual hosts manually via command line adalah powerful tetapi time-consuming di scale. Jika Anda prefer graphical interface, pertimbangkan AlexHost's VPS with cPanel atau explore full range dari VPS Control Panels untuk find right fit untuk workflow Anda.

Scaling Beyond a Single VPS

Seiring traffic Anda tumbuh, single VPS mungkin tidak sufficient. Untuk high-traffic, resource-intensive workloads, pertimbangkan upgrade ke Dedicated Servers untuk guaranteed resources, full hardware isolation, dan maximum performance.

Conclusion

Anda sekarang telah successfully mengkonfigurasi Nginx virtual hosts di Ubuntu, enabling server Anda untuk host multiple independent websites simultaneously. Berikut adalah summary dari apa yang telah dicapai:

  • Created isolated web root directories untuk setiap domain dengan correct ownership dan permissions
  • Wrote clean, production-ready server block configurations dengan separate access dan error logs
  • Enabled virtual hosts menggunakan Nginx's symlink-based sites-available / sites-enabled pattern
  • Validated dan reloaded Nginx configuration dengan aman
  • Secured setiap site dengan HTTPS menggunakan free Let's Encrypt certificates via Certbot

Setup ini efficient, scalable, dan follows Nginx best practices. Baik Anda hosting dua sites atau dua puluh, pattern yang sama applies — simply repeat process untuk setiap additional domain.

Untuk best results, pair configuration ini dengan fast, reliable hosting environment. AlexHost's VPS Hosting plans dioptimalkan untuk Linux workloads, come dengan full root access, dan backed oleh 24/7 technical support — giving Anda ideal foundation untuk running Nginx di production.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai