Menggunakan Cloudflare sebagai reverse proxy di depan Nginx dan Apache memerlukan penyesuaian tambahan karena Cloudflare bertindak sebagai proxy pertama yang menerima permintaan klien. Cloudflare juga dapat menambahkan header seperti CF-Visitor
atau X-Forwarded-Proto
untuk menyampaikan informasi protokol asli (HTTP/HTTPS) ke Nginx.
Berikut adalah langkah-langkah implementasinya:
1. Konfigurasi Cloudflare
Cloudflare otomatis menambahkan header X-Forwarded-Proto
untuk menunjukkan apakah permintaan dari klien menggunakan HTTP atau HTTPS.
Header yang Ditambahkan Cloudflare:
X-Forwarded-Proto
: Berisi nilaihttp
atauhttps
.CF-Visitor
: Berisi JSON yang mengindikasikan protokol asli. Contoh:jsonCopy code{"scheme":"https"}
Tidak ada konfigurasi khusus di sisi Cloudflare, header ini ditambahkan secara otomatis.
2. Konfigurasi Nginx untuk Menerima Header dari Cloudflare
Nginx, sebagai reverse proxy kedua, perlu membaca header yang ditambahkan oleh Cloudflare dan meneruskan informasi tersebut ke Apache.
Contoh Konfigurasi Nginx:
nginxCopy codeserver {
listen 80;
server_name your-domain.com;
location / {
# Meneruskan permintaan ke Apache
proxy_pass http://127.0.0.1:8080;
# Meneruskan informasi dari Cloudflare
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; # Dari Cloudflare
}
}
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
# Meneruskan informasi dari Cloudflare
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; # Dari Cloudflare
}
}
3. Konfigurasi Apache untuk Memproses Header
Apache harus membaca header X-Forwarded-Proto
yang diterima dari Nginx untuk mengatur variabel HTTPS
.
Contoh Konfigurasi Apache:
Edit file konfigurasi virtual host Apache (misalnya: /etc/apache2/sites-available/your-site.conf
):
apacheCopy code<VirtualHost *:8080>
ServerName your-domain.com
DocumentRoot /var/www/html
# Memproses header dari Nginx (yang berasal dari Cloudflare)
SetEnvIf X-Forwarded-Proto https HTTPS=on
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
4. Opsi Tambahan: Menambahkan Daftar IP Cloudflare di Nginx
Untuk meningkatkan keamanan, Anda dapat membatasi akses langsung ke Nginx hanya dari IP Cloudflare.
Langkah:
- Dapatkan daftar IP Cloudflare terbaru dari:
https://www.cloudflare.com/ips/ - Tambahkan aturan ke konfigurasi Nginx:
nginxCopy codeallow 173.245.48.0/20; # Contoh IP dari daftar Cloudflare
allow 103.21.244.0/22;
# Tambahkan semua IP Cloudflare lainnya
deny all;
Letakkan aturan ini di dalam blok server
untuk melindungi aplikasi Anda dari akses langsung.
5. Uji dan Verifikasi
- Gunakan perintah
curl
untuk memverifikasi headerX-Forwarded-Proto
diterima dengan benar:bashCopy codecurl -H "X-Forwarded-Proto: https" http://your-domain.com
- Pastikan log di Apache menunjukkan bahwa
HTTPS
aktif ketika menggunakan HTTPS.
6. Integrasi dengan Aplikasi
- Framework seperti WordPress, Laravel, atau lainnya biasanya akan membaca variabel
HTTPS
yang diatur oleh Apache. Jika tidak, Anda dapat secara manual membaca headerX-Forwarded-Proto
atauCF-Visitor
.
Contoh untuk WordPress:
Tambahkan kode berikut di wp-config.php
:
phpCopy codeif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
Dengan konfigurasi ini, header X-Forwarded-Proto
akan diteruskan dari Cloudflare ke Nginx, lalu ke Apache, sehingga aplikasi dapat mengenali protokol asli yang digunakan oleh klien.