0 Comments

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 nilai http atau https.
  • 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:

  1. Dapatkan daftar IP Cloudflare terbaru dari:
    https://www.cloudflare.com/ips/
  2. 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 header X-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 header X-Forwarded-Proto atau CF-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.

Related Posts