Rails 애플리케이션과 동일한 도메인에서 Wordpress를 실행하는 가장 좋은 방법은 무엇입니까?
Nginx와 Mongrel이 http://mydomain에서 실행되는 표준 Rails 앱을 가지고 있습니다.http://mydomain.com/blog에서 워드프레스 블로그를 운영해야 합니다.Apache 블로그를 같은 서버 또는 다른 박스에서 실행하는 것이 좋습니다만, 유저에게 URL에 다른 서버를 표시하고 싶지 않습니다.그것이 가능합니까?그렇지 않다면 무엇을 추천하시겠습니까?
사실, 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의 span-fcgi를 CGI 스패너로 사용합니다(Lighttpd는 매우 빠른 컴파일이므로 빠르고 쉽게 설치할 수 있습니다). 단, 이를 위해 짧은 셸/페를 사용할 수도 있습니다.
저는 Joelhardi의 솔루션이 다음보다 우수하다고 생각합니다.다만, 자신의 애플리케이션에서는, Rails 사이트(메모리 문제의 분리)와는 다른 VPS에 블로그를 보관하고 싶다고 생각하고 있습니다.사용자에게 같은 URL을 표시하기 위해서는 mongrel 클러스터로의 프록시에 통상 사용하는 것과 같은 프록시 트릭을 사용합니다.단, 다른 박스의 포트 80(또는 그 외의 것)에 프록시 하는 것을 제외합니다.쉬워요.사용자에게는 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 앱을 쉽게 통합할 수 있습니다.
위의 답변은 당신의 질문에 대한 답변입니다.
대체 FCGI는 php-fpm을 사용하는 것입니다.문서는 조금 희박하지만 잘 작동합니다.
Nginx는 EC2/AWS 환경에 있는 경우 이를 수행하기 위한 스크립트를 제공합니다.
그것은 당신의 상황에 쉽게 적응할 수 있을 것이다.꽤 편리하네요.
내가 보기엔 개서 조작기 같은 게 네가 원하는 걸 할 것 같아.더 이상 자세한 것은 모릅니다만, 큰 소리로 생각하고 있습니다. :)
언급URL : https://stackoverflow.com/questions/89504/whats-the-best-way-to-run-wordpress-on-the-same-domain-as-a-rails-application
'programing' 카테고리의 다른 글
| 템플릿 전체에서 사용할 수 있는 PHP 글로벌 변수를 선언하려면 어떻게 해야 합니까? (0) | 2023.03.16 |
|---|---|
| react.js 컴포넌트를 클릭해서 애니메이션의 끝을 검출하려면 어떻게 해야 합니까? (0) | 2023.03.16 |
| JSON jsonObject.optString()이 문자열 "null"을 반환합니다. (0) | 2023.03.16 |
| 리액트 라우터에서 수동으로 링크를 호출하는 방법 (0) | 2023.03.16 |
| JSON 개체를 TypeScript 클래스에 캐스트하려면 어떻게 해야 합니까? (0) | 2023.03.16 |