2008-09-18 21 views
12

मेरे पास एक मानक रेल ऐप है जिसमें Nginx और Mongrel http://mydomain पर चल रहा है। मुझे http://mydomain.com/blog पर एक वर्डप्रेस ब्लॉग चलाने की जरूरत है। मेरी प्राथमिकता अपाचे में ब्लॉग को होस्ट करने के लिए एक ही सर्वर या एक अलग बॉक्स पर चलाना होगा, लेकिन मैं नहीं चाहता कि उपयोगकर्ता यूआरएल में एक अलग सर्वर देखें। क्या यह संभव है और यदि नहीं, तो आप लक्ष्य को पूरा करने के लिए क्या सलाह देंगे?रेल एप्लिकेशन के समान डोमेन पर वर्डप्रेस चलाने का सबसे अच्छा तरीका क्या है?

उत्तर

5

मुझे लगता है कि जोएलहार्डी का समाधान निम्न से बेहतर है। हालांकि, मेरे अपने आवेदन में, मैं रेल साइट (मेमोरी मुद्दों को अलग करने) की तुलना में ब्लॉग को एक अलग वीपीएस पर रखना चाहता हूं। उपयोगकर्ता को एक ही यूआरएल देखने के लिए, आप उसी प्रॉक्सी चाल का उपयोग करते हैं जिसे आप आम तौर पर एक मोन्गल क्लस्टर के लिए प्रॉक्सी करने के लिए उपयोग करते हैं, सिवाय इसके कि आप किसी अन्य बॉक्स पर पोर्ट 80 (या जो कुछ भी) प्रॉक्सी को छोड़ दें। बहुत आसान। उपयोगकर्ता के लिए यह पारदर्शी है क्योंकि आप mongrel के लिए proxying - वे केवल आपके डोमेन पर पोर्ट 80 पर प्रतिक्रिया NGINX "देखें"।

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; 
    } 

आप रेल, किसी भी सर्वर प्रौद्योगिकी आप चाहते हैं के साथ खेलने के संयोग से है करने के लिए इस चाल का उपयोग कर सकते हैं। सीधे सर्वर/पोर्ट पर प्रॉक्सी, और एनजीआईएनएक्स इसे बाहरी दुनिया से छुपाएगा। इसके अतिरिक्त, चूंकि यूआरएल सभी एक ही डोमेन का संदर्भ लेंगे, इसलिए आप एक PHP- आधारित ब्लॉग, पायथन आधारित ट्रैकिंग सिस्टम और रेल ऐप को असीमित रूप से एकीकृत कर सकते हैं - जब तक आप अपने यूआरएल सही तरीके से लिखते हैं।

+0

सहमत हैं, फास्टसीजी समाधान उसी सर्वर पर रखकर ठीक काम करता है, हालांकि मुझे एनजीआईएनएक्स और PHP को पुनः स्थापित/अपडेट करना पड़ा क्योंकि फास्टसीजी को शुरुआत में शामिल नहीं किया गया था। एक अलग सर्वर के लिए, यह समाधान अच्छी तरह से काम करता प्रतीत होता है - अगर किसी को किसी भी गॉथस के बारे में पता है, तो कृपया उन्हें जोड़ें। –

+0

प्रॉक्सीइंग आपके लिए ठीक काम करेगा लेकिन यह अपने स्वयं के मुद्दों का सेट लाता है। उनमें से एक प्रदर्शन थोड़ा खराब है। एक और बात यह है कि आपको अपने बैकएंड सर्वर पर कोड को बदलना होगा ताकि उसे प्रॉक्सी के पीछे चलने के बारे में पता चल सके और एक्स-फॉरवर्डेड-फॉर जैसी चीजों को देखना होगा (वास्तव में एक ... – joelhardi

+0

... आईपी की सरणी, जरूरी नहीं कि एक ही पता बी/सी बहुत सारे उपयोगकर्ता कॉरपोरेट या आईएसपी प्रॉक्सी सर्वर के पीछे चलते हैं, और यदि आप ऐप के साथ कुछ करते हैं तो आप उपयोगकर्ता के वास्तविक आईपी को निकालना चाहते हैं। एक्स-फॉरवर्ड-फॉर एक उपयोगकर्ता-सेट मान है, इसलिए नहीं "भरोसेमंद" - अधिक देखने के लिए अपाचे mod_extract_forwarded देखें ... – joelhardi

0

मुझे लगता है कि एक पुनर्लेखन मैनिपुलेटर की तरह कुछ जो आप चाहते हैं वह करेगा। क्षमा करें, मेरे पास अब और विवरण नहीं है - बस जोर से सोच रहा है :)

7

दरअसल, चूंकि आप Nginx का उपयोग कर रहे हैं, आप पहले से ही बहुत बड़े आकार में हैं और अपाचे की आवश्यकता नहीं है।

आप फास्टसीजी के माध्यम से PHP चला सकते हैं (इस in the Nginx wiki को कैसे करें) के उदाहरण हैं, और कुछ यूआरएल को रेल और अन्य को PHP पर निर्देशित करने के लिए अपने Nginx कॉन्फ़िगरेशन में एक यूआरएल-मिलान पैटर्न का उपयोग करें।

यहाँ पीएचपी FastCGI के माध्यम से एक WordPress ब्लॉग चलाने के लिए एक उदाहरण Nginx विन्यास है (ध्यान दें मैं भी वर्डप्रेस .htaccess की Nginx बराबर में रख दिया है, तो आप भी पहले से ही इस config के साथ काम करने फैंसी यूआरएल होगा):

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 विकी सुझाव देता है, और Lightgpd से spawn-fcgi का उपयोग मेरे CGI-spawner (लाइटटैड एक बहुत तेज़ संकलन w/o अजीब निर्भरता है, इसलिए स्थापित करने के लिए एक त्वरित और आसान चीज़ है), लेकिन आप एक छोटा खोल/पर्ल भी उपयोग कर सकते हैं उस के लिए लिपि।

1

ऊपर दिए गए उत्तर आपके प्रश्न को संबोधित करते हैं।

एक वैकल्पिक एफसीजीआई PHP-fpm का उपयोग करना होगा। डॉक्स एक टैड स्पैस हैं लेकिन यह अच्छी तरह से काम करता है।

1

Nginx अब provides a script for doing this यदि आप ईसी 2/एडब्ल्यूएस पर्यावरण में हैं।

यह आपकी स्थिति के लिए आसानी से अनुकूल हो सकता है। यह बहुत आसान है।