`
love~ruby+rails
  • 浏览: 849560 次
  • 性别: Icon_minigender_1
  • 来自: lanzhou
社区版块
存档分类
最新评论

Set Up Apache2 With mod_fcgid And PHP5 On Ubuntu 9.04

阅读更多

This tutorial describes how you can install Apache2 with mod_fcgid and PHP5 on Ubuntu 9.04. 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 Note

I'm using an Ubuntu 9.04 server in this tutorial with the hostname server1.example.com and the IP address192.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.

Make sure you're logged in as root:

sudo su

/bin/sh is a symlink to /bin/dash, however we need /bin/bash, not /bin/dash. Therefore we do this:

dpkg-reconfigure dash

Install dash as /bin/sh? <-- No

In addition to that, we must disable AppArmor:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
aptitude remove apparmor apparmor-utils

 

2 Installing Apache2/mod_fcgi/PHP5

In order to install Apache2, mod_fcgid, and PHP5, run

aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi

If Apache2 was already installed with PHP5 as an Apache module, disable the PHP5 module now:

a2dismod php5

Then enable the following modules...

a2enmod rewrite
a2enmod suexec
a2enmod include
a2enmod fcgid

... and open /etc/php5/cgi/php.ini:

vi /etc/php5/cgi/php.ini

Add the line cgi.fix_pathinfo = 1 right at the end of the file:

[...]
cgi.fix_pathinfo = 1

Then restart Apache:

/etc/init.d/apache2 restart

 

3 Creating Vhosts For www.example1.com And www.example2.com

I will now create two vhosts, www.example1.com (with the document root /var/www/web1/web) and www.example2.com(with the document root /var/www/web2/web). www.example1.com will be owned by the user and group web1, andwww.example2.com by the user and group web2.

First we create the users and groups:

groupadd web1
groupadd web2
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2

Then we create the document roots and make them owned by the users/groups web1 resp. web2:

mkdir -p /var/www/web1/web
chown web1:web1 /var/www/web1/web
mkdir -p /var/www/web2/web
chown web2:web2 /var/www/web2/web

We will run PHP using suExec; suExec's document root is /var/www, as the following command shows:

/usr/lib/apache2/suexec -V

root@server1:~# /usr/lib/apache2/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"
root@server1:~#

Therefore we cannot call the PHP binary (/usr/lib/cgi-bin/php) 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 /var/www; the wrapper script will then call the PHP binary /usr/lib/cgi-bin/php. 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 /var/www/php-fcgi-scripts, e.g. /var/www/php-fcgi-scripts/web1 and /var/www/php-fcgi-scripts/web2.

mkdir -p /var/www/php-fcgi-scripts/web1
mkdir -p /var/www/php-fcgi-scripts/web2

vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

The PHPRC line contains the directory where the php.ini file is located (i.e., /etc/php5/cgi/ translates to/etc/php5/cgi/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 /var/www/php-fcgi-scripts/web1/php-fcgi-starter
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter
chown -R web1:web1 /var/www/php-fcgi-scripts/web1
chown -R web2:web2 /var/www/php-fcgi-scripts/web2

Now we create the Apache vhosts for www.example1.com and www.example2.com:

vi /etc/apache2/sites-available/web1

<VirtualHost *:80>
  ServerName www.example1.com
  ServerAlias example1.com
  ServerAdmin webmaster@example1.com
  DocumentRoot /var/www/web1/web/

  <IfModule mod_fcgid.c>
    SuexecUserGroup web1 web1
    PHP_Fix_Pathinfo_Enable 1
    <Directory /var/www/web1/web/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off

</VirtualHost>

a2ensite web1

vi /etc/apache2/sites-available/web2

<VirtualHost *:80>
  ServerName www.example2.com
  ServerAlias example2.com
  ServerAdmin webmaster@example2.com
  DocumentRoot /var/www/web2/web/

  <IfModule mod_fcgid.c>
    SuexecUserGroup web2 web2
    PHP_Fix_Pathinfo_Enable 1
    <Directory /var/www/web2/web/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>

  # ErrorLog /var/log/apache2/error.log
  # CustomLog /var/log/apache2/access.log combined
  ServerSignature Off

</VirtualHost>

a2ensite web2

Make sure you fill in the right paths (and the correct user and group in the SuexecUserGroup line).

Reload Apache afterwards:

/etc/init.d/apache2 reload

分享到:
评论

相关推荐

    mod_fcgid-2.3.9.tar.gz

    Apache mod_fcgid 是一个非常重要的模块,它允许Apache HTTP Server与FastCGI应用程序进行通信,从而提升服务器性能和响应速度。FastCGI是一种常驻型的CGI(Common Gateway Interface)实现,它解决了传统CGI模式下...

    mod_fcgid-2.3.9

    在安装Redmine 2.5.3时,`mod_fcgid`是必要的组件,因为它允许Apache与Ruby on Rails应用(如Redmine)通过FastCGI接口进行通信。安装步骤通常如下: 1. 下载`mod_fcgid-2.3.9`压缩包并解压。 2. 使用Apache的开发...

    mod_fcgid-2.3.6-win32-x86.zip

    5. **modules**:可能是一个包含Apache模块的目录,其中可能包含mod_fcgid的二进制文件。 6. **manual**:可能是mod_fcgid的用户手册或文档,详细解释了如何配置和使用该模块。 综上所述,这个zip文件提供了在...

    mod_fcgid-2.3.10-win32-VS16_javascript_socket_MOD_

    标题中的"mod_fcgid-2.3.10-win32-VS16_javascript_socket_MOD_"提及的是一个特定版本的Apache模块mod_fcgid的Windows 32位构建,该版本是使用Visual Studio 16(可能是VS2019)编译的,并且与JavaScript Socket编程...

    mod_fcgid-2.3.9.tar.bz2

    Apache mod_fcgid 用于 Apache HTTP Server 的 FastCGI 模块作为 2.3.9 发布。

    mod_fcgid-2.3.9_x86

    32位Apache FCGID模块,已确认切实可用,验证Apache版本:2.4

    mod_fcgid-2.3.9_windows_x64

    mod_fcgid-2.3.9 x64 适用于Windows平台Apache 2.4 亲测可用

    Apache2.4 Win64位

    Apache2.4 Win64位 配置PHP: #----------------Fastcgi-------------------------------- LoadModule fcgid_module modules/mod_fcgid.so &lt;IfModule mod_fcgid.c&gt; FcgidMaxRequestsPerProcess 1000 ...

    mod_fcgid-2.3.10-win32-VS16_javascript_socket_MOD_源码.rar

    标题中的"mod_fcgid-2.3.10-win32-VS16_javascript_socket_MOD_源码.rar"指示我们关注的是一个名为mod_fcgid的软件模块的源代码,版本为2.3.10,适配于Windows 32位系统,并且与Visual Studio 2016(VS16)开发环境...

    mod_fcgid.so

    mod_fcgid.so

    mod_fcgid-开源

    2. mod_fcgid:作为Apache的模块,mod_fcgid负责管理和调度FastCGI进程。它支持多种脚本语言,如PHP、Perl、Python等,提供了一种高效且可靠的Web服务器扩展解决方案。 3. 进程管理策略:mod_fcgid的进程管理策略...

    mod_fcgid-2.3.9-17.el8.aarch64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    apache和C++实现fastcgi时Apache中httpd.conf的配置

    在Debian/Ubuntu系统中,可以通过`sudo apt-get install libapache2-mod-fcgid`命令安装;在CentOS/RHEL系统中,可以使用`sudo yum install mod_fcgid`。安装完成后,确保在`httpd.conf`文件中加载该模块,添加或...

    mod_fcgid-2.3.9-6.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    mod_fcgid-2.3.9-4.el7_4.1.x86_64.rpm

    离线安装包,亲测可用

    mod-fcgid-2.3.9-windows-x64

    Win环境下安装Apache2+fastcgi+php5(non thread safe)+MySql5+ZendGuardLoader

    由Apache 500错误引出的临时文件问题分析解决

    查看apache日志,发觉是mod_fcgid模块异常,提示”Connection reset by peer:mod_fcgid:error reading data from FastCGI server”、”Premature end of script headers:index.php”、”process /usr/… apache/cgi-...

    windows下apache+fastCGI+PHP的安装与配置小计

    - 解压缩下载的文件,并将其中 `modules` 文件夹下的 `mod_fcgid.so` 文件复制到 Apache 的 `modules` 目录下。 - **配置 Apache**: - 修改 `httpd.conf` 配置文件: - 在 `&lt;Directory&gt;` 块中添加 `Options ...

Global site tag (gtag.js) - Google Analytics