Jika kamu sudah terbiasa memakai aapanel, pasti kamu sadar kalau kamu tidak bisa memilih versi nginx yang terbaru. Memang, di saat instalasi kita bisa memilih untuk compiled dan bukan yang fast. Namun, hal itu hanya untuk menambahkan modul-modul yang tidak langsung ada di nginx atau disebut external module.

Sampai saat sebelum menulis artikel ini, saya juga bingung bagaimana caranya bisa menggunakan nginx versi terbaru dengan protokol quic dan http3. Namun, akhirnya setelah banyak mencoba dan banyak gagal, bisa juga build nginx dengan brotli + quic|http3.

Berikut adalah buktinya (Jangan dikira inspect element) haha…

catatan: disaat artikel ini rilis, versi terbaru default yang ada di aapanel adalah v1.24

Build Custom NginX 1.25 + Brotli + QuicTLS Support Quic/HTTP3 di AaPanel Dengan Mudah - gambar

Terus bagaimana caranya? mudah saja,. silahkan ikuti langkah-langkah berikut..

Persiapan build custom nginx + brotli + quic

Sebelum memulai instalasinya, kalian persiapkan dulu bahan-bahan yang akan dipakai. Bahan-bahan seperti ngx_brotli, quicTLS dan lainnya.

Build Brotli untuk Nginx

Pertama, kita akan build brotli terlebih dahulu, agar nantinya kita tinggal masukkan ke konfig nginxnya. Pertama-tama, kalian pastikan sudah menginstall git, selanjutnya pastikan juga kalian memiliki cmake versi terbaru. Disini, saya menyarankan memakai cmake versi 3.27.x.

Kita buat dulu sebuah directory untuk menyimpan modul-modul tambahan.

mkdir /www/server/custom

Selanjutnya, kita bisa build ngx_brotlinya :

git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli
cd ngx_brotli/deps/brotli
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..
cmake --build . --config Release --target brotlienc
cd ../../../..

Jika kalian menemui error seperti berikut:

/bin/ranlib: libbrotlienc.a(entropy_encode.c.o): plugin needed to handle lto object

Kalian bisa ikuti langkah ini untuk mengatasinya:

Pertama, kalian buka dan edit file berikut:

/www/server/custom/ngx_brotli/deps/brotli/out/CMakeFiles/<versi-cmake>/CMakeCCompiler.cmake
# ganti <versi-cmake> dengan versi cmake kalian.

Selanjutnya ubah ar ke gcc-ar, ranlib ke gcc-ranlib di sekitar line 24-26 seperti berikut:

// Sebelum
set(CMAKE_AR "/usr/bin/ar")
set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-11")
set(CMAKE_RANLIB "/usr/bin/ranlib")

// Sesudah
set(CMAKE_AR "/usr/bin/gcc-ar")
set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-11")
set(CMAKE_RANLIB "/usr/bin/gcc-ranlib")

Setelah itu, kalian bisa jalankan perintah berikut untuk melanjutkan buildnya:

cmake --build . --config Release --target brotlienc
cd ../../../..

Seharusnya tidak terjadi error dan berikut seharusnya menjadi line terakhir dari eksekusi perintah tersebut:

[100%] Linking C static library libbrotlienc.a
[100%] Built target brotlienc

Jika sudah seperti itu, maka kalian sudah selesai untuk mengatur brotli. Selanjutnya, kita akan mengatur QuicTLS agar nginx bisa menggunakan http3 dan quic.

Download QuicTLS untuk http3+quic

Untuk langkah ini sangat sederhana, kalian tinggal download dan letakkan filenya di folder custom yang kita buat tadi. Kalian bisa ikuti atau masukkan perintah berikut di terminal:

cd /www/server/custom

# versi terbaru saat artikel ini dibuat 3.1.4-quic1
wget -O quictls.zip https://github.com/quictls/openssl/archive/refs/tags/openssl-3.1.4-quic1.zip
unzip quictls.zip

# rename folder hasil unzipnya. Saat artikel ini dibuat, berikut adalah commandnya
mv openssl-openssl-3.1.4-quic1 openssl

Selesai untuk download quictls, selanjutnya adalah menambahkan lua-nginx-module yang digunakan oleh aapanel.

Download Lua-nginx-module

Kalian bisa mendownload manual atau menggunakan curl/wget seperti berikut:

cd /www/server/custom
wget https://github.com/openresty/lua-nginx-module/archive/refs/tags/v0.10.25.tar.gz
tar -xzvf v0.10.25.tar.gz

# rename folder hasil ekstrak
mv lua-nginx-module-0.10.25 lua-nginx-module

Setelah itu, kalian bisa bersiap untuk langkah selanjutnya yaitu mengubah script instalasi nginx.

Mengubah Script Instalasi Nginx dari AaPanel

Pertama-tama, kalian bisa menggunakan appstore dari aapanel untuk mendapatkan scriptnya, kalian tinggal klik install, pilih compiled dan tunggu sampai download nginx.sh. Kalian bisa membatalkan saja instalasinya dengan membuka panel proses dan klik del pada prosesnya. Contohnya klik saja Del yang ada disamping installing:

Build Custom NginX 1.25 + Brotli + QuicTLS Support Quic/HTTP3 di AaPanel Dengan Mudah - gambar 1

Kemudian kalian buka folder /www/server/panel/install:

cd /www/server/panel/install

# pastikan kalian memiliki script nginx.sh di dalamnya, jika tidak kalian bisa ulangi langkah diatas tadi.
# buka nginx.sh menggunakan nano atau vi atau teks editor yang kalian inginkan, bisa juga dibuka melalui panelnya langsung.
$ nano nginx.sh

Kemudian ubah sesuai seperti ini:

Mengubah konfigurasi script install

Ubah versi Nginx

Kalian bisa mengubah versi nginx yang akan di install seperti berikut:

# temukan kode berikut
nginx_124='1.24.0'

# ubah sesuai versi yang kalian inginkan, disini saya menggunakan versi 1.25.3
nginx_124='1.25.3'

Kemudian di line 186:

# temukan kode seperti berikut
wget -O ${Setup_Path}/src.tar.gz ${download_Url}/src/nginx-${nginxVersion}.tar.gz -T20

# ubah menjadi
wget -O ${Setup_Path}/src.tar.gz https://nginx.org/download/nginx-${nginxVersion}.tar.gz -T20

Komentari script untuk download openssl

Selanjutnya, kalian bisa komentari seluruh line berikut agar tidak mendownload openssl default. Dari line 194 – 213.

    # if [ -z "${GMSSL}" ]; then
    #     TLSv13_NGINX=$(echo ${nginxVersion} | tr -d '.' | cut -c 1-3)
    #     if [ "${TLSv13_NGINX}" -ge "115" ] && [ "${TLSv13_NGINX}" != "181" ]; then
    #         opensslVer="1.1.1q"
    #     else
    #         opensslVer="1.0.2u"
    #     fi
    #     # if [ "$version" == "1.23" ];then
    #     #     opensslVer="3.0.5"
    #     # fi
    #     wget -O openssl.tar.gz https://github.com/quictls/openssl/archive/refs/tags/openssl-3.1.4-quic1.zip
    #     tar -xvf openssl.tar.gz
    #     mv openssl-${opensslVer} openssl
    #     rm -f openssl.tar.gz
    # else
    #     wget -O GmSSL-master.zip ${download_Url}/src/GmSSL-master.zip
    #     unzip GmSSL-master.zip
    #     mv GmSSL-master openssl
    #     rm -f GmSSL-master.zip
    # fi

Tambahkan lua-nginx-module

Selanjutnya, kalian bisa ubah line 300 seperti berikut:

# sebelum
ENABLE_LUA="--add-module=${Setup_Path}/src/ngx_devel_kit --add-module=${Setup_Path}/src/lua_nginx_module"

# sesudah
ENABLE_LUA="--add-module=${Setup_Path}/src/ngx_devel_kit --add-module=/www/server/custom/lua-nginx-module"

Ubah script ./configure nginx

kalian bisa menemukannya pada line 336. Tambahkan –add-module=/www/server/custom/ngx_brotli untuk brotli, dan ubah –with-openssl=${Setup_Path}/src/openssl menjadi –with-openssl=/www/server/custom/openssl, tambahkan juga –with-http_v3_module untuk http3/quic seperti berikut:

    ./configure --user=www --group=www --prefix=${Setup_Path} ${ENABLE_LUA} --add-module=${Setup_Path}/src/ngx_cache_purge --add-module=/www/server/custom/ngx_brotli ${ENABLE_STICKY} --with-openssl=/www/server/custom/openssl --with-pcre=pcre-${pcre_version} ${ENABLE_HTTP2} --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_v3_module --with-http_xslt_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --add-module=${Setup_Path}/src/ngx_http_substitutions_filter_module-master --with-ld-opt="-Wl,-E" --with-cc-opt="-Wno-error" ${jemallocLD} ${ENABLE_WEBDAV} ${ENABLE_NGX_PAGESPEED} ${ADD_EXTENSION} ${i_make_args}

Kemudian hapus dan ganti line 379 – 391 dari:

    if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ];then
        wget -c -O lua-resty-core-0.1.26.zip ${download_Url}/src/lua-resty-core-0.1.26.zip
        unzip lua-resty-core-0.1.26.zip
        cd lua-resty-core-0.1.26
        make install PREFIX=/www/server/nginx
        cd ..
        rm -rf lua-resty-core-0.1.26*

        wget -c -O lua-resty-lrucache-0.13.zip ${download_Url}/src/lua-resty-lrucache-0.13.zip
        unzip lua-resty-lrucache-0.13.zip
        cd lua-resty-lrucache-0.13
        make install PREFIX=/www/server/nginx
        cd ..
        rm -rf lua-resty-core-0.1.26*

    fi

menjadi:

    if [ "${version}" == "1.23" ] || [ "${version}" == "1.24" ] || [ "${version}" == "tengine" ];then
        wget -c -O lua-resty-core-0.1.27.zip https://github.com/openresty/lua-resty-core/archive/refs/tags/v0.1.27.zip
        unzip lua-resty-core-0.1.27.zip
        cd lua-resty-core-0.1.27
        make install PREFIX=/www/server/nginx
        cd ..
        rm -rf lua-resty-core-0.1.27*

        wget -c -O lua-resty-lrucache-0.13.zip ${download_Url}/src/lua-resty-lrucache-0.13.zip
        unzip lua-resty-lrucache-0.13.zip
        cd lua-resty-lrucache-0.13
        make install PREFIX=/www/server/nginx
        cd ..
        rm -rf lua-resty-core-0.1.27*

    fi

Setelah kalian selesai melakukannya, maka kita juga selesai mengubah scriptnya. Selanjutnya adalah menjalankan script instalasi tersebut.

Menjalankan Script Custom Install Nginx di AaPanel

Untuk menjalankan script ini sangat mudah, kalian bisa langsung ketikkan perintah berikut di folder /www/server/panel/install:

#Jangan copy tanda $ juga.
$ bash nginx.sh install 1.24

Biarkan script berjalan, jika kalian melakukan langkah-langkah di atas dengan benar. Seharusnya instalasi kalian akan berhasil. Setelah selesai dan nginx sudah berjalan, kalian bisa cek di appstore-nya apakah sudah terinstall atau belum.

Konfigurasi nginx.conf

Untuk menggunakan brotli dan quic/http3 kalian harus menambahkan beberapa kode pada konfigurasi nginx.

Kalian bisa menggunakan GUI aapanel atau menggunakan command line. Tambahkan kode berikut untuk menggunakan brotli:

# Enable Brotli
        brotli            on;
        brotli_static     on;
        brotli_comp_level 6;
        # File types to compress
        brotli_types application/atom+xml application/javascript application/json application/rss+xml
                     application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
                     application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
                     font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
                     image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;

Selanjutnya, jika kalian sudah memiliki situs di vps kalian, atau membuat situs baru, maka kalian harus menambahkan kode berikut di blok server file config kalian.

server
{
    listen 80;
# directive reuseport cukup satu kali declare entah di config situs manapun
    listen 443 quic reuseport;
    listen 443 ssl;
    listen [::]:80;
    listen [::]:443 quic reuseport;
    listen [::]:443 ssl;

    #... konfigurasi ssl dan lain-lain

    # untuk http3 dan quic
    ssl_early_data on;
    quic_retry on;
    http2 on;
    
    # header memberitahu browser port quic kita
    add_header alt-svc 'h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400';

    #... konfigurasi lainnya
}

Buka Port 443

Selanjutnya, kalian pergi ke tab security di panelnya. Jika dipanel kalian sudah ada port 443, kalian bisa ubah port tersebut dari hanya TCP ke TCP/UDP (UDP untuk quic) seperti berikut:

Build Custom NginX 1.25 + Brotli + QuicTLS Support Quic/HTTP3 di AaPanel Dengan Mudah - gambar 2

Setelah semuanya selesai, restart nginx server kalian lewat panel dan coba test. Untuk pengetesan, kalian bisa menggunakan curl ( yang sudah support quic dan http3 ) atau gunakan layanan tes dari http3check, atau kalian bisa menggunakan chrome canary untuk testing.

Disini saya mencobanya dengan litespeed check:

hasil dari http3check:

Build Custom NginX 1.25 + Brotli + QuicTLS Support Quic/HTTP3 di AaPanel Dengan Mudah - gambar 3

Jika kalian memiliki hasil seperti gambar diatas, maka kalian sudah berhasil untuk mengaktifkan quic/http3 dan brotli.

Kesimpulan

Menggunakan atau menginstall sebuah software yang tidak didukung resmi oleh panel memang beresiko. Seperti halnya nginx di AaPanel, disini kita menginstall versi 1.25.3 sedangkan versi dari aapanel terbaru adalah 1.24.

Kita juga bisa menambahkan atau mengubah script instalasi sesuai keinginan kita, seperti menambahkan brotli dan quic/http3. Selain itu, kita juga bisa menambahkan apa yang tidak ada di script atau tidak mau jalan saat menggunakan script asli aapanel.

Jika kalian menemukan kesulitan, atau menemukan kesalahan dalam artikel ini, silahkan komentar dibawah dan saya akan membantu atau memperbaiki artikel ini.

Terimakasih telah berkunjung di hadezuka.dev

Referensi:

  1. https://github.com/google/ngx_brotli
  2. https://github.com/google/ngx_brotli/issues/159
  3. https://github.com/quictls/openssl
  4. https://github.com/openresty/lua-nginx-module
  5. https://github.com/openresty/luajit2

About the Author

Dzul Qurnain

Suka nonton Anime, ngoding dan bagi-bagi tips kalau tahu.. Oh iya, suka baca ( tapi yang menarik menurutku aja)...

View All Articles