Rails uygulama olarak aynı etki alanında Wordpress çalıştırmak için en iyi yolu nedir?

5 Cevap php

Ben Nginx ve köpekten http://mydomain çalışan standart bir Rails uygulaması var. I http://mydomain.com/blog bir Wordpress blog çalıştırmak gerekir. Benim tercih aynı sunucuda veya ayrı bir kutuda ya da üzerinde Apache çalışan blog ev sahipliği olurdu ama ben kullanıcı URL'ye farklı bir sunucu görmek istemiyorum. Olması mümkün değil ise, hedefe ulaşmak için ne önerirsiniz?

5 Cevap

Ben joelhardi çözümü aşağıdaki üstün olduğunu düşünüyorum. Ancak, benim kendi uygulama, ben Rails sitede (bellek sorunları ayrılması) daha ayrı bir VPS blog tutmak istiyorum. Kullanıcı aynı URL görmek yapmak için, başka bir kutuyu port 80 (veya her neyse) size vekil dışında, normal bir melez kümeye vekalet için kullandığınız aynı proxy hile kullanmak. Kolay peasy. Kullanıcıya bu melez için proxy olarak şeffaf - onlar sadece nginx alanınızdaki noktası 80 yanıt "görmek".

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

Sen Raylar tesadüfen, istediğiniz HERHANGİ sunucu teknolojisi ile birlikte oynamak için bu hile kullanabilirsiniz. Doğrudan uygun sunucu / port Proxy ve nginx dış dünyadan gizlemek olacaktır. URL'ler tüm aynı etki sevk edecektir beri Ayrıca, sen seemlessly PHP tabanlı bir blog, Python tabanlı izleme sistemi, ve Rails app entegre edebilirsiniz - sürece doğru URL'leri yazmak gibi.

Eğer Nginx kullanarak konum beri Aslında, büyük şekil zaten konum ve Apache gerekmez.

(Bu nasıl örnekleri in the Nginx wiki) vardır fastcgi ile PHP çalıştırmak ve PHP bazı Raylar URL'leri ve diğerlerini yönlendirmek için Nginx yapılandırmasında bir URL eşleşen deseni kullanabilirsiniz.

Burada (. Da zaten bu yapılandırma ile çalışan fantezi URL'ler olacak bu yüzden de, WordPress htaccess ve Nginx eşdeğer koydum not) PHP fastcgi ile WordPress blog çalışan için bir örnek Nginx konfigürasyon:

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

    }
}

İşte (Ben bu yüzden benim sanal konak yapılandırma tüm dosyaları doğru yere dahil ayrı bir dosyaya koyun, ama bunu yapmak zorunda değilsiniz) yukarıdaki config dahil ediyorum fastcgi.conf dosyasıdır:

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

Ben de Nginx wiki anlaşılacağı ne olur, ve (Lighttpd oldukça hızlı w / garip bağımlılıkları o derlemek, yüklemek için bu kadar hızlı ve kolay bir şey) benim CGI-yumurtlayan olarak Lighttpd dan spawn-fcgi kullanabilirsiniz, ama aynı zamanda yapabilirsiniz Bunun için kısa bir kabuk / Perl komut dosyası kullanabilirsiniz.

Yukarıdaki cevaplar oldukça sorunuzu giderir.

Bir alternatif FCGI php-fpm kullanmak olacaktır. Dokümanlar biraz seyrek ama iyi çalışıyor.

Nginx şimdi provides a script for doing this Eğer EC2 / AWS ortamda eğer.

Bu duruma kolaylıkla adapte olabilir. Bu oldukça kullanışlı.

Bir yeniden yazma manipülatör gibi bir şey istediğini yapacağını gibi geliyor bana. Ben artık detayları yok - Üzgünüz sadece :) yüksek sesle düşünme