أريد التثبيت باستخدام وكيل عكسي لـ Apache

عزيزي @Teraterayuki

إليك مجموعة أمثلة من مضيفات Apache2 الافتراضية التي تعمل كوكيل عكسي إلى مقبس نطاق يونكس (Unix domain socket) داخل حاوية Discourse:

المنفذ 80

<VirtualHost *:80>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/

        # مستويات السجل المتاحة: trace8، ...، trace1، debug، info، notice، warn،
        # error، crit، alert، emerg.
        # من الممكن أيضًا تكوين مستوى السجل لوحدات معينة، على سبيل المثال:
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors.log
        CustomLog ${APACHE_LOG_DIR}/community.log combined

        # بالنسبة لمعظم ملفات التكوين من conf-available/، والتي يتم
        # تمكينها أو تعطيلها على المستوى العالمي، من الممكن
        # تضمين سطر لمضيف افتراضي معين فقط. على سبيل المثال، السطر التالي
        # يمكّن تكوين CGI لهذا المضيف فقط
        # بعد تعطيله عالميًا باستخدام "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =mysite.mydomain.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

المنفذ 443

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        #SSLProxyEngine on   #قم بتفعيل هذا بعد إعداد Let's encrypt على الوكيل العكسي
  	    RewriteEngine On
        
        RewriteCond %{HTTP_USER_AGENT}  (Bytespider|Yandex|Wget|seocompany|CCBot|Cincraw) [NC]
        RewriteRule . - [R=403,L]

  	    ProxyPreserveHost On
  	    ProxyRequests Off
  	    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
 	    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/
        ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        # مستويات السجل المتاحة: trace8، ...، trace1، debug، info، notice، warn،
        # error، crit، alert، emerg.
        # من الممكن أيضًا تكوين مستوى السجل لوحدات معينة، على سبيل المثال:
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined

        # بالنسبة لمعظم ملفات التكوين من conf-available/، والتي يتم
        # تمكينها أو تعطيلها على المستوى العالمي، من الممكن
        # تضمين سطر لمضيف افتراضي معين فقط. على سبيل المثال، السطر التالي
        # يمكّن تكوين CGI لهذا المضيف فقط
        # بعد تعطيله عالميًا باستخدام "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
        SSLCertificateFile /etc/letsencrypt/live/mysite.mydomain.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/mysite.mydomain.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

@Teraterayuki

يرجى ملاحظة أنه في هذا التكوين، يعمل الوكيل عبر مقبس يونكس وليس مقبس ويب (ws)

كما يرجى ملاحظة أنه في هذا التكوين لا تحتاج إلى إضافة معلومات Let’s Encrypt يدويًا. يمكنك البدء بهذا:

المنفذ 80 قبل تشغيل Certbot

<VirtualHost *:80>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        ProxyPreserveHost On

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/

        # مستويات السجل المتاحة: trace8، ...، trace1، debug، info، notice، warn،
        # error، crit، alert، emerg.
        # من الممكن أيضًا تكوين مستوى السجل لوحدات معينة، على سبيل المثال:
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors.log
        CustomLog ${APACHE_LOG_DIR}/community.log combined

        # بالنسبة لمعظم ملفات التكوين من conf-available/، والتي يتم
        # تمكينها أو تعطيلها على المستوى العالمي، من الممكن
        # تضمين سطر لمضيف افتراضي معين فقط. على سبيل المثال، السطر التالي
        # يمكّن تكوين CGI لهذا المضيف فقط
        # بعد تعطيله عالميًا باستخدام "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off
     
</VirtualHost>

المنفذ 443 قبل تشغيل Certbot

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mysite.mydomain.com
        ServerAdmin webmaster@localhost
        #SSLProxyEngine on   #قم بتفعيل هذا بعد إعداد Let's encrypt على الوكيل العكسي
  	    RewriteEngine On
        


  	    ProxyPreserveHost On
  	    ProxyRequests Off
  	    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
 	    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        #ProxyPass / http://127.0.0.1:8888/
        #ProxyPassReverse / http://127.0.0.1:8888/
        ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
        ProxyPassReverse  / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/

        # مستويات السجل المتاحة: trace8، ...، trace1، debug، info، notice، warn،
        # error، crit، alert، emerg.
        # من الممكن أيضًا تكوين مستوى السجل لوحدات معينة، على سبيل المثال:
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
        #CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined

        # بالنسبة لمعظم ملفات التكوين من conf-available/، والتي يتم
        # تمكينها أو تعطيلها على المستوى العالمي، من الممكن
        # تضمين سطر لمضيف افتراضي معين فقط. على سبيل المثال، السطر التالي
        # يمكّن تكوين CGI لهذا المضيف فقط
        # بعد تعطيله عالميًا باستخدام "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        ModPagespeed Off

</VirtualHost>
</IfModule>

ثم، إذا قمت بتشغيل:

certbot -d mysite.mydomain.com

فإن certbot الودود سيقوم تلقائيًا بإضافة كود SSL المطلوب لك.

بعد أن يقوم صديقنا certbot بإضافة كود التكوين الخاص به ويعمل كل شيء كما هو متوقع، يمكنك إلغاء التعليق عن هذا السطر:

#SSLProxyEngine on   #قم بتفعيل هذا بعد إعداد Let's encrypt على الوكيل العكسي

ثم أعد تشغيل apache2 مرة أخرى.

آمل أن يكون هذا مفيدًا لك يا @Teraterayuki

اعتنِ بنفسك.


ملاحظات ختامية:

  1. يرجى ملاحظة أننا لا نستخدم haproxy في تكوينات الوكيل العكسي الخاصة بـ apache2. حيث يضيف haproxy طبقة غير ضرورية من التعقيد مع فائدة ملموسة شبه معدومة (في حالتنا)، لذلك نعمل بـ apache2 كوكيل عكسي “بالطريقة السهلة”. قد يختلف الأمر بالنسبة لك إذا أردت استخدام haproxy؛ ولكن بصراحة، نحن لا نستخدم haproxy (في عدد من إعدادات الوكيل العكسي لـ apache2 في بيئة الإنتاج) ولم نواجه أبدًا أي مشاكل مع apache2 كوكيل عكسي.
  1. إذا لم تكن تستخدم mod_pagespeed، قم بإلغاء التعليق عن تلك الأسطر. ومع ذلك، إذا كنت تشغل mod_pagespeed``، فعطّل mod_pagespeed``` لكل مضيف افتراضي عند استخدام الوكيل العكسي مع Discourse.

كل التوفيق… وآمل أن يكون هذا مفيدًا لك ولو بشكل بسيط.