GNU/Linux >> Belajar Linux >  >> Ubuntu

Cara Menginstal dan Menggunakan Nginx Proxy Manager dengan Docker

Proxy terbalik adalah server web yang dapat duduk di depan server web atau layanan web lain. Itu dapat mengenkripsi lalu lintas keluar, bertindak sebagai penyeimbang beban, mengarahkan lalu lintas, dan menawarkan perlindungan. Server web Nginx dapat digunakan sebagai server proxy di depan server tradisional, tetapi terkadang pengaturannya bisa membosankan dan menyebabkan masalah jika tidak dilakukan dengan benar.

Nginx Proxy Manager adalah aplikasi yang membuat pengaturan Nginx sebagai server proxy lebih mudah dengan menyediakan antarmuka pengguna grafis (GUI) dengan fitur-fitur seperti dukungan SSL bawaan menggunakan Let's Encrypt, dukungan untuk banyak host, otentikasi HTTP, daftar akses, dan pengguna manajemen.

Tutorial ini akan mengajarkan Anda cara menginstal proxy manager Nginx di server Linux menggunakan Docker. Kami akan membahas semua distribusi Linux populer dalam satu tutorial.

Prasyarat

  • Server Linux yang menjalankan Ubuntu/Debian/CentOS/Alma Linux/Rocky Linux dengan minimal 1 GB RAM.
  • Pengguna non-root dengan hak istimewa sudo.
  • Nama domain yang sepenuhnya memenuhi syarat (FQDN) seperti npm.example.com menunjuk ke server.

Langkah 1 - Konfigurasi Firewall

Cent OS/Rocky Linux/Alma Linux

Anda harus menginstal firewall Firewalld. Periksa status firewall.

$ sudo firewall-cmd --state
running

Buka port 80, 81 dan 443.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=81/tcp

Muat ulang firewall untuk mengaktifkan perubahan.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Sistem Ubuntu dan Debian menggunakan ufw (Uncomplicated Firewall) secara default.

Periksa apakah firewall sedang berjalan.

$ sudo ufw status

Jika sedang berjalan, maka buka port 80, 81 dan 443.

$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443

Buka port SSH jika firewall tidak berjalan.

$ sudo ufw allow "OpenSSH"

Aktifkan firewall jika tidak berjalan.

$ sudo ufw enable

Jika sedang berjalan, muat ulang untuk menerapkan perubahan.

$ sudo ufw reload

Langkah 2 - Instal Docker

Cent OS/Rocky Linux/Alma Linux

Jalankan perintah berikut untuk menginstal Docker.

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Aktifkan dan Mulai layanan Docker.

$ sudo systemctl start docker --now

Tambahkan nama pengguna Anda ke grup Docker.

$ sudo usermod -aG docker $USER

Keluar dari sistem dan masuk kembali untuk menerapkan perubahan.

Langkah 3 - Instal Docker Compose

Unduh dan instal biner penulisan Docker.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Terapkan izin yang dapat dieksekusi ke biner.

$ sudo chmod +x /usr/local/bin/docker-compose

Langkah 4 - Buat File Tulis Docker

Buat direktori untuk pengelola proxy Nginx.

$ mkdir ~/nginx-proxy

Beralih ke direktori.

$ cd ~/nginx-proxy

Buat direktori untuk data pengguna dan sertifikat SSL.

$ mkdir {data,letsencrypt}

Buat dan buka docker-compose.yml file untuk diedit.

$ nano docker-compose.yml

Tempelkan kode berikut di dalamnya.

version: "3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Uncomment the line below if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - npm-db
    networks:
      - npm-nw
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-nw:
    external: true

Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

Mari kita pergi melalui file. Bagian pertama dari file adalah tempat kita mengimpor gambar manajer proxy Nginx dan mengatur beberapa variabel lingkungan dalam bentuk kredensial basis data. Kami juga mengekspos port 80, 81 dan 443 ke server untuk akses. Anda dapat mengekspos lebih banyak port, seperti 21, untuk akses FTP. Anda dapat menonaktifkan dukungan IPV6 dengan menghapus komentar pada baris DISABLE_IPV6: 'true' . Kami telah memetakan beberapa direktori dari host kami ke Docker untuk penyimpanan data dan SQL.

Kami menggunakan dua jaringan di sini. Salah satunya adalah jaringan internal npm-internal untuk menghubungkan manajer proxy dan database. Yang ini opsional karena dibuat secara otomatis. Tapi di sini, kami melakukannya secara manual dengan memberikan nama pilihan kami.

Kami telah menambahkan jaringan eksternal ke wadah pengelola proxy yang disebut npm-nw . Jaringan ini penting karena Anda dapat menggunakannya untuk menghubungkan manajer proxy ke wadah buruh pelabuhan lain yang Anda instal. Menggunakan jaringan akan memungkinkan Anda untuk menghubungkan wadah apa pun secara langsung tanpa perlu mengekspos portnya ke server.

Langkah 5 - Jalankan Nginx Proxy Manager

Sebelum meluncurkan wadah Docker, kita perlu membuat jaringan eksternal npm-nw . Jaringan internal dibuat secara otomatis. Jalankan perintah berikut untuk membuat jaringan eksternal.

$ docker network create npm-nw

Luncurkan Docker Container menggunakan perintah berikut.

$ docker-compose up -d

Periksa status kontainer.

$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED              STATUS              PORTS                                                                                  NAMES
c91ca0ddca97   jc21/nginx-proxy-manager:latest   "/init"                  About a minute ago   Up About a minute   0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   npm-app
1738d71b95da   mariadb:latest                    "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp                                                                               npm-db

Langkah 6 - Akses Pengelola Proxy Nginx

Sekarang Anda dapat mengakses pengelola proxy Nginx Anda melalui URL http://yourserverIP:81 . Anda akan mendapatkan layar login berikut.

Masukkan kredensial default berikut untuk masuk.

Alamat email: [email protected] Sandi: ubah saya

Selanjutnya, Anda akan langsung diminta untuk menetapkan nama dan alamat email.

Klik tombol Simpan tombol, dan Anda akan diminta untuk menyetel kata sandi baru.

Klik tombol Simpan tombol lagi, dan sekarang Anda dapat mulai menggunakan aplikasi.

Jika Anda membuka URL http://yourserverIP di browser Anda, Anda akan dibawa ke halaman default yang telah disetel oleh pengelola proxy.

Langkah 7 - Menyiapkan Nama Domain dan SSL untuk Nginx Proxy Manager

Mari kita atur nama domain untuk mengakses Nginx Proxy Manager. Langkah ini opsional tetapi berguna jika Anda ingin meletakkan aplikasi di belakang SSL.

Klik Host>> Host Proxy dari menu dasbor untuk membuka halaman Host Proxy. Dari sana, klik Tambahkan Host Proxy tombol untuk melanjutkan.

Tambahkan nama FQDN (npm.example.com ) dan klik di atasnya. Masukkan alamat IP Server Anda dan 81 sebagai Forward Port .

Beralih ke tab SSL.

Pilih Minta Sertifikat SSL baru dari menu tarik-turun. Pilih opsi Paksa SSL dan dukungan HTTP/2 . Jika Anda ingin mengaktifkan HSTS, Anda juga dapat mengaktifkannya. Jika domain Anda telah dikonfigurasi melalui Cloudflare, jangan aktifkan opsi Paksa SSL jika tidak, Anda akan terjebak dalam lingkaran pengalihan.

Masukkan alamat email Anda, setujui Persyaratan Layanan (TOS) Let's Encrypt dan klik tombol Simpan tombol untuk menyelesaikan.

Domain Anda harus aktif dan berfungsi. Coba buka https://npm.example.com di browser Anda, dan Anda akan mendapatkan layar login Nginx Proxy Manager.

Anda juga dapat melakukannya untuk halaman arahan default dan menetapkannya ke nama domain seperti https://example.com . Cukup ubah port dari 81 menjadi 81 saat menyiapkan host proxy.

Langkah 8 - Gunakan Nginx Proxy Manager dengan aplikasi web Docker lain

Sekarang kita telah menginstal manajer proxy, sekarang saatnya untuk menggunakannya. Hal pertama yang akan kita lakukan adalah menggunakannya untuk meng-host aplikasi web Docker lainnya. Untuk ini, kita akan menginstal blog Ghost. Jika Anda ingin mempelajari lebih lanjut, lihat tutorial kami tentang menginstal Ghost menggunakan Docker di server Ubuntu.

Buat direktori lain untuk blog Ghost Anda.

$ mkdir ~/ghost

Beralih ke direktori Ghost.

$ cd ~/ghost

Buat dua direktori untuk konten dan database.

$ mkdir {content,mysql}

Bahkan jika Anda menggunakan gambar MySQL yang sama, Anda harus menyimpan data dan wadahnya terpisah dari pengelola Proxy. Ini akan membantu mengisolasi masalah apa pun yang mungkin Anda hadapi dan memungkinkan Anda memindahkan barang jika perlu.

Buat dan buka file penulisan Docker untuk diedit.

$ nano docker-compose.yml

Tempelkan kode berikut. Ganti example.com dengan nama domain Anda yang sebenarnya untuk blog Ghost Anda. Masukkan detail SMTP jika Anda ingin menerima email. Anda dapat menghapusnya jika tidak membutuhkannya.

version: '3.3'
services:

  ghost-app:
    image: ghost:latest
    container_name: ghost-app
    restart: always
    depends_on:
      - ghost-db
    environment:
      url: https://ghost.example.com
      database__client: mysql
      database__connection__host: ghost-db
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
      mail__transport: SMTP
      mail__options__host: {Your Mail Service host}
      mail__options__port: {Your Mail Service port}
      mail__options__secureConnection: {true/false}
      mail__options__service: {Your Mail Service}
      mail__options__auth__user: {Your User Name}
      mail__options__auth__pass: {Your Password}
    volumes:
      - /home/<username>/ghost/content:/var/lib/ghost/content
    networks:
      - npm-nw
      - ghost-network

  ghost-db:
    image: mariadb:latest
    container_name: ghost-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    volumes:
      - /home/<username>/ghost/mysql:/var/lib/mysql
    networks:
      - ghost-network

networks:
  ghost-network:
  npm-nw: 
    external: true

Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

Seperti yang Anda lihat, kami telah menghubungkan wadah Ghost dengan manajer proxy Nginx menggunakan jaringan eksternal npm-nw . Dengan cara ini, kami tidak mengekspos port Ghost ke sistem. Kami juga telah menggunakan jaringan internal ghost-network untuk menghubungkan aplikasi Ghost kami dan wadah basis data yang sesuai.

Mulai penampung.

$ docker-compose up -d

Konfigurasi Ghost di Nginx Proxy Manager

Sekarang, kita perlu mengatur proxy terbalik untuk instalasi Ghost kita. Buka Nginx Proxy manager di browser Anda, buka Dasbor>> Hosts>> Proxy Host , dan tambahkan Host Proksi baru.

Tambahkan nama domain yang Anda pilih untuk blog Ghost Anda. Untuk Nama Inang/IP value, masukkan nama container Anda. Dalam hal ini, itu akan menjadi ghost-app . Kami tidak dapat menambahkan alamat IP di sini karena kami belum membuka port Ghost ke server, dan proxy Nginx tidak akan dapat menjangkau Ghost melalui IP. Oleh karena itu, kami menggunakan nama wadah, yang dapat diakses NPM menggunakan jaringan Docker npm-nw , yang kami buat. Gunakan 2368 sebagai port, port default yang digunakan oleh Ghost Blog. Periksa opsi lain seperti yang ditunjukkan pada tangkapan layar di atas.

Selanjutnya, alihkan ke tab SSL dan buat sertifikat SSL baru mengikuti langkah 6. Karena Anda akan mengunggah konten ke blog Ghost Anda, menyetel ukuran unggahan maksimum untuk unggahan Anda akan lebih baik.

Untungnya, NPM memungkinkan Anda untuk menambahkan konfigurasi khusus. Beralih ke Lanjutan tab dan masukkan client_max_body_size 50m; di dalam kotak.

Klik tombol Simpan tombol untuk menyelesaikan penambahan host proxy. Anda seharusnya dapat mengakses blog Ghost Anda melalui URL https://ghost.exampl.com

Langkah 9 - Gunakan Nginx Proxy Manager sebagai layanan pengalihan

Mari kita lihat bagaimana Anda dapat menggunakan NPM untuk mengalihkan satu domain ke domain lain dengan mudah. Untuk melakukannya, kunjungi Dasbor>> Host>> Redirection Hosts . Dari sana, klik Tambahkan Redirection Host tombol untuk memulai.

Masukkan nama domain yang ingin Anda teruskan. Dan masukkan domain penerusan. Domain penerusan harus sudah dikonfigurasi. Biarkan skema sebagai otomatis. Tergantung pada kebutuhan Anda, Anda dapat memilih http atau https . Pilih Kode HTTP yang benar dan centang Pertahankan Jalur dan Blokir Eksploitasi Umum pilihan. Jika Anda menggunakan skema otomatis atau https, pastikan Anda telah memilih atau membuat sertifikat SSL menggunakan NPM. Klik Simpan untuk menyelesaikan penambahan host pengalihan Anda.

Domain Anda example.com harus mulai mengarahkan ulang ke blog.example.com .

Kegunaan lain dari Nginx Proxy Manager

Ada dua cara lain di mana Anda dapat menggunakan Nginx Proxy Manager. Anda dapat menggunakannya sebagai host 404, yang berarti Anda dapat menggunakan domain sebagai halaman arahan untuk menunjukkan kepada mesin pencari bahwa halaman domain tidak ada. Langkahnya termasuk memasukkan domain dan menyiapkan SSL untuknya. Anda juga dapat menggunakan ini sebagai kesempatan untuk melacak log untuk nama domain dan melihat lalu lintas perujuk.

Fitur lainnya adalah menggunakan NPM sebagai host streaming. Anda dapat menggunakan fitur ini untuk meneruskan port TCP/UDP ke komputer lain di jaringan. Ini berguna jika Anda menghosting server game. Anda hanya perlu memasukkan port masuk, domain penerusan atau alamat IP, port penerusan, dan pilih jenis port.

Gunakan Nginx Proxy Manager untuk meng-host situs web statis

Nginx Proxy Manager dapat meng-host situs web statis atau dinamis sederhana juga. Untuk melakukannya, tambahkan host proxy baru dan pilih 127.0.0.1 sebagai Teruskan domain dan 80 sebagai port .

Di bawah Lanjutan tab, masukkan konfigurasi yang menentukan direktori root. Pastikan direktori root untuk situs dipasang di konfigurasi awal penulisan Docker. Di sini kita menggunakan /data/static direktori untuk meng-host situs web statis kami.

Klik Simpan untuk menyelesaikan, dan situs Anda harus dapat diakses. Anda juga dapat menghosting semua jenis situs menggunakan pengelola proxy.

Langkah 10 - Fitur Lain-lain

Gunakan Fitur Kontrol Akses Pengelola Proxy Nginx

Anda dapat menggunakan fitur Daftar Akses NPM untuk mengaktifkan otentikasi HTTP atau memblokir rentang IP. Buka NPM dan kunjungi Dasbor>> Daftar Akses halaman.

Klik Tambahkan Daftar Akses tombol untuk memulai.

Anda dapat memberi nama konfigurasi Access List(ACL) Anda. Memuaskan Semua tab, jika dicentang, akan mengizinkan akses jika klien memenuhi salah satu dari kondisi yang ditentukan. Jika klien melewati otentikasi HTTP tetapi mungkin gagal dalam akses berbasis IP, itu akan diizinkan. Tetapi jika Memuaskan Setiap opsi tidak dicentang, klien harus memenuhi semua persyaratan.

Meneruskan Otentikasi ke Host fitur akan meneruskan fitur otentikasi ke server host.

Selanjutnya, alihkan ke Otorisasi tab. Di sini Anda dapat membuat nama pengguna dan kata sandi untuk metode otentikasi HTTP. Untuk menambahkan lebih dari satu pengguna, klik Tambah tombol. Anda hanya dapat menambahkan hingga 5 pengguna. Dan ada bug dengan tombol Tambah jadi gunakan tombol itu terlebih dahulu lalu isi detailnya. Jika Anda mengisi detail dan mengklik tombol nanti untuk menambahkan pengguna lain, itu akan menghapus data pengguna sebelumnya.

Beralih ke Akses tab. Di sini Anda dapat mengatur alamat IP mana yang akan diberikan atau ditolak aksesnya.

Klik Simpan untuk menyelesaikan.

Untuk menggunakan daftar Access ini, Anda harus memilihnya saat menambahkan host proxy Anda. Seperti pada contoh untuk Blog Hantu di bawah ini, kami telah memilih Daftar akses kami.

Aktifkan Dukungan untuk nama domain lainnya

Seiring bertambahnya jumlah host dan domain, Nginx Anda mungkin kehabisan ruang hash atau dapat mengalami masalah memori. Kami dapat menambahkan konfigurasi khusus yang akan diterapkan ke semua host untuk mengatasi masalah ini.

Untuk melakukannya, buat direktori kustom di dalam ~/nginx-proxy/data/nginx .

$ sudo mkdir ~/nginx-proxy/data/nginx/custom

Buat dan buka file http.conf di dalam direktori ini.

$ sudo nano ~/nginx-proxy/data/nginx/custom/http.conf

Rekatkan baris berikut di dalamnya.

proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;

Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

Nginx harus secara otomatis menerima nilai-nilai ini. Jika tidak, Anda dapat memulai ulang wadah NPM menggunakan perintah berikut.

$ docker restart npm-app

Mengalihkan Halaman Arahan Default

Pada langkah 6, Anda melihat halaman default saat Anda mengetikkan URL http://<yourserverIP> . Jika Anda ingin mengubahnya, itu mungkin dilakukan. Untuk melakukannya, kunjungi Halaman Setelan . Klik tiga titik di sisi kanan dan klik tombol Edit tombol.

Anda dapat menyetel halaman arahan untuk bertindak sebagai halaman 404, halaman pengalihan, atau menambahkan HTML kustom ke dalamnya dengan menggunakan opsi Halaman Kustom . Jika Anda memilih Alihkan , Anda harus menentukan URL target.

Ini adalah HTML khusus yang kami gunakan untuk tujuan kami.

<!doctype html>
<html>
  <head>
    <title>Nothing Here</title>
    <meta charset="utf-8"/>
    <meta name="robots" content="noindex"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
      body { 
          text-align: center; 
          padding: 20px; 
          font: 20px Helvetica, sans-serif; 
          color: #333; 
        }
      @media (min-width: 768px){
          body{ padding-top: 150px; 
        }
      }
      h1 { 
          font-size: 50px; 
        }
      article { 
          display: block; 
          text-align: left; 
          max-width: 650px; 
          margin: 0 auto; 
        }
    </style>
  </head>
  <body>
    <article>
        <h1>Oops!</h1>
        <div>
            <p>Sorry for the inconvenience but you are not supposed to be here. You won't get anything here. This page was set for HowtoForge Nginx Proxy Manager Guide.  Maybe, someday it will show something.</p>
        </div>
    </article>
  </body>
</html>

Klik Simpan menyelesaikan. Laman landas Anda harus diubah menjadi seperti di bawah ini.

Langkah 11 - Perbarui Nginx Proxy Manager

Untuk memperbarui NPM, pertama-tama hentikan container.

$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans

Tarik gambar terbaru.

$ docker-compose pull

Mulai container lagi.

$ docker-compose up -d

Kesimpulan

Ini mengakhiri tutorial kami di mana Anda menginstal Nginx Proxy Manager dan mempelajari cara menggunakannya untuk menambahkan host proxy untuk wadah buruh pelabuhan lain, menggunakannya sebagai layanan pengalihan, dan mengontrol akses menggunakannya. Jika Anda memiliki pertanyaan, kirimkan di komentar di bawah.


Ubuntu
  1. Cara Mengatur &Menggunakan NGINX sebagai Proxy Terbalik

  2. Cara Menginstal dan Mengkonfigurasi Nginx di CentOS 8

  3. Cara Menginstal dan Menggunakan Docker di Ubuntu 20.04

  1. Cara Menginstal dan Menggunakan Docker di Ubuntu 20.04

  2. Cara Menginstal dan Mengkonfigurasi Nginx di Ubuntu 20.04

  3. Cara Menginstal dan Menggunakan Docker di Ubuntu 18.04

  1. Cara Menginstal dan Menggunakan Docker Compose di Ubuntu 18.04

  2. Cara Menginstal dan Menggunakan Docker di CentOS 7

  3. Cara Menginstal dan Menggunakan Docker di Debian 9