Lighttpd run php from different host using mod_proxy / mod_fastcgi
Lighttpd allows you to run php from different hosts. This is quite useful:
a] If you want to run php 4 locally and php 5 from remote host
b] Load balancing dynamic content
c] Added layer for security for chrooted jails etc
If you would like to run wikipedia / sf.net like site, you can use this technique. You can use mod_proxy or standard mod_fastcgi for this purpose.
How it works?
You need to use spawn-fcgi binary that spawns fastcgi processes. With spawn-fcgi you can bind php to particular port or unix-domain socket (little fast as compare to tcp port). It will take off some load from the webserver you have to control the FastCGI process by a external program like spawn-fcgi.
For example following command uses unix-domain to launch fastcgi process:
spawn-fcgi -s /tmp/php-fastcgi.sock -f /usr/bin/php-cgi -u lighttpd -g lighttpd -C 5 -P /var/run/spawn-fcgi.pid
This one bind itself to TCP port 8081
spawn-fcgi -p 8081 -a 192.168.1.10 -f /usr/bin/php-cgi -u lighttpd -g lighttpd -C 5 -P /var/run/spawn-fcgi-1.pid
Where,
- -f {fcgiapp} filename of the fcgi-application, e.g php - /usr/bin/php-cgi
- -a {addr} : bind to ip address
- -p {port} : bind to tcp-port
- -s {path} : bind to unix-domain socket
- -C {childs} : (PHP only) numbers of childs to spawn (default 5)
- -P {path} : name of PID-file for spawed process, so that we can kill process later on
- -n : no fork (for daemontools)
- -c {dir} : chroot to directory
- -u {user} : change to user-id
- -g {group} : change to group-id
Using mod_proxy / mod_fastcgi, we can process everything on 192.168.1.10 or cluster of php servers:
Web server <----> php-request <----> PHP listing on 192.168.1.10:8080
A php / ruby / java app cluster server:
Web server <----> php-request <----> // PHP listing on 192.168.1.10:8080
// PHP listing on 192.168.1.11:8080
// PHP listing on 192.168.1.12:8080
Task: Run php from 192.168.1.10 and 8081 port
Make sure you copy spawn-fcgi file to 192.168.1.10, now enter following command:
# spawn-fcgi -p 8081 -a 192.168.1.10 -f /usr/bin/php-cgi -u lighttpd -g lighttpd -C 10 -P /var/run/spawn-fcgi.pid
Make sure firewall is not blocking access to 192.168.1.10:8081
Now open ligttpd.conf on other host and enter mod_fastcgi as config as follows:
fastcgi.server = ( ".php" =>
((
"host" => "192.168.1.10",
"port" => 8081
))
)
Save and close the file. Restart lighttpd:
# /etc/init.d/lighttpd restart
You can use mod_proxy configuration as follows, if one of the hosts goes down the all requests for this one server are moved equally to the other servers.
$HTTP["host"] == "www.myweb2.0.com" {
proxy.balance = "hash"
proxy.server = ( "" => ( ( "host" => "192.168.1.5","port" => 8080 ),
( "host" => "192.168.1.6" ,"port" => 8080),
( "host" => "192.168.1.7" ,"port" => 8080),
( "host" => "192.168.1.8" ,"port" => 8080),
( "host" => "192.168.1.9" ,"port" => 8080) ) )
}
This is just an introduction, feel free to explore mod_proxy documentation for more information.
Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
You may also be interested in other helpful articles:
- Lighttpd PHP fastcgi configuration
- Lighttpd 1.5 fastcgi php mod proxy backend fastcgi configuration howto
- How to: Run and install PHP FastCGI on Microsoft IIS Server
- Can someone steal my PHP script without hacking server?
- Lighttpd map html pages to php (execute html pages as php)
Discussion on This Article:
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!
Tags: balancing_dynamic, bind, cluster_server, daemontools, fcgi, lighttpd, Linux, mod_fastcgi, mod_proxy, php_cgi, proxy, server_php, spawn, tcp_port, unix_domain_socket, web_server



is it possible to use 2 hosts like this:
$HTTP["host"] =~ “(^|\.)exemple1\.com$” OR $HTTP["host"] =~ “(^|\.)exemple2\.com$”
?