Apache Proxy

إعداد Proxmox مع Apache Proxy Balancer

الحل: تحويل الجهاز الافتراضي الأول إلى Gateway باستخدام NAT

بما أن الجهاز الأول متصل بالمودم، سنجعل بقية الأجهزة تستخدمه كبوابة (Gateway). إليك الخطوات:

1. تفعيل IP Forwarding على الجهاز الافتراضي الأول

افتح الطرفية (SSH) على الجهاز الأول ونفذ:

sudo nano /etc/sysctl.conf

ابحث عن هذا السطر:

# net.ipv4.ip_forward=1

وقم بإلغاء التعليق عنه ليصبح هكذا:

net.ipv4.ip_forward=1

ثم قم بحفظ الملف وتنفيذ الأمر التالي لتطبيق التغييرات:

sudo sysctl -p

2. إعداد iptables لتوجيه حركة المرور

قم بتنفيذ الأوامر التالية في الجهاز الأول:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

لحفظ القواعد حتى بعد إعادة التشغيل، نفذ:

sudo apt install iptables-persistent
sudo netfilter-persistent save

3. إعداد الأجهزة الافتراضية الأخرى لاستخدام الجهاز الأول كبوابة

على كل جهاز افتراضي آخر، تأكد أن إعداد الشبكة يحتوي على:

Gateway: 192.168.0.1
DNS: 8.8.8.8 (أو أي DNS تفضله)

4. إعداد Apache Proxy Balancer على الجهاز الأول

لتوزيع الطلبات بين الأجهزة، قم بتنفيذ:

sudo apt update && sudo apt install apache2 -y
sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests ssl headers rewrite
sudo systemctl restart apache2

ثم قم بتعديل ملف إعداد الموقع الافتراضي:

sudo nano /etc/apache2/sites-available/000-default.conf

وأضف التكوين التالي:

<VirtualHost *:80>
    ServerName yourdomain.com

    ProxyPreserveHost On
    ProxyRequests Off

    <Proxy balancer://mycluster>
        BalancerMember http://192.168.0.10 retry=5
        BalancerMember http://192.168.0.2 retry=5
        ProxySet lbmethod=byrequests
    </Proxy>

    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

5. دعم WebSocket و RTMP

لضمان عمل WebSocket والبث المباشر عبر RTMP، أضف:

ProxyPass /ws/ ws://192.168.0.10:8080/
ProxyPassReverse /ws/ ws://192.168.0.10:8080/

ProxyPass /wss/ ws://192.168.0.10:8080/
ProxyPassReverse /wss/ ws://192.168.0.10:8080/

وتأكد من توجيه RTMP عبر iptables:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1935 -j DNAT --to-destination 192.168.0.10:1935
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

6. تثبيت شهادة SSL

لضمان أمان الاتصال عبر HTTPS:

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache

7. اختبار الاتصال

للتحقق من الاتصال العام:

curl -I http://yourdomain.com
curl -I https://yourdomain.com

لاختبار WebSocket:

wscat -c wss://yourdomain.com/ws/

واختبار RTMP:

telnet yourdomain.com 1935

    ServerName yourdomain.com

    ProxyPreserveHost On
    ProxyRequests Off

    
        BalancerMember http://192.168.0.10 retry=5
        BalancerMember http://192.168.0.2 retry=5
        ProxySet lbmethod=byrequests
    

    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

    # إعادة توجيه HTTP إلى HTTPS تلقائيًا
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]



    ServerName yourdomain.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

    ProxyPreserveHost On
    ProxyRequests Off

    
        BalancerMember http://192.168.0.10 retry=5
        BalancerMember http://192.168.0.2 retry=5
        ProxySet lbmethod=byrequests
    

    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

    # دعم WebSocket
    ProxyPass /ws/ ws://192.168.0.10:8080/
    ProxyPassReverse /ws/ ws://192.168.0.10:8080/

    ProxyPass /wss/ ws://192.168.0.10:8080/
    ProxyPassReverse /wss/ ws://192.168.0.10:8080/


🎯 النتيجة النهائية

  • ✅ الجهاز الأول يعمل كـ Gateway وProxy Balancer.
  • ✅ جميع المنافذ (بما في ذلك 80، 443، 1935) تمر للأجهزة الأخرى.
  • ✅ دعم WebSocket و RTMP بدون مشاكل.
  • ✅ HTTPS مدعوم، وHTTP يتم تحويله إليه تلقائيًا.

💡 إذا واجهت أي مشاكل، لا تتردد في التواصل! 🚀

Amorozon
Logo