16

http://mydomainで Nginx と Mongrel を実行する標準の Rails アプリを持っています。http://mydomain.com/blogで Wordpress ブログを運営する必要があります。私の好みは、同じサーバーまたは別のボックスで実行されている Apache でブログをホストすることですが、ユーザーに URL で別のサーバーを表示させたくありません。それは可能ですか?不可能な場合、目標を達成するために何をお勧めしますか?

4

5 に答える 5

8

実際、あなたは Nginx を使用しているので、すでに調子が良く、Apache は必要ありません。

fastcgi を介して PHP を実行し ( Nginx wiki にこれを実行する方法の例があります)、Nginx 構成で URL マッチング パターンを使用して、一部の URL を Rails に、他の URL を PHP に送信できます。

PHP fastcgi を介して WordPress ブログを実行するための Nginx 構成の例を次に示します (WordPress の .htaccess に相当する Nginx も入れているので、この構成で既に機能している派手な URL もあることに注意してください)。

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 wiki が提案することを行い、Lighttpd の spawn-fcgi を CGI スポーナーとして使用します (Lighttpd は奇妙な依存関係のない非常に高速なコンパイルであるため、すばやく簡単にインストールできます)。そのために短いシェル/Perl スクリプトを使用します。

于 2008-09-18T02:39:20.403 に答える
6

joelhardi のソリューションは、以下よりも優れていると思います。ただし、自分のアプリケーションでは、ブログを Rails サイトとは別の VPS に保持したいと考えています (メモリの分離の問題)。ユーザーに同じ URL を表示するには、別のボックスのポート 80 (またはその他) にプロキシすることを除いて、mongrel クラスターにプロキシするために通常使用するのと同じプロキシ トリックを使用します。簡単です。ユーザーにとっては、mongrel にプロキシするのと同じくらい透過的です。ユーザーは、ドメインのポート 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;
    }

ちなみに、このトリックを使用して、必要なサーバーテクノロジと一緒に Rails を動作させることができます。適切なサーバー/ポートに直接プロキシすると、NGINX はそれを外部から隠します。さらに、URL はすべて同じドメインを参照するため、URL を正しく記述している限り、PHP ベースのブログ、Python ベースの追跡システム、Rails アプリを簡単に統合できます。

于 2008-09-18T08:19:15.110 に答える
2

上記の回答は、あなたの質問にかなり答えています。

代替の FCGI は、php-fpm を使用することです。ドキュメントは少しまばらですが、うまく機能します。

于 2009-04-08T11:52:14.613 に答える
1

EC2 / AWS 環境にいる場合 、 Nginx はこれを行うためのスクリプトを提供するようになりました。

あなたの状況に合わせやすいかもしれません。それはかなり便利です。

于 2012-09-02T04:29:08.727 に答える
0

書き換えマニピュレータのようなものがあなたが望むことをするように私には思えます。申し訳ありませんが、これ以上の詳細はありません。声に出して考えているだけです:)

于 2008-09-18T02:34:50.787 に答える