One thing I don’t like about virtualmin is the absence of suphp. After a few modifications, I managed to integrade it and make it the default php handler for new virtual hosts. This howto is based on centOS 5.5 32bit and virtualmin 3.83 gpl, you may have to change some things if you’re on another linux distribution such as paths or update manager commands, but the procedure will be more or less the same.
First you’ll need to install some things required for suphp installation
yum install gcc-c++ gcc httpd-devel
Download and install suphp
wget http://suphp.org/download/suphp-0.7.1.tar.gz tar -xzvf suphp-0.7.1.tar.gz cd suphp-0.7.1 ./configure --prefix=/usr --sysconfdir=/etc --with-apxs=/usr/sbin/apxs --with-apache-user=apache --with-setid-mode=paranoid --with-apr=/usr/bin/apr-1-config make make install
create the configuration file for suphp
cp suphp.conf.example /etc/suphp.conf
and modify it to suit your needs
vi /etc/suphp.conf
mine looks like this (if you’re not sure about what to change, just copy – paste this)
[global] ;Path to logfile logfile=/var/log/httpd/suphp.log ;Loglevel loglevel=info ;User Apache is running as webserver_user=apache ;Path all scripts have to be in docroot=/home ;Path to chroot() to before executing script ;chroot=/mychroot ; Security options allow_file_group_writeable=true allow_file_others_writeable=false allow_directory_group_writeable=true allow_directory_others_writeable=false ;Check wheter script is within DOCUMENT_ROOT check_vhost_docroot=true ;Send minor error messages to browser errors_to_browser=false ;PATH environment variable env_path=/bin:/usr/bin ;Umask to set, specify in octal notation umask=0022 ; Minimum UID min_uid=100 ; Minimum GID min_gid=100 [handlers] ;Handler for php-scripts x-httpd-suphp="php:/usr/bin/php-cgi" ;Handler for CGI-scripts x-suphp-cgi="execute:!self"
add the suphp module to apache
vi /etc/httpd/conf.d/suphp.conf
and insert
LoadModule suphp_module modules/mod_suphp.so
If you want to change existing virtual hosts php handler to suphp then you’ll have to edit apache configuration file
vi /etc/httpd/conf/httpd.conf
go to the end of the file where virtual hosts are being configured and insert the following for each vhost
(of course you’ll have to replace user_for_the_vhost & group_for_the_vhost with the linux user&group the site is running under)
<IfModule mod_suphp.c> suPHP_Engine on suPHP_UserGroup user_for_the_vhost group_for_the_vhost AddHandler x-httpd-suphp .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-suphp </IfModule>
If you were using FCGId, you’ll have to delete (or comment) the following lines from each virtual host
#AddHandler fcgid-script .php #AddHandler fcgid-script .php5 #FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php #FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php5
To have suphp as the default php handler for new vhosts
- login to virtualmin web-interface
- go to system settings -> server templates and edit your default template (if you haven’t created one, the default is named “Default settings”)
- Choose “Apache website” from “edit template section”, in the upper left hand corner
- insert the following in “Directives and settings for new websites”, right under “DocumentRoot ${HOME}/public_html”
<IfModule mod_suphp.c> suPHP_Engine on suPHP_UserGroup ${USER} ${GROUP} AddHandler x-httpd-suphp .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-suphp </IfModule>
to look like this
scroll down and change the “Default PHP execution mode” to “Apache mod_php (run as Apache’s user)”, click Save and restart apache
service httpd restart
Test your sites and you’re done. If you’re having problems have a look at suphp log file at /var/log/httpd/suphp.log
Why not FastCGI?
Does it less secure? or are you running many low-traffic sites?
The second one
Of course you can setup your high traffic sites to use FCGId
Thanks so much for this. You totally saved my day. I’m in the same situation. I run a ton of lower traffic wordpress and drupal sites and just set up a couple new VPS servers using Virtualmin/Webmin.
Mod_php is less than ideal for me because of permissions issues with WordPress maintenance and stuff, and FastCGI is way too RAM intensive for my needs.
Everything worked perfect except for 2 snags I ran into which might be helpful to anyone else reading this:
1. I could only get it to work if I put the Addhandler part down lower in the virtual host section like this:
That’s where the previous FCGI info was. If I put it up right underneath the document root line, it wouldn’t work at all.
Once I did that it worked like a charm.
2. Phpmyadmin quit working after this. I didn’t dig in too deep to figure out why, because I kind of like the Virtualmin MYSQL manager now anyway. Phpmyadmin was just more familiar to me…but not a big deal at all.
Cheers and thanks again for posting this!
Hi, do you know if using suPHP i could use different versions of PHP in diferent servers in Virtualmin? Thanks a lot.
Hi, Miguel
It’s been a while since I’ve used virtualmin, but as far as I can remember you won’t have any problem using different versions of PHP in different vhosts