VMware Images:
|
How To Set Up Apache2 With mod_fcgid And PHP5 On OpenSUSE 11.3
How To Set Up Apache2 With mod_fcgid And PHP5 On OpenSUSE 11.3Version 1.0 This tutorial describes how you can install Apache2 with mod_fcgid and PHP5 on OpenSUSE 11.3. mod_fcgid is a compatible alternative to the older mod_fastcgi. It lets you execute PHP scripts with the permissions of their owners instead of the Apache user. I do not issue any guarantee that this will work for you!
1 Preliminary NoteI'm using an OpenSUSE 11.3 server in this tutorial with the hostname server1.example.com and the IP address 192.168.0.100. I will create two Apache vhosts in this tutorial, www.example1.com and www.example2.com, to demonstrate the usage of mod_fcgid.
2 Installing Apache2/mod_fcgi/PHP5We can install Apache2, mod_fcgid, and PHP5 as follows: yast2 -i apache2 apache2-mod_fcgid php5-fastcgi If Apache2 was already installed with PHP5 as an Apache module, disable the PHP5 module now: a2dismod php5 Next enable the suexec and fcgid modules: a2enmod suexec Then we create the system startup links for Apache and start it: chkconfig --add apache2 Next we open /etc/php5/fastcgi/php.ini... vi /etc/php5/fastcgi/php.ini ... and uncomment the line cgi.fix_pathinfo = 1:
Then restart Apache: /etc/init.d/apache2 restart
3 Creating Vhosts For www.example1.com And www.example2.comI will now create two vhosts, www.example1.com (with the document root /srv/www/web1/web) and www.example2.com (with the document root /srv/www/web2/web). www.example1.com will be owned by the user and group web1, and www.example2.com by the user and group web2. First we create the users and groups: groupadd web1 Then we create the document roots and make them owned by the users/groups web1 resp. web2: mkdir -p /srv/www/web1/web We will run PHP using suExec; suExec's document root is /srv/www, as the following command shows: /usr/sbin/suexec2 -V server1:~ # /usr/sbin/suexec2 -V Therefore we cannot call the PHP binary (/usr/bin/php-cgi) directly because it is located outside suExec's document root. As suExec does not allow symlinks, the only way to solve the problem is to create a wrapper script for each web site in a subdirectory of /srv/www; the wrapper script will then call the PHP binary /usr/bin/php-cgi. The wrapper script must be owned by the user and group of each web site, therefore we need one wrapper script for each web site. I'm going to create the wrapper scripts in subdirectories of /srv/www/php-fcgi-scripts, e.g. /srv/www/php-fcgi-scripts/web1 and /srv/www/php-fcgi-scripts/web2. mkdir -p /srv/www/php-fcgi-scripts/web1 vi /srv/www/php-fcgi-scripts/web1/php-fcgi-starter
vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter
The PHPRC line contains the directory where the php.ini file is located (i.e., /etc/php5/fastcgi/ translates to /etc/php5/fastcgi/php.ini). PHP_FCGI_MAX_REQUESTS is the maximum number of requests before an fcgid process is stopped and a new one is launched. PHP_FCGI_CHILDREN defines the number of PHP children that will be launched. The php-fcgi-starter scripts must be executable, and they (and the directories they are in) must be owned by the web site's user and group: chmod 755 /srv/www/php-fcgi-scripts/web1/php-fcgi-starter Now we create the Apache vhosts for www.example1.com and www.example2.com: vi /etc/apache2/vhosts.d/www.example1.com.conf
vi /etc/apache2/vhosts.d/www.example2.com.conf
Make sure you fill in the right paths (and the correct user and group in the SuexecUserGroup lines). Open /etc/apache2/httpd.conf and add the line NameVirtualHost * before the Include /etc/apache2/vhosts.d/*.conf line (otherwise only the first vhost will work): vi /etc/apache2/httpd.conf
Before we restart Apache, we change the permissions of the suExec executable (otherwise you will see the following warning when you restart Apache: Warning: SuexecUserGroup directive requires SUEXEC wrapper.): chmod 4755 /usr/sbin/suexec2 Restart Apache afterwards: /etc/init.d/apache2 restart
|




Recent comments
22 hours 21 sec ago
1 day 7 hours ago
1 day 8 hours ago
1 day 11 hours ago
1 day 16 hours ago
1 day 16 hours ago
1 day 18 hours ago
2 days 4 hours ago
2 days 9 hours ago
2 days 11 hours ago