На самом деле, поскольку вы используете Nginx, вы уже в отличной форме и не нуждаетесь в Apache.
Вы можете запустить PHP через fastcgi (есть примеры того, как это сделать в вики Nginx ), и использовать шаблон сопоставления URL-адресов в конфигурации Nginx, чтобы направлять некоторые URL-адреса на Rails, а другие - PHP.
Вот пример конфигурации Nginx для запуска блога WordPress через PHP fastcgi (обратите внимание, что я также поместил в Nginx эквивалент WordPress .htaccess, поэтому у вас также будут модные 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, и использую spawn-fcgi из Lighttpd в качестве моего CGI-spawner (Lighttpd довольно быстро компилируется без странных зависимостей, поэтому его легко и быстро установить), но для этого вы также можете использовать короткий сценарий shell / Perl.