[Tutorial] Nginx dual-stack (IPv4 dan IPv6)


Status
Not open for further replies.

Momon

Beginner 2.0
Tutorial sederhana, semoga berguna. Dapat jatah IPv6 dari provider tapi gak dipake :)

Sebagai pembuka, tutorial ini bertujuan agar nama domain (virtualhost level, bukan default_server) bisa diakses melalui IPv4 (shared) dan IPv6 (dedicated). Ada yg bilang juga dg dedicated IPv6 (untuk mengakali IPv4 yg kadang agak sulit mendapatkannya) bagus buat SEO. Tapi saya kurang tau juga, silahkan dibuktikan :)

Sebelumnya, di tutorial ini saya menggunakan debian. Distro lain silahkan menyesuaikan.

Pertama, kita cek apakah instalasi nginx kita support IPv6 dg perintah:
Dari output perintah tadi, kemudian kita cari text seperti ini:
--with-ipv6
Kalo ada bisa lanjut ke step berikutnya. Kalo gak ada berarti kita harus compile lagi nginx biar support IPv6 (bisa cari di internet).

Kedua, kita edit nama domain config kita. Bisa diganti atau ditambah dengan:
server {
server_name namadomain.com;
listen 80;
listen [ipv6 kamu]:80;
#rule lainnya
}

Ketiga, kita restart nginx
service nginx restart

Keempat, kita tambahkan AAAA record pada domain kita dengan IPv6 tadi.

Terakhir, kita cek apa semuanya udah mulus
wget http://[ipv6 kamu]; cat index.html

Kalo muncul tampilan yg sama (mirip) halaman web kita, berarti semuanya udah mulus. Kalo beda berarti ada yg salah :)

Semoga berguna :)
 

erawanarifn

Apprentice 2.0
Tutorial yang bagus :)

Tadi untuk satu domain di dalam satu server, dulu saya pakai seperti itu untuk hosting satu domain. Jadi request ke IPv6 utama akan membuka domain tersebut.

Nah misalnya di satu server mau dipakai untuk host banyak domain, tinggal ditambahkan konfigurasi seperti ini, misalnya /etc/nginx/hosts.d/domain.conf:

Code:
server {
    listen 80;
    listen [::]:80;
    server_name erawanarifnugroho.com;
    rewrite ^/(.*) http://www.erawanarifnugroho.com/$1 permanent;
}

server {
    listen 80;
    listen [::]:80;
    server_name www.erawanarifnugroho.com;

    access_log off;
    error_log /home/http/logs/erawanarifnugroho.com.log;
    index index.html index.php;
    root /home/http/hosts/erawanarifnugroho.com;

}

Sedangkan untuk /etc/nginx/hosts.d/default.conf adalah seperti berikut :
Code:
server {
    listen 80 default_server;
    listen [::]:80 default ipv6only=on;
    server_name localhost;

    access_log off;
    error_log /var/log/nginx/error.log;
    index index.html index.php;
    root /usr/share/nginx/html;

    include /etc/nginx/conf.d/cache.conf;
    include /etc/nginx/conf.d/deny.conf;
    include /etc/nginx/php.d/www-data.conf;
}
 

Momon

Beginner 2.0
Makasih pak :)

Memang tutorial yg ada di internet seperti yg bapak tulis. Tapi saya sudah menggunakan rule persis diatas 2 kali tapi gagal. Beberapa menit lalu saya coba lagi untuk memastikan dan ternyata masih gagal.

Gagalnya kenapa? Ketika saya tes menggunakan
yg muncul adalah halaman web default_server, bukan halaman web nama domain.
 

erawanarifn

Apprentice 2.0
Kalau yang muncul adalah halaman default, berarti yang terbaca sama Nginx adalah konfigurasi yang ini :

Code:
listen [::]:80 default ipv6only=on;

Sudah coba restart Nginx dan Php?
 

Momon

Beginner 2.0
Sudah pak. Mungkin bapak bisa konfirmasi config yg bapak kasih diatas work? Jujur saya masih penasaran kenapa config diatas saya ikuti gak work.
 

erawanarifn

Apprentice 2.0
Konfigurasi diatas adalah konfigurasi yang saya pakai untuk blog saya. Kalau langsung diakses IPv6nya, akan muncul halaman default Nginx, tapi kalau situs saya diakses pakai IPv6 akan muncul blog saya. Semua VPS yang saya pakai sudah support IPv6, dan semua situs yang saya punya, sudah punya record AAAA juga :)

Bisa coba akses ke alamat IPv6 ini?
Code:
http://[2a00:dcc0:eda:98:183:193:6ba4:b31f]

Dan bandingkan jika membuka blog saya, www.erawanarifnugroho.com
 

erawanarifn

Apprentice 2.0
Ini contohnya

Code:
~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3e:c8:30:21
          inet addr:193.183.xxx.xxx  Bcast:193.183.xxx.xxx  Mask:255.255.254.0
          inet6 addr: 2a00:dcc0:eda:98:183:193:6ba4:b31f/64 Scope:Global
          inet6 addr: 2a00:dcc0:eda:98:183:193:9e7f:b90b/128 Scope:Global
          inet6 addr: fe80::216:3eff:fec8:3021/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:732155642 errors:0 dropped:0 overruns:0 frame:0
          TX packets:100772570 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2673469080 (2.4 GiB)  TX bytes:1348083237 (1.2 GiB)
          Interrupt:12

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:43030206 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43030206 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2968867445 (2.7 GiB)  TX bytes:2968867445 (2.7 GiB)
 

Momon

Beginner 2.0
Dari 2 IPv6 diatas semuanya redirect 301 ke www.erawanarifnugroho.com. Mungkin ada spesial rule yg mas gunakan? Saya udah dig domain mas dan cuma punya 1 AAAA record. Menarik bagaimana nginx menentukan doc root dari kedua IPv6 diatas?
 

erawanarifn

Apprentice 2.0
Ya itu mas, itu semua contoh konfigurasi untuk Nginx saya :

Code:
/etc/nginx/hosts.d/domain.conf
/etc/nginx/hosts.d/default.conf

Saya bisa host banyak domain di dalam satu vps memakai Nginx dan IPv4/IPv6. Karena semua request yang dihandle oleh Nginx akan diarahkan sesuai file konfigurasi tadi.

Misalnya satu website mempergunakan 1 IPv6, tinggal diset saja AAAA Domain ke masing-masing IPv6.
Code:
2a00:dcc0:eda:98:183:193:6ba4:b31f www.domaina.com
2a00:dcc0:eda:98:183:193:6ba4:baaa www.domainb.com

Begitu Nginx menerima request, semuanya akan diarahkan ke halaman root masing-masing websitenya.
Misalnya pengunjung mengakses IPv6nya secara langsung, maka hanya akan saya tampilkan halaman default Nginx memakai konfigurasi ini :
Code:
server {
    listen 80 default_server;
    listen [::]:80 default ipv6only=on;
    server_name localhost;

    index index.html index.php;
    root /usr/share/nginx/html;

}

Tapi begitu requestnya melalui domain, maka Nginx akan membaca konfigurasi ini misalnya :
Code:
server {
    listen 80;
    listen [::]:80;
    server_name erawanarifnugroho.com;
    rewrite ^/(.*) http://www.erawanarifnugroho.com/$1 permanent;
}

server {
    listen 80;
    listen [::]:80;
    server_name www.erawanarifnugroho.com;

    access_log off;
    error_log /home/http/logs/erawanarifnugroho.com.log;
    index index.html index.php;
    root /home/http/hosts/erawanarifnugroho.com;

}

Perbedaannya disini :
Code:
listen 80 default_server;
    listen [::]:80 default ipv6only=on;
    server_name localhost;
...

listen 80;
    listen [::]:80;
    server_name erawanarifnugroho.com;
 
Status
Not open for further replies.

Top