Quelle est la meilleure façon d'exécuter Wordpress sur le même domaine qu'une application Rails?

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

Question

J'ai une application Rails standard avec Nginx et Mongrel exécutée à l'adresse http: // mydomain . Je dois exécuter un blog Wordpress à l'adresse http://mondomaine.com/blog . Ma préférence serait d’héberger le blog dans Apache fonctionnant sur le même serveur ou dans une boîte distincte, mais je ne souhaite pas que l’utilisateur voie un serveur différent dans l’URL. Est-ce possible et si non, que recommanderiez-vous pour atteindre l'objectif?

Était-ce utile?

La solution

Je pense que la solution de joelhardi est supérieure à la suivante. Cependant, dans ma propre application, j'aime bien garder le blog sur un VPS distinct du site Rails (séparation des problèmes de mémoire). Pour que l'utilisateur voie la même URL, vous utilisez la même astuce de proxy que celle que vous utilisez normalement pour le proxy d'un cluster métis, sauf que vous utilisez le port proxy 80 (ou autre) sur une autre boîte. Peasy facile. Pour l'utilisateur, il est aussi transparent que vous utilisez un proxy pour un métis: ils ne peuvent que "voir". NGINX répondant sur le port 80 de votre domaine.

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

Vous pouvez utiliser cette astuce pour que Rails joue avec TOUTE technologie de serveur de votre choix, par ailleurs. Proxy directement sur le serveur / port approprié, et NGINX le cachera au monde extérieur. De plus, étant donné que les URL se rapporteront toutes au même domaine, vous pouvez sans effort intégrer un blog basé sur PHP, un système de suivi basé sur Python et une application Rails, tant que vous écrivez correctement vos URL.

Autres conseils

En fait, puisque vous utilisez Nginx, vous êtes déjà en pleine forme et n'avez pas besoin d'Apache.

Vous pouvez utiliser PHP via fastcgi (il existe des exemples de cette procédure dans le wiki Nginx . ) et utilisez un modèle de correspondance d’URL dans votre configuration Nginx pour diriger certaines URL vers Rails et d’autres vers PHP.

Voici un exemple de configuration de Nginx pour l’exécution d’un blog WordPress via PHP fastcgi (remarque: j’ai également introduit l’équivalent Nginx de WordPress .htaccess. Vous aurez donc également des URL fantaisistes fonctionnant déjà avec cette configuration):

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

    }
}

Voici le fichier fastcgi.conf que j'inclus dans la configuration ci-dessus (je l'ai placé dans un fichier séparé pour que tous les fichiers de configuration de mon hôte virtuel puissent l'inclure au bon endroit, mais vous n'avez pas à le faire. ):

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

Je fais aussi ce que suggère le wiki Nginx et utilise spawn-fcgi de Lighttpd comme géniteur CGI (Lighttpd est une compilation assez rapide sans dépendances étranges, donc une installation rapide et facile), mais vous pouvez également utiliser un court script shell / Perl pour cela.

Les réponses ci-dessus répondent plutôt à votre question.

Une alternative FCGI serait d’utiliser php-fpm. Les documents sont un peu clairsemés mais cela fonctionne bien.

Nginx maintenant fournit un script pour cela si vous êtes dans l'EC2 / Environnement AWS.

Il peut être facilement adaptable à votre situation. C'est très pratique.

Il me semble que quelque chose comme un manipulateur de réécriture ferait ce que vous voulez. Désolé, je n'ai plus de détails - je ne fais que penser à haute voix:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top