Vra

Ek het 'n standaard Rails app met Nginx en Voertsek hardloop by http: // my domein . Ek nodig het om 'n Wordpress blog http://mydomain.com/blog hardloop. My voorkeur sou wees om die blog in Apache loop op beide dieselfde bediener of 'n aparte blokkie aan te bied, maar ek wil nie die gebruiker na 'n ander bediener in die URL te sien. Is dit moontlik en so nie, wat sou jy aanbeveel om die doel te bereik?

Was dit nuttig?

Oplossing

Ek dink joelhardi se oplossing is beter as die volgende. Maar in my eie aansoek, ek wil graag die blog op 'n aparte VPS as die Rails webwerf (skeiding van geheue probleme) te hou. Maak die gebruiker dieselfde URL te sien, gebruik jy dieselfde volmag truuk wat jy gewoonlik gebruik vir proxying om 'n baster cluster, behalwe jy volmag om poort 80 (of wat ook al) op 'n ander boks. Baie maklik. Om die gebruiker dit is so deursigtig as jy volmag om baster -. Hulle net "sien" die NGINX reageer op poort 80 by jou domein

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

Jy kan hierdie truuk gebruik om Rails speel saam met enige bediener tegnologie wat jy wil, terloops. Volmag direk na die toepaslike bediener / port, en NGINX sal dit weg te steek van die buitewêreld. Verder, aangesien die URLs sal al verwys na dieselfde domein, kan jy seemlessly integreer 'n PHP-gebaseerde blog, Python gebaseer dop-stelsel, en Rails app -. So lank as wat jy jou URL's korrek te skryf

Ander wenke

Eintlik is sedert jy gebruik Nginx, jy reeds in groot vorm en moenie Apache nie nodig het nie.

Jy kan PHP hardloop deur fastcgi (daar is voorbeelde van hoe om dit te doen in die Nginx wiki ), en gebruik 'n URL wat ooreenstem met patroon in jou Nginx opset om 'n paar URLs om Rails en ander direk na PHP.

Hier is 'n voorbeeld Nginx opset vir die uitvoer van 'n WordPress blog deur PHP fastcgi (let Ek het ook in die Nginx ekwivalent van die WordPress htaccess, sodat jy ook sal moet fancy URLs reeds besig met hierdie 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;
        }

    }
}

Hier is die fastcgi.conf lêer ek insluitend in die bogenoemde config (Ek sit dit in 'n aparte lêer, sodat almal van my virtuele gasheer konfigurasielêers dit kan sluit in die regte plek, maar jy hoef nie om dit te doen ):

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

Ek ook gebeur om te doen wat die Nginx wiki stel, en gebruik kuit-fcgi van lighttpd as my CGI-kuiter (lighttpd is 'n redelik vinnig op te stel w / o vreemde afhanklikhede, so 'n vinnige en maklike ding om te installeer), maar jy kan ook 'n kort dop / Perl script gebruik vir daardie.

Die antwoorde hierbo mooi spreek jou vraag.

'n Alternatiewe FCGI sou wees om php-FPM gebruik. Dokumente is 'n bietjie yl maar dit werk goed.

Nginx nou bied 'n script om dit te doen hierdie as jy in die EC2 / AWS omgewing.

Dit kan maklik aan te pas by jou situasie. Dit is redelik handig.

Lyk vir my dat iets soos 'n herskryf manipuleerder sal doen wat jy wil. Jammer ek het nie meer besonderhede - net hardop dink:)

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top