CentOS / RHEL

Instalasi Nginx di CentOS / RHEL #

CentOS, RHEL, Rocky Linux, dan AlmaLinux semua menggunakan ekosistem package manager yang sama — yum di versi lama (CentOS 7, RHEL 7) dan dnf di versi baru (CentOS Stream 8+, RHEL 8+, Rocky Linux, AlmaLinux). Perintahnya hampir identik, jadi panduan ini berlaku untuk kesemuanya.

Satu hal yang perlu diketahui: berbeda dari Ubuntu yang biasanya langsung punya Nginx di repository utamanya, di CentOS/RHEL kamu perlu menambahkan repository tambahan terlebih dahulu — entah itu EPEL atau repository resmi Nginx.

EPEL vs Repository Resmi Nginx #

EPEL (Extra Packages for Enterprise Linux) adalah repository komunitas yang menyediakan paket-paket yang tidak ada di repository RHEL resmi. Nginx tersedia di EPEL, tapi biasanya versinya sedikit di belakang versi stable terbaru.

Repository resmi Nginx dari nginx.org menyediakan versi stable atau mainline terbaru, langsung dari tim Nginx.

Untuk production, repository resmi Nginx biasanya lebih disarankan karena kamu tahu persis versi apa yang kamu install dan kapan update tersedia.


Instalasi via EPEL (CentOS 7 / RHEL 7) #

# Install EPEL repository
sudo yum install epel-release -y

# Install Nginx
sudo yum install nginx -y

# Verifikasi
nginx -v

Instalasi via EPEL (CentOS Stream 8+ / Rocky / AlmaLinux) #

# Install EPEL repository
sudo dnf install epel-release -y

# Install Nginx
sudo dnf install nginx -y

# Verifikasi
nginx -v

Instalasi dari Repository Resmi Nginx #

Cara ini memberikan versi stable terbaru dari nginx.org.

# 1. Buat file repository
sudo nano /etc/yum.repos.d/nginx.repo

Isi file dengan konten berikut. Ganti centos dengan rhel jika kamu menggunakan RHEL:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 2. Install Nginx dari repository stable
sudo yum install nginx -y   # CentOS 7 / RHEL 7
# atau
sudo dnf install nginx -y   # CentOS 8+ / Rocky / AlmaLinux

# Verifikasi
nginx -v
# nginx version: nginx/1.24.0

Jika ingin menggunakan mainline branch, enable dulu repositorynya:

# Aktifkan mainline, nonaktifkan stable
sudo yum-config-manager --disable nginx-stable
sudo yum-config-manager --enable nginx-mainline
sudo yum install nginx -y

Memulai dan Mengelola Nginx #

Berbeda dari Ubuntu yang kadang langsung menjalankan Nginx setelah instalasi, di CentOS/RHEL kamu perlu start dan enable secara manual:

# Start Nginx
sudo systemctl start nginx

# Enable agar otomatis start saat boot
sudo systemctl enable nginx

# Cek status
sudo systemctl status nginx
# ● nginx.service - nginx - high performance web server
#    Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
#    Active: active (running) since ...

# Test konfigurasi
sudo nginx -t

# Reload konfigurasi (tanpa downtime)
sudo systemctl reload nginx

# Restart (ada downtime singkat)
sudo systemctl restart nginx

Konfigurasi Firewall dengan firewalld #

CentOS/RHEL menggunakan firewalld sebagai firewall default, bukan UFW seperti Ubuntu. Cara mengelolanya berbeda:

# Cek status firewalld
sudo systemctl status firewalld

# Izinkan HTTP (port 80)
sudo firewall-cmd --permanent --add-service=http

# Izinkan HTTPS (port 443)
sudo firewall-cmd --permanent --add-service=https

# Reload firewall agar perubahan aktif
sudo firewall-cmd --reload

# Verifikasi service yang diizinkan
sudo firewall-cmd --list-services
# dhcpv6-client http https ssh

Jika kamu butuh mengizinkan port custom (misalnya Nginx di port non-standard):

# Izinkan port tertentu
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

SELinux: Hal yang Sering Bikin Bingung #

CentOS/RHEL mengaktifkan SELinux secara default — sebuah sistem kontrol akses mandatory yang sering menjadi sumber kebingungan ketika Nginx tidak bisa mengakses file atau koneksi ke backend.

Gejala umum masalah SELinux dengan Nginx:

# Nginx bisa start tapi tidak bisa akses file → 403 Forbidden
# Nginx bisa start tapi tidak bisa proxy ke backend → 502 Bad Gateway

# Cek apakah SELinux yang jadi masalah:
sudo tail -f /var/log/audit/audit.log | grep nginx
# atau
sudo ausearch -c 'nginx' --raw | audit2allow -M mynginx

Solusi yang benar bukan mematikan SELinux, tapi mengkonfigurasinya dengan tepat:

# Izinkan Nginx membuat koneksi jaringan keluar (untuk proxy)
sudo setsebool -P httpd_can_network_connect 1

# Izinkan Nginx terhubung ke database
sudo setsebool -P httpd_can_network_connect_db 1

# Jika Nginx perlu akses file di direktori custom
# (bukan /var/www/html), set context SELinux yang tepat:
sudo chcon -R -t httpd_sys_content_t /path/to/your/webroot
# atau untuk file yang perlu bisa ditulis Nginx:
sudo chcon -R -t httpd_sys_rw_content_t /path/to/writable/dir
Menjalankan setenforce 0 (menonaktifkan SELinux) atau mengubah mode ke permissive adalah solusi sementara yang populer di tutorial internet, tapi bukan praktik yang baik untuk server production. SELinux ada untuk alasan keamanan yang valid. Luangkan waktu untuk mengkonfigurasinya dengan benar.

Struktur Direktori di CentOS/RHEL #

Sedikit berbeda dari Ubuntu:

/etc/nginx/
├── nginx.conf              # File konfigurasi utama
├── conf.d/                 # Konfigurasi tambahan (*.conf di-include)
│   └── default.conf        # Virtual host default
├── mime.types
├── fastcgi_params
└── scgi_params

/var/log/nginx/
├── access.log
└── error.log

/usr/share/nginx/html/      # Document root default (bukan /var/www/html)
├── index.html
└── 50x.html

/usr/sbin/nginx             # Binary Nginx

Perhatikan perbedaan: document root default di CentOS/RHEL adalah /usr/share/nginx/html/, bukan /var/www/html/ seperti di Ubuntu.


Ringkasan #

  • CentOS/RHEL memerlukan repository tambahan untuk Nginx: EPEL (mudah, versi agak lama) atau repository resmi Nginx (versi terbaru, direkomendasikan).
  • Setelah install, wajib jalankan systemctl start nginx && systemctl enable nginx — tidak otomatis start seperti Ubuntu.
  • firewalld (bukan UFW) untuk firewall: firewall-cmd --permanent --add-service=http kemudian firewall-cmd --reload.
  • SELinux sering jadi penyebab 403/502 yang membingungkan — jangan matikan SELinux, tapi konfigurasikan dengan setsebool dan chcon.
  • Document root default ada di /usr/share/nginx/html/, bukan /var/www/html/.

← Sebelumnya: Ubuntu / Debian   Berikutnya: Docker →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact