Frage

Ich habe einen Standard-Rails app, mit Nginx und Mischlings laufen unter http: // mydomain . Ich brauche ein Wordpress-Blog unter http://mydomain.com/blog laufen. Meine Präferenz wäre das Blog in Apache entweder auf demselben Server oder eine separate Box laufen zu hosten, aber ich mag nicht der Benutzer einen anderen Server in der URL zu sehen. Ist das möglich und wenn nicht, was würden Sie empfehlen, um das Ziel zu erreichen?

War es hilfreich?

Lösung

Ich denke, joelhardi Lösung der folgenden überlegen ist. Doch in meiner eigenen Anwendung, wie ich auf einem separaten VPS den Blog zu halten als die Rails-Website (Trennung von Speicherproblemen). Um dem Benutzer zu machen die gleiche URL sehen, verwenden Sie den gleichen Proxy-Trick, die Sie normalerweise für Proxying zu einem Mischlings Cluster verwenden, außer Sie Proxy auf Port 80 (oder was auch immer) auf einem anderen Feld. Kinderleicht. Für den Benutzer ist es so transparent wie Sie mongrel Proxying -. Sie nur „sehen“ die NGINX reagiert auf Port 80 in Ihrer Domain

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

Sie können diesen Trick verwenden, haben Rails mit jedem Server-Technologie Mitspielen Sie übrigens wollen. Proxy direkt an den entsprechenden Server / Port und NGINX wird es von der Außenwelt verbergen. Da außerdem die URLs alle auf die gleiche Domain beziehen, können Sie seemlessly ein PHP-basiertes Blog integrieren, Python-basiertes Tracking-System und Rails-Anwendung -. So lange, wie Sie Ihre URLs richtig schreiben

Andere Tipps

Eigentlich, da Sie Nginx verwenden, sind Sie bereits in der großen Form und nicht Apache benötigen.

Sie können PHP durch fastcgi laufen (es gibt Beispiele dafür, wie dies zu tun in der Nginx Wiki ), und in Ihrer Konfiguration Nginx eine URL-Matching-Muster verwenden, um einige URLs auf Rails und andere PHP zu lenken.

Hier ist ein Beispiel Nginx Konfiguration für ein Wordpress-Blog über PHP FastCGI läuft (man beachte ich auch in der entsprechenden Nginx gesetzt habe von der Wordpress-.htaccess, so dass Sie auch Lust URLs bereits mit dieser Konfiguration arbeiten haben werden):

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

    }
}

Hier ist die fastcgi.conf Datei, die ich in der obigen Konfiguration einschließlich bin (ich es in einer separaten Datei eingeben, damit alle meine virtuellen Host-Konfigurationsdateien kann es an der richtigen Stelle ist, aber Sie haben nicht, dies zu tun ):

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

ich zufällig auch das tun, was die Nginx Wiki schlägt vor, und verwenden Laich fcgi von Lighttpd als meine CGI-spawner (Lighttpd ist ein ziemlich schnell kompilieren w / o seltsame Abhängigkeiten, so dass eine schnelle und einfache Sache zu installieren), aber Sie können auch einen kurzen Shell / Perl-Skript für diese verwenden.

Die Antworten oben ziemlich Adressen Ihre Frage.

Eine alternative FCGI wäre php-fpm zu verwenden. Docs ist ein bisschen spärlich, aber es funktioniert gut.

Nginx jetzt bietet ein Skript, dies zu tun wenn Sie in der EC2 sind / AWS-Umgebung.

Es kann auf Ihre Situation leicht anpassbar sein. Es ist ziemlich praktisch.

Es scheint mir, dass so etwas wie ein Rewrite-Manipulator würde tun, was Sie wollen. Leider habe ich nicht mehr Details - nur laut denken:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top