كان لدي (وكان لدي!) تثبيت وكيل عكسي يعمل افتراضيًا.
تم تقديم كل شيء بواسطة HTTPS كما هو مصمم.
لقد قفزت عدة إصدارات وواجهت ترقية الموت حيث تظل الشاشة فارغة كما هو مذكور هنا: Upgrade discourse doesn't work - #6 by Andrew_Bond
لقد قمت بتحديث Discourse الخاص بي يدويًا باستخدام ./launcher rebuild app وأنا على الإصدار 2.9.0.beta14 (0da79561c3 )
لاحظت أنه إذا حاول مسودة الحفظ، أو معظم الإجراءات الأخرى مثل النشر، وتسجيل الدخول، تلقيت خطأ 403 ممنوع (عبر مفتش Chrome)
شعارى يعمل في الزاوية العلوية اليسرى للموقع.
إذا قمت بتعطيل عنصر فرض HTTPS يدويًا عبر سطر الأوامر، يفشل الشعار في التحميل حيث أكون في وضع مختلط حيث يتم حظر عنصر http. تستمر جميع العناصر الأخرى في الموقع في العمل.
لم أقم بأي تغييرات في وكيل Nginx العكسي. لقد حاولت إعادة بناء التطبيق مرة أخرى دون جدوى.
أقترح أن شيئًا ما قد تغير في طريقة عمل Discourse من الإصدارات التي قمت بالترقية منها. كان معرف الإصدار الأخير الذي يمكنني العثور عليه والذي عمل مع خيار فرض HTTPS العامل هو: e9f53dbe0028ca7a5d8926711a1944765d34347
الأخطاء التي تم اكتشافها الآن:
إعجابَين (2)
david
(David Taylor)
30 ديسمبر 2022، 12:36م
3
مرحباً أندرو - شكراً على التقرير. تؤثر هذه المشكلة تحديداً على تكوينات الوكيل العكسي حيث تتم إضافة رؤوس X-Forwarded-Proto متعددة إلى الطلب قبل وصوله إلى حاوية التطبيق.
لقد قمت للتو بدمج إصلاح في main - يجب أن يصل إلى اختبارات ناجحة في حوالي 20 دقيقة
committed 12:35PM - 30 Dec 22 UTC
NGINX v1.23 concatenates duplicate headers into a single comma-separated string.… We were doing an equality check on `x-forwarded-proto`. If the request includes multiple `x-forwarded-proto` headers then this check would fail under NGINX v1.23, and our config assumed an `http` connection.
This commit updates the config to check for `https` at the end of the header, thereby restoring the old behavior when multiple `x-forwarded-proto` request headers are sent.
بمجرد ظهوره في اختبارات ناجحة ستحتاج إلى إجراء إعادة بناء كاملة (لا يتم تطبيق تغييرات تكوين nginx أثناء الترقيات المستندة إلى واجهة المستخدم).
8 إعجابات
شكراً جزيلاً على الرد السريع والإصلاح السريع!
إعجاب واحد (1)
إذًا، تحديث.
لقد أعدت بناء التطبيق باستخدام ./launcher rebuild app
لا توجد مشاكل هناك.
اختفت الأخطاء عندما أجبرت HTTPS مع استثناء
لم يعد لدي رفض 403 ولكن على سبيل المثال عند محاولة تسجيل الدخول يتم تقديمي بصندوق تسجيل الدخول الذي يبدو أنه يقبل البيانات ثم يتم تقديمه مرة أخرى بمستخدم غير مسجل الدخول
نفس الخطأ المذكور أعلاه موجود عند إعادة تحميل الصفحة.
لقد قمت مرة أخرى بتعطيل فرض HTTPS ويعمل الموقع - للتوضيح على الرغم من أن الشعارات لا تزال غير معروضة
إعجاب واحد (1)
david
(David Taylor)
30 ديسمبر 2022، 3:26م
6
هذا الخطأ غير ذي صلة - إنه ناتج عن قيام Cloudflare بحقن نصوص تحليلية (وسياسة أمان المحتوى الافتراضية لـ Discourse تمنع الحقن)
هل يمكنك مشاركة المزيد حول الوكلاء لديك بين المستخدمين و Discourse؟ أفترض أن Cloudflare هي الطبقة الأولى؟ ماذا يوجد أيضًا بين Cloudflare وحاوية تطبيق Discourse؟
3 إعجابات
بالتأكيد!
أنت على حق تمامًا. Cloudflare هو أول نتيجة ثم لدينا nginx reverse proxy مقدم من centminmod على docker.
david
(David Taylor)
30 ديسمبر 2022، 3:29م
8
هل يمكنك مشاركة الإعدادات التي لديك لهذا؟ على وجه الخصوص، هل يضيف رأس X-Forwarded-Proto إضافي؟
بالتأكيد!
# دليل البدء السريع لـ Centmin Mod
# يجب قراءة https://centminmod.com/getstarted.html
# لإعداد HTTPS/2 SSL
# اقرأ https://centminmod.com/nginx_configure_https_ssl_spdy.html
# إعادة التوجيه من www إلى غير-www فرض SSL
# قم بإلغاء التعليق، احفظ الملف وأعد تشغيل Nginx لتمكين
# إذا كنت غير متأكد، استخدم return 302 قبل استخدام return 301
server {
listen 80;
server_name exiges.com www.exiges.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name exiges.com www.exiges.com;
ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
ssl_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
include /usr/local/nginx/conf/ssl_include.conf;
# شهادة سحب المصدر الموثقة من Cloudflare community.centminmod.com/threads/13847/
#ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
#ssl_verify_client on;
# موزيلا الموصى بها
ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
ssl_prefer_server_ciphers on;
#add_header Alternate-Protocol 443:npn-spdy/3;
# قبل تمكين HSTS اقرأ centminmod.com/nginx_domain_dns_setup.html#hsts
#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
#add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
#add_header Referrer-Policy "strict-origin-when-cross-origin";
#add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
#spdy_headers_comp 5;
ssl_buffer_size 1369;
ssl_session_tickets on;
# تمكين OCSP stapling
#resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
#resolver_timeout 10s;
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;
# ngx_pagespeed و ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;
# limit_conn limit_per_ip 16;
# ssi on;
access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
error_log /home/nginx/domains/exiges.com/log/error.log;
include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
root /home/nginx/domains/exiges.com/public;
# قم بإلغاء التعليق على تضمين cloudflare.conf إذا كنت تستخدم cloudflare لـ
# خادم و/أو موقع vhost
#include /usr/local/nginx/conf/cloudflare.conf;
include /usr/local/nginx/conf/503include-main.conf;
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
include /usr/local/nginx/conf/php.conf;
#include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
#include /usr/local/nginx/conf/pre-staticfiles-global.conf;
#include /usr/local/nginx/conf/staticfiles.conf;
#include /usr/local/nginx/conf/drop.conf;
#include /usr/local/nginx/conf/errorpage.conf;
#include /usr/local/nginx/conf/vts_server.conf;
}
أرى الإشارة إلى رأس x-proto ..
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
إعجاب واحد (1)
david
(David Taylor)
30 ديسمبر 2022، 4:01م
10
كيف يتصل Cloudflare بمصدرك؟ هل يستخدم SSL/TLS؟ من المثالي أن تستخدم “Full” أو “Full (Strict)” هنا.
مرن. لقد كنت كسولاً ولم أستخدم شهادات الخادم
david
(David Taylor)
30 ديسمبر 2022، 5:28م
12
أوصي بإعدادك بأحد خيارات Cloudflare SSL الآمنة. “Flexible” يعني أن حركة المرور غير مشفرة بين Cloudflare والخادم الخاص بك.
بالنظر إلى الإعداد مرة أخرى:
يبدو أنك تقوم بتعيين الرأس إلى https، ثم تقوم بتعيينه مرة أخرى بعد سطرين إلى $scheme (والذي سيكون http بناءً على إعداد Cloudflare الخاص بك). إذا قمت بإزالة السطر الثاني، فسيتم إخبار Discourse بأن الاتصال آمن (على الرغم من أنه ليس كذلك).
4 إعجابات
مثير للاهتمام.
ما أجده غريباً مع ذلك هو أنه كان يعمل.
david
(David Taylor)
30 ديسمبر 2022، 7:50م
14
أشك (لكن لم أؤكد بنسبة 100٪) أن حاوية Discourse NGINX كانت تنظر سابقًا إلى رأس X-Forwarded-Proto ‘الأول’. الآن، إنها تنظر إلى رأس X-Forwarded-Proto ‘الأخير’، وهو ما يمكن القول إنه أكثر أمانًا لأنه يأتي من الوكيل ‘الأحدث’ الذي لديه أكبر قدر من المعلومات حول الطلب الوارد.
لذلك، قبل التحديث، كانت تنظر إلى X-Forwarded-Proto الذي قدمته Cloudflare (https). الآن، إنها تنظر إلى رأس X-Forwarded-Proto الذي قدمه تكوين وكيلك العكسي ‘centminmod’ (http).
3 إعجابات
لقد قمت بإزالة proxy_set_header X-Forwarded-Proto $scheme; من التكوين مع تكوين يعمل الآن.
لمن يقرأ هذا ويقوم بتكوين centminmod، هناك تكوينان لـ nginx.
أحدهما لـ http والآخر لـ https.
لقد قمت بإزالة proxy_set_header X-Forwarded-Proto $scheme; الثاني من موقع http، وكل شيء يعمل كما هو متوقع الآن.
هذا هو ملف exiges.com.conf الخاص بي:
# دليل البدء السريع لـ Centmin Mod
# يجب قراءة https://centminmod.com/getstarted.html
# إعادة التوجيه من non-www إلى www
# قم بإلغاء التعليق، احفظ الملف وأعد تشغيل Nginx لتمكين
# إذا كنت غير متأكد، استخدم return 302 قبل استخدام return 301
#server {
# listen 80;
# server_name exiges.com;
# return 301 $scheme://www.exiges.com$request_uri;
# }
server {
server_name exiges.com www.exiges.com;
#return 301 https://exiges.com.com$request_uri;
#return 301 $scheme://www.exiges.com$request_uri;
# ngx_pagespeed و ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;
#add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
#add_header Referrer-Policy "strict-origin-when-cross-origin";
#add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
# limit_conn limit_per_ip 16;
# ssi on;
access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
error_log /home/nginx/domains/exiges.com/log/error.log;
include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
root /home/nginx/domains/exiges.com/public;
# قم بإلغاء التعليق على تضمين cloudflare.conf إذا كنت تستخدم cloudflare لـ
# الخادم و/أو موقع vhost
#include /usr/local/nginx/conf/cloudflare.conf;
include /usr/local/nginx/conf/503include-main.conf;
# منع الوصول إلى ./directories والملفات
#location ~ (?:^|/)\. {
# deny all;
#}
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header X-Forwarded-Proto https;
#proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
#include /usr/local/nginx/conf/503include-only.conf;
# حظر الاستغلالات الشائعة، حقن SQL، إلخ
#include /usr/local/nginx/conf/block.conf;
# تمكين قوائم الدلائل عندما لا يتم العثور على ملف الفهرس
#autoindex on;
# عرض أوقات قائمة الملفات بالتوقيت المحلي
#autoindex_localtime on;
# مثال على روابط دائمة لـ Wordpress
#try_files $uri $uri/ /index.php?q=$uri&$args;
}
include /usr/local/nginx/conf/php.conf;
#include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
#include /usr/local/nginx/conf/pre-staticfiles-global.conf;
#include /usr/local/nginx/conf/staticfiles.conf;
#include /usr/local/nginx/conf/drop.conf;
#include /usr/local/nginx/conf/errorpage.conf;
#include /usr/local/nginx/conf/vts_server.conf;
}
هذا هو ملف exiges.com.conf.ssl الخاص بي:
# دليل البدء السريع لـ Centmin Mod
# يجب قراءة https://centminmod.com/getstarted.html
# لإعداد HTTP/2 SSL
# قراءة https://centminmod.com/nginx_configure_https_ssl_spdy.html
# إعادة التوجيه من www إلى non-www SSL إجباري
# قم بإلغاء التعليق، احفظ الملف وأعد تشغيل Nginx لتمكين
# إذا كنت غير متأكد، استخدم return 302 قبل استخدام return 301
server {
listen 80;
server_name exiges.com www.exiges.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name exiges.com www.exiges.com;
ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
ssl_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
include /usr/local/nginx/conf/ssl_include.conf;
# شهادة سحب المصدر المعتمدة من Cloudflare community.centminmod.com/threads/13847/
#ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
#ssl_verify_client on;
# موصى به من موزيلا
ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
ssl_prefer_server_ciphers on;
#add_header Alternate-Protocol 443:npn-spdy/3;
# قبل تمكين سطر HSTS اقرأ centminmod.com/nginx_domain_dns_setup.html#hsts
#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
#add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
#add_header Referrer-Policy "strict-origin-when-cross-origin";
#add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
#spdy_headers_comp 5;
ssl_buffer_size 1369;
ssl_session_tickets on;
# تمكين ocsp stapling
#resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
#resolver_timeout 10s;
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;
# ngx_pagespeed و ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;
# limit_conn limit_per_ip 16;
# ssi on;
access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
error_log /home/nginx/domains/exiges.com/log/error.log;
include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
root /home/nginx/domains/exiges.com/public;
# قم بإلغاء التعليق على تضمين cloudflare.conf إذا كنت تستخدم cloudflare لـ
# الخادم و/أو موقع vhost
include /usr/local/nginx/conf/cloudflare.conf;
include /usr/local/nginx/conf/503include-main.conf;
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
include /usr/local/nginx/conf/php.conf;
#include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
#include /usr/local/nginx/conf/pre-staticfiles-global.conf;
#include /usr/local/nginx/conf/staticfiles.conf;
#include /usr/local/nginx/conf/drop.conf;
#include /usr/local/nginx/conf/errorpage.conf;
#include /usr/local/nginx/conf/vts_server.conf;
}
@david نقدر وقتك في إصلاح هذه المشكلة.
بالنسبة لما هو جدير بالذكر، أنا الآن كامل، وليس مرنًا مع الشهادات.
إعجاب واحد (1)
system
(system)
تم إغلاقه في
29 يناير 2023، 10:09م
16
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.