عزيزي @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
اعتنِ بنفسك.
ملاحظات ختامية:
- يرجى ملاحظة أننا لا نستخدم
haproxy في تكوينات الوكيل العكسي الخاصة بـ apache2. حيث يضيف haproxy طبقة غير ضرورية من التعقيد مع فائدة ملموسة شبه معدومة (في حالتنا)، لذلك نعمل بـ apache2 كوكيل عكسي “بالطريقة السهلة”. قد يختلف الأمر بالنسبة لك إذا أردت استخدام haproxy؛ ولكن بصراحة، نحن لا نستخدم haproxy (في عدد من إعدادات الوكيل العكسي لـ apache2 في بيئة الإنتاج) ولم نواجه أبدًا أي مشاكل مع apache2 كوكيل عكسي.
- إذا لم تكن تستخدم
mod_pagespeed، قم بإلغاء التعليق عن تلك الأسطر. ومع ذلك، إذا كنت تشغل mod_pagespeed``، فعطّل mod_pagespeed``` لكل مضيف افتراضي عند استخدام الوكيل العكسي مع Discourse.
كل التوفيق… وآمل أن يكون هذا مفيدًا لك ولو بشكل بسيط.