أكثر

QGIS Server لا يعمل (مشكلة مع CGI السريع)

QGIS Server لا يعمل (مشكلة مع CGI السريع)


هل هناك مثال / برنامج تعليمي بسيط لكيفية إعداد QGIS Server بأحدث إصدار من QGIS على Ubuntu ، لا يمكنني الحصول على النتيجة الصحيحة (صورة فارغة)؟ أعتقد أنه قد تكون هناك بعض المشاكل في تكوين FASTCGI الخاص بي على apache.

من فضلك ساعدنى. شكرا.


أعمل على Ubuntu 10.04 / 10.10 و 11.04. كان تعليمي الأول هذا

http://linfiniti.com/2010/08/qgis-mapserver-a-wms-server-for-the-masses/ (رابط معطل)

ولكن تحت Ubuntu (مع كل التثبيت من repos) أسهل.

أدخل مجلد cgi-bin ، وأنشئ مجلد مشروع ، وانسخ فيه ملف المشروع ونسخة من qgis_mapserv.fcgi ، ثم أضف ملف بيانات وصفية.

يجب حفظ مشروع qgis بمسارات مطلقة (للطبقات).


توجد وثائق QGIS Server الرئيسية على: http://www.qgis.org/wiki/QGIS_Server_Tutorial

نقلا عن قسم Wiki لـ Ubuntu:

لإعداد QGIS Server باستخدام Apache 2 mod_fastcgi ، يلزم توفر الحزم التالية: apt-get install qgis-mapserver libapache2-mod-fcgid

لاحظ أن libapache2-mod-fcgid و libapache2-mod-fastcgi عبارة عن حزم مختلفة وتتطلب تكوينات مختلفة.

باستخدام التكوين الافتراضي ، يجب أن يجيب QGIS Server على طلب GetCapabilities من هنا:

http: //localhost/cgi-bin/qgis_mapserv.fcgi؟ الخدمة = WMS & VERSION = 1.3.0 & REQUEST = GetCapabilities


لقد قمت بتثبيت qgis و qgis_server باستخدام هذا البرنامج التعليمي: http://underdark.wordpress.com/2012/03/30/qgis-server-on-ubuntu-step-by-step/

صفات:

  • نظام التشغيل Ubuntu 12.04.O
  • آلة افتراضية

    1. في "/ usr / lib / cgi-bin /" أنشئ مجلدًا يسمى "test". "test" هو المكان الذي ستحفظ فيه مشروع qgis و shp. أيضًا. داخل هذا المجلد ، يجب نسخ الملف qgis_mapserv.fcgi و wms_metadata.xml أيضًا.
    2. افتح ملف .shp في qgis واحفظه كمشروع في "/ usr / lib / cgi-bin / test /". لنفترض أن اسم مشروعك هو "demo.qgis"
    3. الآن في خصائص المشروع ، حدد src الخاصة بك على أنها Google Mercator وفي خصائص الطبقة حدد اسم الطبقة واحفظها.
    4. بعد ذلك ، أغلق مشروعك وأنشئ مشروعًا جديدًا.
    5. في المشروع الجديد الفارغ ، أضف طبقة WMS وأضف الاسم وعنوان url لاسم مشروعك.

مثال (الخطوة 5):

الاسم: الأنهار url: // http: //localhost/cgi-bins/test/qgis_mapserv.fcgi

ثم أقبل وفويلا ...


لا يمكن تشغيل البرنامج النصي Perl FastCGI على خادم Apache: الخطأ 500

أحاول تشغيل خادم Apache الذي ينفذ بعض البرامج النصية عبر CGI السريع ، لكن لا يمكنني معرفة كيفية تشغيله على مدار حياتي. مشكلتي على وجه الخصوص هي "الخطأ 500: نهاية إخراج البرنامج النصي قبل الرؤوس".

لقد كنت أقرأ كثيرًا عن هذا الأمر ، بعد اتباع كل اقتراح يمكنني العثور عليه ولكن لم يحالفني الحظ حتى الآن. كان هناك بعض المعلومات حول IOTimeout و BusyTimeout وكل نوع آخر من مهلة Fcgid المتاحة ، لكن هؤلاء لم يفعلوا شيئًا ولا أعتقد أن مشكلتي مرتبطة به.

بدءًا من تثبيت Linux حديثًا ، هذا ما فعلته:

تم إنشاء صفحة ويب فارغة جديدة على / var / www / test مع بعض الملفات الفارغة والبرنامج النصي. لقد قمت بتعيين الأذونات وفقًا لذلك وللتأكد فقط من تغيير المالك والمجموعة إلى http.

لقد قمت بإلحاق هذا بـ /etc/httpd/conf/httpd.conf:

الآن ، يمكنني تشغيل البرنامج النصي بشكل جيد تمامًا من الجهاز. عندما أتوجه بعد ذلك إلى http: // localhost ، أحصل على قائمة بملفات الدليل كما هو متوقع ، ولكن عندما أقوم بفتح البرنامج النصي ، أحصل على الخطأ 500 المذكور أعلاه. يوضح سجل أخطاء اباتشي هذا (تم قص الأجزاء غير الضرورية):

لماذا يتم تسجيل إخراج البرنامج النصي في سجل الأخطاء؟ أعتقد أن هذا مرتبط بالأذونات والملكية ، لكن لا يمكنني معرفة كيف ، أعتقد أنني قمت بتعيينها جميعًا وفقًا لذلك. هل لديك أي فكرة عما يمكنني فعله لتشغيل هذا؟


يمكنك تكوين موجز ويب السجل الخاص بك وتنسيقه في apache باستخدام توجيهات TransferLog و LogFormat:

واجهت نفس المشكلة ولم أجد حقًا مسار تكوين سجل Apache هذا مناسبًا.

إذا كان مشروع Catalyst يسجل العديد من الرسائل ، فإن التسجيل عبر الخطأ القياسي في سجل أخطاء Apache ليس نظيفًا للغاية: يتم خلط رسائل السجل مع ضوضاء تطبيقات الويب الأخرى وخاصة إذا كنت تستخدم mod_fastcgi ، فسيتم إضافة بادئة طويلة لكل سطر مسبقًا.

البديل هو تسجيل الدخول إلى ملف. ولكن بعد ذلك عليك التأكد من أن العمليات المتعددة لن تفسد ملف السجل. تقوم الوحدة النمطية Log :: Handler بواسطة Jonny Schulz بهذا بالضبط ، لأنها تدعم تدفق الرسائل.

هذه الوحدة عبارة عن غلاف لـ Log :: Handler المذكور.


غير قادر على خدمة تطبيق Python Flask من تطبيق IIS Web

أحاول خدمة تطبيق Flask من تطبيق IIS على الويب ضمن موقع الويب الافتراضي ، ولكن لا يمكنني تشغيله. التفاصيل هنا:

  1. تثبيت IIS مع جميع المكونات (مع CGI)
  2. قم بتثبيت Python 2.7.14
  3. أضف Python في متغير PATH
  4. تثبيت نقطة wfastcgi
  5. wfastcgi- تمكين
  6. قارورة تثبيت الأنابيب
  7. iisreset
  8. إنشاء دليل: C: inetpub wwwroot flask-demo
  9. انقر فوق تحويل إلى تطبيق في IIS للدليل أعلاه.
  10. قم بإنشاء C: inetpub wwwroot flask-demo myapp.py بالمحتوى التالي:

عندما أحاول الوصول إلى الصفحة كـ http: // localhost / flask-demo ، أحصل على 404. ولكن إذا قمت بتغيير السطر الثاني في myapp.py من @ app.route ('/') إلى @ app.route ('/ flask -demo ') حيث flask-demo هو اسم تطبيق ويب IIS حيث يتم وضع ملفات Python ، وهو يعمل.

أرغب في خدمة صفحة ويب Python دون كتابة flask-demo / اسم تطبيق ويب IIS حيث يتم وضع تطبيق Python flask. لست قادرًا على فعل ذلك.


3 إجابات 3

تحت Ubuntu ، هناك طريقة أخرى للسجن وهي المظهر!

وهي عبارة عن وحدة أمان Linux (LSM) إلزامية للتحكم في الوصول (MAC). في Ubuntu 10.04 يتم تمكينه افتراضيًا للخدمات المحددة.

الوثائق مجزأة تماما. يمكن أن تكون وثائق أوبونتو. أفضل. حتى الوثائق الأولية لا تعطي مقدمة جيدة. تنص صفحة المرجع على ما يلي:

تحذير: هذا المستند في مرحلة مبكرة جدًا من الإنشاء ، ولم يتم استخدامه بأي شكل بعد كدليل مرجعي

ومع ذلك ، فإن البدء سهل نسبيًا. يطابق ملف تعريف AppAmor مسارًا قابلاً للتنفيذ ، على سبيل المثال / var / www / slave / slave. القاعدة الافتراضية للملف الشخصي هي الرفض (وهو أمر رائع) ، إذا لم يتطابق أي شيء آخر. تطابق قواعد رفض الملف الشخصي دائمًا قبل قواعد السماح. الملف الشخصي الفارغ ينفي كل شيء.

يتم تخزين ملفات التعريف للثنائيات المختلفة في /etc/apparmor.d. يعرض apparmor_status ملفات التعريف النشطة ، وما هو في وضع الإنفاذ (جيد) ، أو فقط في وضع الشكوى (تتم طباعة رسائل السجل فقط).

إنشاء ملف تعريف جديد لـ / var / www / slave / slave هو فقط:

ابدأ في Terminal / var / www / slave / slave وافعل حالة استخدام نموذجية. بعد الانتهاء ، اضغط على s و f في المحطة السابقة.

الآن /etc/apparmor.d يحتوي على ملف ملف تعريف var.www.slave.slave. إذا قام العبد ببعض التفرع فإن الملف الشخصي يكون متناثرًا جدًا - يتم تجاهل جميع وصول الأطفال.

على أي حال ، الملف الشخصي نشط الآن في وضع الفرض ويمكنك فقط تشغيل الإجراءات بشكل متكرر في التابع ومشاهدة tail -f / var / log / messages للانتهاكات. في محطة أخرى ، تقوم بتحرير ملف الملف الشخصي وتنفيذ aa -force var.www.slave.slave بعد كل تغيير. يعرض السجل بعد ذلك:

سيسمح بالوصول في المستقبل.

هذا كله جميل للأمام.

يدعم AppAmor قواعد الشبكة الحبيبية الخشنة ، على سبيل المثال

بدون هذه القاعدة ، لا يمكن الوصول إلى الإنترنت (بما في ذلك المضيف المحلي) ، أي باستخدام هذه القاعدة ، يمكنك استخدام iptables لقواعد أكثر دقة (على سبيل المثال ، بناءً على معرف تابع).

جزء آخر من الوثائق يحتوي على شيء عن ملفات التعريف الفرعية لنصوص php.

يشبه الهيكل العظمي للملف الشخصي var.www.slave.slave:

باستخدام ملف التعريف هذا ، لم يعد العبد قادرًا على الاتصال بأدوات مساعدة مثل البريد أو الإرسال.


بطء أداء الخادم - تسبب mod_fcgid في حدوث أخطاء (104) و (09) و (32): mod_fcgid: فشل ap_pass_brigade في وظيفة handle_request_ipc

أواجه مشكلة في تتبع مصدر أداء خادم الويب البطيء لموقع Wordpress والصفحات غير المخزنة مؤقتًا.

نظام تشغيل الخادم: Debian 8 "Jesssie)" - إصدار Linux 4.9.58-xxxx-std-ipv6-64 ([email protected]) (إصدار مجلس التعاون الخليجي 6.3.0 20170516 (Debian 6.3.0-18)) # 1 SMP Mon 23 أكتوبر ، 11:35:59 بتوقيت وسط أوروبا الصيفي 2017 (اسبكونفيغ)

قاعدة بيانات للانترنت: إصدار الخادم: Apache / 2.4.10 (Debian)

بي أتش بي (افتراضي): PHP 7.0.26

بي أتش بي (محدد): إصدار PHP 7.1.8

المعالج: Intel 2x Xeon E5-2630v3 - 16 / 32t - 2.4 جيجا هرتز / 3.2 جيجا هرتز

الرامات "الذاكرة العشوائية في الهواتف والحواسيب: 128 جيجا بايت DDR4 ECC 1866 ميجا هرتز

الأقراص: SoftRaid 2x450GB SSD NVMe

ملف apache2.conf:

حالة الملقم (لمدة 40 دقيقة الأخيرة):

اباتشي 2ctl -M:

خادم MPM: عامل:

my.cnf (MySQL):

domain.com.vhost-le-ssl.conf (. )

أستضيف أغنية واحدة موقع ووردبريس على هذا الجهاز. (32) خطأ يظهر من وقت لآخر حتى عندما كان الموقع قيد التطوير والمستخدم الوحيد هو أنا. حاليًا لدي حوالي 5 آلاف زائر فريد يوميًا (https://domain.com) و error.log يعرض أخطاء متعددة (104) و (9) و (32) ، بما في ذلك:

أود أن أقول إن هذه الأخطاء تحدث لـ 5٪ -10٪ من جميع الزيارات وأن العدد منخفض حاليًا فقط بسبب حقيقة أن غالبية صفحاتي مخبأة. بدأ هذا يقلقني لأن موقع الويب الخاص بي يحصل على المزيد من الزيارات يومًا بعد يوم ، ويقوم المزيد من الزائرين بالتسجيل واستخدام خيار "البحث" أو النقر فقط على روابط "العلامات" التي لم يتم تخزينها مؤقتًا بسبب محتواها الديناميكي.

مما لاحظته ، تحدث هذه الأخطاء غالبًا عند تشغيل PHP. للاختبار ، فتحت حوالي 20 منشورًا في علامات التبويب وانقر فوق الزر "تعديل". تسبب هذا في أخطاء (104) و (9) و (32). (32) يظهر أيضًا عند قيام الزائر بالبحث. في المجموع لدي حوالي 500 ألف منشور في ووردبريس الخاص بي.

ما فعلته لمحاولة إصلاحه (لا نجاح): 1. لقد تحولت من PHP-FPM ل Fast-CGI وفتح 20 منشورًا في علامات التبويب والنقر على زر "تعديل". لا تزال الأخطاء تظهر في error.log ولا يتم تحميل المنشور مع عرض المتصفح "في انتظار المقبس المتاح" (تعمل الصفحات المخبأة بسرعة فائقة).

ps aux | grep "php"

تولد استعلامات MySQL هذه 128.9٪ من استخدام وحدة المعالجة المركزية بواسطة mysqld:

2. لقد قمت بتحديث وتعديل الخيارات التالية:

تسرد وثائق Apache mod_fcgid إمكانية أخرى وهي "mod_fcgid: فشل ap_pass_brigade في وظيفة handle_request_ipc"قد يحدث خطأ بسبب حد PHP_FCGI_MAX_REQUESTS و / أو FcgidMaxRequestsPerProcess. تخرج عمليات PHP FastCGI بعد معالجة 500 طلب ، وقد تخرج بعد اتصال هذه الوحدة بالفعل بالتطبيق وإرسال الطلب التالي ، مما يؤدي إلى ظهور خطأ "mod_fcgid: ap_pass_brigade فشل في handle_request_ipc function".

وفقًا لوثائق Apache mod_fcgid وهذا السؤال ، قمت أيضًا بتحديث الخيارات التالية:

لسوء الحظ ، كلاهما 1) و 2) لم يحل مشكلتي: - / أي نصيحة حول كيفية إخراج الحد الأقصى من هذا الجهاز (Intel 2x Xeon E5-2630v3 - 16 / 32t - 2.4 جيجا هرتز / 3.2 جيجا هرتز + 128 جيجا بايت DDR4 ECC 1866 ميجا هرتز RAM) وإصلاح المشكلة مع mod_fcgid يخطئ؟ هتافات!


لا يضغط Apache mod deflate على إخراج php

لقد حصلت على mod_deflate وتشغيلها. يمكنني رمي ملف something.txt في خادم اباتشي الخاص بي واستخدام curl للتحقق من ذلك.

curl --compressed -I /somefile.txt يعيدني ما يلي وهو جيد ومضغوط:

ولكن إذا استخدمت /some.php ، فسأعود:

لكن لا يوجد ترميز للمحتوى: gzip ، htaccess. استخدمته مع خيارات متعددة:

لقد تحققت أيضًا مما إذا كان ضغط zlib قد تم إيقاف تشغيله في ملف php.ini وحاولت أيضًا ضبط المخزن المؤقت للإخراج على إيقاف التشغيل. لكن بغض النظر عما أحاول ، لم أحصل على إخراج php ليتم ضغطه بواسطة apache. يكون مقدار الحمل من apache إلى zip أقل مما هو عليه عند استخدام php zlib.

أرى عددًا كافيًا من المنشورات مثل ضغط إخراج Apache الذي يعمل مع CSS / JS ولكن ليس PHP ولكنه يتيح الضغط من php. أريد اباتشي للتعامل معها.

يجب أن أفتقد شيئًا سخيفًا هنا.

تحديث: لقد قمت بحل جميع المشكلات ، أيضًا بسبب الإجابات المقدمة. في النهاية ما زالت لا تعمل بنسبة 100٪. كان هذا بسبب تثبيت الحزمة الخاطئة. تم استخدام apache2filter الذي أرسلني إلى المسار الخطأ.


2 إجابات 2

كان نموذج برمجة الويب في التسعينيات هو إطلاق تطبيق يستخدم واجهة البوابة العامة لإطلاق عملية أخرى تم تشعبها بواسطة خادم الويب.

إن عملية التفرع هي عملية ذات وزن ثقيل نوعًا ما. بالنسبة لـ perl ، هذا يعني تدوير المترجم الفوري ، وتشغيله ، ثم ترك العملية تنتهي. عند العمل بأحمال ثقيلة ، أصبح هذا باهظ التكلفة (الذاكرة ووحدة المعالجة المركزية).

قلل FastCGI من الحمل على CGIs من خلال إعادة استخدام العملية ، وخفض التشعب الثقيل للعملية. هذا أكثر انسجامًا مع خوادم التطبيقات ، مما يقودنا إلى.

يتمثل نهج التطوير اليوم في الحصول على خادم تطبيق بلغة تحتوي على نموذج خيوط معالجة خفيف الوزن ، والذي يمكنه التعامل مع أحمال كبيرة جدًا (مقارنة بأيام CGI). من بين هؤلاء لديك Java و Go و C # التي تتبع هذا النهج.

هذا لا يعني خروج بيرل. توجد خوادم تطبيقات لـ Perl. نادرًا ما يسمع المرء عن محفز مقارنة بأشياء مثل Zope أو NodeJS أو عدد كبير من خوادم تطبيقات Java.

جزء من هذا هو التوقيت. أثناء تطوير خوادم تطبيقات Java ، تعثرت Perl قليلاً في العمل على perl 6 (أي يوم الآن) وهكذا ترك المجتمع ككل مسار التنمية هذا يفلت من أيدينا.

أنا شخصيا استخف بانضباط اللغات كسبب لفقد بيرل الإشارة إلى جافا سكريبت و php و ruby ​​باعتبارها ثلاثة أمثلة للغات غير منضبطة مماثلة والتي لا تزال شائعة في منطقة الويب.

لغات مثل Java و C # (وإلى حد ما ، python) بدعم من الشركات الكبرى (Sun / Oracle ، Microsoft ، Google) ونعم ، المزيد من الانضباط في اللغة هي أكثر جاذبية لتطوير المؤسسات.


ومع ذلك ، فقد وصلت الآن إلى نقطة أتساءل فيها عما إذا كانت بحاجة إلى إعادة كتابة لأنني لا أرى حلولًا رائعة للمشكلات التالية مع نمط MVC:

أرغب في أن أتمكن من نشر البيانات والتحكم في ما يحدث إذا فشلت من جانب العميل. باستخدام POST العادي ، بمجرد إرسال النموذج ، فلنذهب للتحكم. هذا يعني أنه إذا كان الخادم يقوم بإعادة التشغيل ، أو يتلقى تحديثًا ، ولم يتم تشغيل الوكيل العكسي بعد ، فإن Nginx يظهر خطأ ويتوقف عند الخطأ. أرغب في أن أكون قادرًا على إجراء التحديثات (قم بإزالة Fast CGI (Django) لمدة 5 ثوانٍ) وجعل موقع الويب يتعامل معها بشكل صامت. في بعض الأحيان ، إذا تم تنفيذ GET أثناء تعطل الوكيل ، فأنا أخدم صفحة صيانة تحاول التحديث كل 5 ثوانٍ ، لذلك تعمل GETs بشكل جيد ، لكن POSTs تمثل مشكلة. يستخدم SPA AJAX لذلك لا يزال الشخص مسيطرًا بعد إرسال البيانات.

إذا كان اتصال الإنترنت معطلاً ، فأنا أرغب في تخزين POST مؤقتًا ، مثل PWA؟ ، ثم عند الاتصال بالإنترنت ، أرسل جميع POSTS من خلاله. يحل PWA هذه المشكلة من خلال قدرته على التخزين المؤقت في وضع عدم الاتصال.

عندما ينخفض ​​الإنترنت ، يكون لدى المصنع اتصال إنترنت 3G احتياطيًا ، ولكن بعد ذلك يتغير عنوان IP الخاص به ، وبالتالي تفشل المصادقة القائمة على IP. توجد محطة إدخال عامة في المصنع ، وبالتالي لا يستخدمون المصادقة المستندة إلى المستخدم ، لذلك أحتاج إلى اكتشاف طريقة مصادقة جديدة. استخدم SPA طريقة الرمز التي أعتقد أنها تحل هذه المشكلة.


واجهة ويب بسيطة لتنفيذ برنامج C ++

هذا في الواقع سؤال بسيط للغاية ، لكنني ضائع في الوقت الحالي.

هذا في الواقع مع عظام البيجل الأسود. لكنني أفترض أن المشكلة قد تترجم إلى RPi أيضًا.

كنت أستخدم أسود بيجل بون لمشروع مدرسي. يتحكم في مجموعة من المحركات والمحركات ، إلخ. كتبنا كل شيء بلغة C ++ ، وأنشأنا مكتبات من الوظائف. عندما يستدعيهم برنامج رئيسي ، تعمل الوظائف بشكل جيد.

لقد طُلب منا مؤخرًا عرض تقدمنا ​​حتى الآن. لم يتم الانتهاء من البرنامج الرئيسي ، لذلك كنا نفكر في نوع من واجهة الويب التي يمكنها تنفيذ برنامج C ++ المتوافق عند الأمر. كنا نأمل في استضافة الخادم على اللوحة ، والوصول إليه عبر LAN من أجهزة كمبيوتر أخرى. لكني لم أفعل هذا من قبل وليس لدي أي فكرة من أين أبدأ. هل سيكون node.js (مع "bonescript") مفيدًا؟ أم أن هناك طريقة أبسط باستخدام HTML الأساسي؟

لدي بضعة أيام فقط لمعرفة ذلك ، لذلك لم أرغب في تضييع الوقت في البحث عن الأساليب الخاطئة.


شاهد الفيديو: 1. Installing QGIS on Linux Ubuntu LTS