Rails 애플리케이션과 동일한 도메인에서 Wordpress를 실행하는 가장 좋은 방법은 무엇입니까?

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

문제

Nginx와 Mongrel이 실행되는 표준 Rails 앱이 있습니다. http://내도메인.다음에서 Wordpress 블로그를 운영해야 합니다. http://mydomain.com/blog.내가 선호하는 것은 동일한 서버나 별도의 상자에서 실행되는 Apache에서 블로그를 호스팅하는 것이지만 사용자가 URL에서 다른 서버를 보는 것을 원하지 않습니다.그것이 가능합니까? 그렇지 않다면 목표를 달성하기 위해 무엇을 추천하시겠습니까?

도움이 되었습니까?

해결책

나는 joelhardi의 솔루션이 다음보다 우수하다고 생각합니다.그러나 내 애플리케이션에서는 블로그를 Rails 사이트가 아닌 별도의 VPS에 유지하는 것을 좋아합니다(메모리 분리 문제).사용자가 동일한 URL을 볼 수 있도록 하려면 다른 상자의 포트 80(또는 기타)으로 프록시하는 것을 제외하고 일반적으로 잡종 클러스터에 프록시하는 데 사용하는 것과 동일한 프록시 트릭을 사용합니다.쉬워요.사용자에게는 잡종에게 프록싱하는 것처럼 투명합니다. 그들은 도메인의 포트 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 앱을 원활하게 통합할 수 있습니다.

다른 팁

실제로 Nginx를 사용하고 있으므로 이미 좋은 상태이므로 Apache가 필요하지 않습니다.

fastcgi를 통해 PHP를 실행할 수 있습니다. (이를 수행하는 방법에 대한 예가 있습니다.) Nginx 위키에서), 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 위키가 제안한 것을 수행하고 Lighttpd의 Spawn-fcgi를 내 CGI 생성기로 사용합니다(Lighttpd는 이상한 종속성이 없는 매우 빠른 컴파일이므로 빠르고 쉽게 설치할 수 있습니다). 이를 위해서는 짧은 쉘/Perl 스크립트를 사용하십시오.

위의 답변은 귀하의 질문에 대한 답변입니다.

대안적인 FCGI는 php-fpm을 사용하는 것입니다.문서는 약간 드물지만 잘 작동합니다.

지금 Nginx 이를 수행하기 위한 스크립트를 제공합니다. EC2/AWS 환경에 있는 경우.

귀하의 상황에 쉽게 적응할 수 있습니다.꽤 편리합니다.

다시 쓰기 조작기와 같은 것이 원하는 대로 작동할 것 같습니다.죄송합니다. 더 이상 자세한 내용이 없습니다. 그냥 소리내어 생각해 보세요. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top