I’ve got a standard Rails app with Nginx and Mongrel running at http://mydomain. I need to run a WordPress blog at http://mydomain.com/blog. My preference would be to host the blog in Apache running on either the same server or a separate box but I don’t want the user to see a different server in the URL. Is that possible and if not, what would you recommend to accomplish the goal?
Leave a Reply
You must be logged in to post a comment.
Actually, since you’re using Nginx, you’re already in great shape and don’t need Apache.
You can run PHP through fastcgi (there are examples of how to do this in the Nginx wiki), and use a URL-matching pattern in your Nginx configuration to direct some URLs to Rails and others to PHP.
Here’s an example Nginx configuration for running a WordPress blog through PHP fastcgi (note I’ve also put in the Nginx equivalent of the WordPress .htaccess, so you will also have fancy URLs already working with this config):
Here’s the fastcgi.conf file I’m including in the above config (I put it in a separate file so all of my virtual host config files can include it in the right place, but you don’t have to do this):
I also happen to do what the Nginx wiki suggests, and use spawn-fcgi from Lighttpd as my CGI-spawner (Lighttpd is a pretty fast compile w/o weird dependencies, so a quick and easy thing to install), but you can also use a short shell/Perl script for that.
I think joelhardi’s solution is superior to the following. However, in my own application, I like to keep the blog on a separate VPS than the Rails site (separation of memory issues). To make the user see the same URL, you use the same proxy trick that you normally use for proxying to a mongrel cluster, except you proxy to port 80 (or whatever) on another box. Easy peasy. To the user it is as transparent as you proxying to mongrel — they only “see” the NGINX responding on port 80 at your domain.
You can use this trick to have Rails play along with ANY server technology you want, incidentally. Proxy directly to the appropriate server/port, and NGINX will hide it from the outside world. Additionally, since the URLs will all refer to the same domain, you can seemlessly integrate a PHP-based blog, Python based tracking system, and Rails app — as long as you write your URLs correctly.
The answers above pretty addresses your question.
An alternative FCGI would be to use php-fpm. Docs are a tad sparse but it works well.
Nginx now provides a script for doing this if you’re in the EC2 / AWS environment.
It may be easily adaptable to your situation. It’s pretty handy.
Seems to me that something like a rewrite manipulator would do what you want. Sorry I don’t have anymore details — just thinking aloud 🙂