ما هي أفضل طريقة لتشغيل Wordpress على نفس المجال مثل تطبيق Rails؟

StackOverflow https://stackoverflow.com/questions/89504

سؤال

لدي تطبيق Rails قياسي يعمل عليه Nginx وMongrel http://mydomain.أحتاج إلى تشغيل مدونة Wordpress على http://mydomain.com/blog.أفضلي هو استضافة المدونة في Apache التي تعمل إما على نفس الخادم أو على مربع منفصل ولكني لا أريد أن يرى المستخدم خادمًا مختلفًا في عنوان URL.هل ذلك ممكن، وإذا لم يكن كذلك، فبماذا تنصح لتحقيق الهدف؟

هل كانت مفيدة؟

المحلول

أعتقد أن حل جولهاردي أفضل مما يلي.ومع ذلك، في تطبيقي الخاص، أحب الاحتفاظ بالمدونة على خادم VPS منفصل عن موقع Rails (مشكلات فصل الذاكرة).لجعل المستخدم يرى نفس عنوان URL، يمكنك استخدام نفس خدعة الوكيل التي تستخدمها عادةً في إنشاء وكيل لمجموعة هجينة، باستثناء أنك وكيل للمنفذ 80 (أو أي شيء آخر) في صندوق آخر.سهل جدا.بالنسبة للمستخدم، يكون الأمر شفافًا تمامًا مثل وكيل mongrel - فهو فقط "يرى" استجابة NGINX على المنفذ 80 في المجال الخاص بك.

upstream myBlogVPS {
        server 127.0.0.2:80;  #fix me to point to your blog VPS
}

 server {
    listen       80;


    #You'll have plenty of things for Rails compatibility here

    #Make sure you don't accidentally step on this with the Rails config!

    location /blog {
        proxy_pass         http://myBlogVPS;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

يمكنك استخدام هذه الخدعة لتشغيل Rails مع أي تقنية خادم تريدها، بالمناسبة.قم بالتوصيل مباشرةً إلى الخادم/المنفذ المناسب، وسيقوم NGINX بإخفائه عن العالم الخارجي.بالإضافة إلى ذلك، نظرًا لأن عناوين URL ستشير جميعها إلى نفس النطاق، يمكنك على ما يبدو دمج مدونة تعتمد على PHP ونظام تتبع يعتمد على Python وتطبيق Rails - طالما أنك تكتب عناوين URL الخاصة بك بشكل صحيح.

نصائح أخرى

في الواقع، نظرًا لأنك تستخدم Nginx، فأنت بالفعل في حالة جيدة ولا تحتاج إلى Apache.

يمكنك تشغيل PHP من خلال fastcgi (توجد أمثلة لكيفية القيام بذلك في ويكي Nginx)، واستخدم نمط مطابقة عنوان URL في تكوين Nginx لتوجيه بعض عناوين URL إلى Rails وأخرى إلى PHP.

فيما يلي مثال لتكوين Nginx لتشغيل مدونة WordPress من خلال PHP fastcgi (لاحظ أنني قمت أيضًا بإضافة Nginx المعادل لـ WordPress .htaccess، لذلك سيكون لديك أيضًا عناوين URL رائعة تعمل بالفعل مع هذا التكوين):

server {
    listen       example.com:80;
    server_name  example.com;
    charset      utf-8;
    error_log    /www/example.com/log/error.log;
    access_log   /www/example.com/log/access.log  main;
    root         /www/example.com/htdocs;

    include /www/etc/nginx/fastcgi.conf;
    fastcgi_index index.php;

    # Send *.php to PHP FastCGI on :9001
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9001;
    }

    # You could put another "location" section here to match some URLs and send
    # them to Rails. Or do it the opposite way and have "/blog/*" go to PHP
    # first and then everything else go to Rails. Whatever regexes you feel like
    # putting into "location" sections!

    location / {
        index index.html index.php;
        # URLs that don't exist go to WordPress /index.php PHP FastCGI
        if (!-e $request_filename) {
            rewrite ^.* /index.php break;
            fastcgi_pass 127.0.0.1:9001;
        }

    }
}

هذا هو ملف fastcgi.conf الذي قمت بتضمينه في التكوين أعلاه (أضعه في ملف منفصل بحيث يمكن لجميع ملفات تكوين المضيف الظاهري تضمينه في المكان المناسب، ولكن ليس عليك القيام بذلك):

# joelhardi fastcgi.conf, see http://wiki.codemongers.com/NginxFcgiExample for source
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param  REDIRECT_STATUS    200;

لقد حدث أيضًا أنني فعلت ما يقترحه موقع Nginx wiki، واستخدمت Spawn-fcgi من Lighttpd باعتباره CGI-spawner الخاص بي (Lighttpd عبارة عن تجميع سريع جدًا بدون تبعيات غريبة، لذا فهو شيء سريع وسهل التثبيت)، ولكن يمكنك أيضًا استخدم برنامج نصي قصير/Perl لذلك.

الإجابات أعلاه تتناول سؤالك بشكل جميل.

سيكون بديل FCGI هو استخدام php-fpm.المستندات قليلة بعض الشيء ولكنها تعمل بشكل جيد.

نجينكس الآن يوفر برنامج نصي للقيام بذلك إذا كنت في بيئة EC2/AWS.

قد يكون قابلاً للتكيف بسهولة مع وضعك.إنه سهل الاستخدام.

يبدو لي أن شيئًا مثل مناور إعادة الكتابة سيفعل ما تريد.آسف ليس لدي المزيد من التفاصيل - فقط أفكر بصوت عالٍ :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top