分类
Dreamweaver

Nginx环境下supesite discuz wordpress rewrite 规则

在VPS上装的是口碑较好的 nginx,即LNMP. 但nginx下静态化规则与apache不同,需要重新配置,我目前用到的几款程序的静态化规则如下:wordpress 、supesite、discuz,nginx下静态化规则 ctrl+c +v following

//supesite nginx 静态化规则
rewrite ^/([0-9]+)/spacelist(.+)$ /index.php?uid/$1/action/spacelist/type$2 last;
rewrite ^/([0-9]+)/viewspace(.+)$ /index.php?uid/$1/action/viewspace/itemid$2 last;
rewrite ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/$1/action/viewbbs/tid$2 last;
rewrite ^/([0-9]+)/(.*)$ /index.php?uid/$1/$2 last;
rewrite ^/([0-9]+)$ /index.php?uid/$1 last;
rewrite ^/action(.+)$ /index.php?action$1 last;
rewrite ^/category(.+)$ /index.php?action/category/catid$1 last;
rewrite ^/viewnews(.+)$ /index.php?action/viewnews/itemid$1 last;
rewrite ^/viewthread(.+)$ /index.php?action/viewthread/tid$1 last;
rewrite ^/mygroup(.+)$ /index.php?action/mygroup/gid$1 last;

//discuz nginx 静态化规则

rewrite ^/archiver/((fid|tid)-[w-]+.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+).html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+).html$ /space.php?$1=$2 last;
rewrite ^/tag-(.+).html$ /tag.php?name=$1 last;
break;

//wordpress nginx 静态化规则
location / {
index index.html index.php;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}

分类
Dreamweaver

Nginx+Apache搭建前后端web生产环境

为什么不使用nginx+php(fastcgi)作为生产环境?我提出我的看法.

  1. php(fastcgi)不够稳定,经常出现502错误,生成相对复杂的页面没有优势,反而会使php-cgi进程变为僵尸进程.
  2. 安全性,多用户多站点权限问题.php(fastcgi)在应对多用户多站点往往捉襟见肘,不易于实施.
  3. 整合其他开发语言,apache表现得游刃有余.资源利用恰到好处.

为什么采用nginx做前端,apache作为后端的方案?nginx在处理静态内容上较apache是几倍或几十倍的差异,因而放在前面过滤静态内容是最为恰当的.同时nginx也是一个负载均衡器,低资源消耗,高性能转发是它的特点.经过nginx在前面的过滤,后端的apache需要处理的内容相对就比较少了.只需负责处理动态内容就可以了.在性能与稳定性的权衡下,使用nginx+apache搭配会让它们在各自擅长的领域展现自身的价值.

本教程以CentOS 5.4 32bit为环境.其他Linux发行版本暂未测试.nginx,php,apache,mysql,pureftpd均为最新稳定版.

获取操作系统源更新.

yum update

yum -y install gcc gcc-c++ bison patch unzip mlocate flex wget automake autoconf gd cpp gettext readline-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel libidn libidn-devel openldap openldap-devel openldap-clients openldap-servers nss_ldap expat-devel libtool libtool-ltdl-devel

如果系统默认安装了apache,请先卸载.执行:

yum remove httpd

下载最新稳定版的程序源码包,以下都是到官方网站或sourceforge下载的源码包.

cd /usr/local/src

wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.45.tar.gz/from/http://mysql.he.net/

wget http://www.apache.org/dist/httpd/httpd-2.2.15.tar.gz

wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz

wget http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2/download

wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download

wget http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2/download

wget http://www.php.net/get/php-5.2.13.tar.gz/from/this/mirror

wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.13.diff.gz

wget http://www.lancs.ac.uk/~steveb/patches/php-mail-header-patch/php5-mail-header.patch

wget http://pecl.php.net/get/memcache-2.2.5.tgz

wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2

wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz

wget http://pecl.php.net/get/imagick-2.3.0.tgz

wget http://download.suhosin.org/suhosin-0.9.29.tgz

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz

wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz

wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz

wget http://sourceforge.net/projects/pcre/files/pcre/8.01/pcre-8.01.tar.gz/download

wget http://nginx.org/download/nginx-0.7.65.tar.gz

wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.28.tar.gz

一.安装Mysql.安装最新稳定版5.1.45版本,并没有采用最新开发版.

cd /usr/local/src

tar -zxf mysql-5.1.45.tar.gz

cd mysql-5.1.45

./configure –prefix=/usr/local/mysql –enable-assembler –enable-thread-safe-client –with-extra-charsets=all –with-big-tables –with-readline –with-ssl –with-embedded-server –enable-local-infile –with-plugins=partition,innodb_plugin,myisam,myisammrg

make && make install

cd ../

groupadd mysql -g 27

useradd mysql -u 27 -g 27 -c “MySQL Server” -d /var/lib/mysql -M

cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

/usr/local/mysql/bin/mysql_install_db –user=mysql

chown -R mysql /usr/local/mysql/var

chgrp -R mysql /usr/local/mysql/.

cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql

chmod u+x /etc/init.d/mysql

chkconfig –level 345 mysql on

echo “/usr/local/mysql/lib/mysql” >> /etc/ld.so.conf

echo “/usr/local/lib” >>/etc/ld.so.conf

ldconfig

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

ln -s /usr/local/mysql/include/mysql /usr/include/mysql

ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config

service mysql start

/usr/local/mysql/bin/mysqladmin -u root password root

service mysql restart

service mysql stop

二.编译安装apache(httpd).apache的执行用户为nobody.

cd /usr/local/src

tar -zxf httpd-2.2.15.tar.gz

cd httpd-2.2.15

./configure –prefix=/usr/local/apache –enable-headers –enable-mime-magic –enable-proxy –enable-rewrite –enable-ssl –enable-suexec –disable-userdir –with-included-apr –with-mpm=prefork –with-ssl=/usr –with-suexec-caller=nobody –with-suexec-docroot=/ –with-suexec-gidmin=100 –with-suexec-logfile=/usr/local/apache/logs/suexec_log –with-suexec-uidmin=100 –with-suexec-userdir=public_html

make

make install

mkdir /usr/local/apache/domlogs

cp /usr/local/apache/bin/apachectl /etc/init.d/httpd

1.编辑/etc/init.d/httpd,在首行#!/bin/sh下添加:

# Startup script for the Apache Web Server

#

# chkconfig: – 85 15

# description: Apache is a World Wide Web server. It is used to serve

# HTML files and CGI.

# processname: httpd

# pidfile: /usr/local/apache/logs/httpd.pid

# config: /usr/local/apache/conf/httpd.conf

ulimit -n 1024

ulimit -n 4096

ulimit -n 8192

ulimit -n 16384

ulimit -n 32768

ulimit -n 65535

保存退出.

2.配置apache配置参数文件httpd.conf,位于/usr/local/apache/conf/目录

cd /usr/local/apache/conf/

mv httpd.conf httpd.conf.bak

mkdir vhosts

vi httpd.conf

输入以下内容:

PidFile logs/httpd.pid
LockFile logs/accept.lock
ServerRoot "/usr/local/apache"
Listen 0.0.0.0:81
User nobody
Group nobody
ServerAdmin admin@evlit.com
ServerName host.evlit.com

Timeout 300
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
TraceEnable Off
ServerTokens ProductOnly
FileETag None
ServerSignature Off
HostnameLookups Off

# LoadModule perl_module modules/mod_perl.so

DocumentRoot "/usr/local/apache/htdocs"

<Directory "/">
 Options ExecCGI FollowSymLinks Includes IncludesNOEXEC -Indexes -MultiViews SymLinksIfOwnerMatch
 Order allow,deny
 Allow from all
 AllowOverride All
</Directory>

<Directory "/usr/local/apache/htdocs">
 Options Includes -Indexes FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

DefaultType text/plain
RewriteEngine on
AddType text/html .shtml
AddHandler cgi-script .cgi .pl .plx .ppl .perl
AddHandler server-parsed .shtml
<IfModule mime_module>

    TypesConfig conf/mime.types
    AddType application/perl .pl .plx .ppl .perl
    AddType application/x-img .img
    AddType application/x-httpd-php .php .php3 .php4 .php5 .php6
    AddType application/x-httpd-php-source .phps
    AddType application/cgi .cgi
    AddType text/x-sql .sql
    AddType text/x-log .log
    AddType text/x-config .cnf conf
    AddType text/x-registry .reg
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddType application/x-tar .tgz
    AddType application/rar .rar
    AddType application/x-compressed .rar
    AddType application/x-rar .rar
    AddType application/x-rar-compressed .rar
    AddType text/vnd.wap.wml .wml
    AddType image/vnd.wap.wbmp .wbmp
    AddType text/vnd.wap.wmlscript .wmls
    AddType application/vnd.wap.wmlc .wmlc
    AddType application/vnd.wap.wmlscriptc .wmlsc
</IfModule>

<IfModule dir_module>
 DirectoryIndex index.html index.htm index.shtml index.php index.perl index.pl index.cgi
</IfModule>

<Files ~ "^error_log$">
 Order allow,deny
 Deny from all

 Satisfy All
</Files>

<FilesMatch "^.ht">
 Order allow,deny
 Deny from all
 Satisfy All
</FilesMatch>

ErrorLog "logs/error_log"
LogLevel warn

<IfModule log_config_module>
 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
 LogFormat "%h %l %u %t "%r" %>s %b" common

 <IfModule logio_module>

 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
 </IfModule>
 CustomLog "logs/access_log" common
</IfModule>

<IfModule alias_module>
 ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"
</IfModule>

<Directory "/usr/local/apache/cgi-bin">
 AllowOverride None
 Options None
 Order allow,deny
 Allow from all
</Directory>

<IfModule mpm_prefork_module>
 StartServers          3
 MinSpareServers       3
 MaxSpareServers       5
 MaxClients          150
 MaxRequestsPerChild   1024
</IfModule>

<IfModule mod_headers.c>
<FilesMatch ".(html|htm|shtml)$">

Header set Cache-Control "max-age=3600, must-revalidate"
</FilesMatch>
</IfModule>

ReadmeName README.html
HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

Include conf/extra/httpd-languages.conf

<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Deny from all
 Allow from 127.0.0.1
</Location>
ExtendedStatus On

<Location /server-info>
 SetHandler server-info
 Order deny,allow
 Deny from all
 Allow from 127.0.0.1

</Location>

<IfModule ssl_module>
Listen 0.0.0.0:443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLCipherSuite ALL:!ADH:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLPassPhraseDialog  builtin
SSLSessionCache         dbm:/usr/local/apache/logs/ssl_scache
SSLSessionCacheTimeout  300
SSLMutex  file:/usr/local/apache/logs/ssl_mutex
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

#Vhosts
NameVirtualHost 127.0.0.1:81
NameVirtualHost *

<VirtualHost 127.0.0.1:81 *>
 ServerName host.evlit.com
 DocumentRoot /var/www/html
 ServerAdmin admin@evlit.com
</VirtualHost>

Include conf/vhosts/*

上述出现的127.0.0.1请改为你本机公网IP.

三.编译安装php(mod_php)

1.编译安装相关支持库

cd /usr/local/src

tar -zxf libiconv-1.13.1.tar.gz

cd libiconv-1.13.1/

./configure

make

make install

cd /usr/local/src

tar -jxf libmcrypt-2.5.8.tar.bz2

cd libmcrypt-2.5.8/

./configure

make

make install

/sbin/ldconfig

cd libltdl/

./configure –enable-ltdl-install

make

make install

cd /usr/local/src

tar -jxf mhash-0.9.9.9.tar.bz2

cd mhash-0.9.9.9/

./configure

make

make install

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la

ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so

ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4

ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8

ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a

ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la

ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so

ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

cd /usr/local/src

tar -zxf mcrypt-2.6.8.tar.gz

cd mcrypt-2.6.8/

/sbin/ldconfig

./configure

make

make install

2.编译php,这里我们为php打入补丁.有助于防止邮件发送被滥用(多用户)以及在邮件中提供有价值的信息.补丁介绍信息请点击:http://www.lancs.ac.uk/~steveb/patches/php-mail-header-patch/

cd /usr/local/src

tar -zxf php-5.2.13.tar.gz

patch -d php-5.2.13 -p1 < php5-mail-header.patch

cd php-5.2.13

./configure –prefix=/usr/local –with-config-file-path=/etc –with-apxs2=/usr/local/apache/bin/apxs –enable-bcmath –enable-calendar –enable-exif –enable-ftp –enable-gd-native-ttf –enable-libxml –enable-magic-quotes –enable-mbstring –enable-pdo=shared –enable-soap –enable-sockets –enable-zip –with-bz2 –with-curl –with-curlwrappers –with-freetype-dir –with-gd –with-gettext –with-jpeg-dir –with-kerberos –with-libexpat-dir=/usr –with-libxml-dir=/usr –with-mcrypt=/usr –with-mhash=/usr –with-mysql=/usr –with-mysql-sock=/var/lib/mysql/mysql.sock –with-mysqli=/usr/bin/mysql_config –with-openssl=/usr –with-openssl-dir=/usr –with-pdo-mysql=shared –with-pdo-sqlite=shared –with-png-dir=/usr –with-sqlite=shared –with-ttf –with-xmlrpc –with-zlib -with-zlib-dir=/usr

make ZEND_EXTRA_LIBS=’-liconv’

make install

cp php.ini-dist /etc/php.ini

3.安装php扩展模块

cd /usr/local/src

tar -zxf memcache-2.2.5.tgz

cd memcache-2.2.5/

phpize

./configure –with-php-config=/usr/local/bin/php-config –with-zlib-dir –enable-memcache

make

make install

cd /usr/local/src

tar -jxf eaccelerator-0.9.6.tar.bz2

cd eaccelerator-0.9.6/

phpize

./configure –enable-eaccelerator=shared –with-php-config=/usr/local/bin/php-config

make

make install

mkdir -p /tmp/eaccelerator

chmod 777 /tmp/eaccelerator

echo “mkdir -p /tmp/eaccelerator” >> /etc/rc.local

echo “chmod 777 /tmp/eaccelerator” >> /etc/rc.local

cd /usr/local/src

tar -zxf ImageMagick.tar.gz

cd ImageMagick-*

./configure

make

make install

cd /usr/local/src

tar -zxf imagick-2.3.0.tgz

cd imagick-2.3.0/

phpize

./configure –with-php-config=/usr/local/bin/php-config

make

make install

cd /usr/local/src

tar -zxf suhosin-0.9.29.tgz

cd suhosin-0.9.29

phpize

./configure

make

make install

cd /usr/local/src

tar -zxf ioncube_loaders_lin_x86.tar.gz

cd ioncube

mkdir /usr/local/ioncube

mv ioncube_loader_lin_5.2.so /usr/local/ioncube/

cd /usr/local/src

tar -zxf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

mkdir -p /usr/local/Zend/lib/Optimizer-3.3.9/php-5.2.x

cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/Zend/lib/Optimizer-3.3.9/php-5.2.x/ZendOptimizer.so

3.1.修改php.ini.

查找/etc/php.ini中的extension_dir = “./”.将其修改为extension_dir = “/usr/local/lib/php/extensions/no-debug-non-zts-20060613/”

查找;include_path = “.:/php/includes”,删除前面的分号,并修改为include_path = “.:/usr/lib/php:/usr/local/lib/php”

跳到最后一行,然后添加以下内容:

extension = “memcache.so”

extension = “pdo.so”

extension = “pdo_mysql.so”

extension = “pdo_sqlite.so”

extension = “sqlite.so”

extension = “eaccelerator.so”

eaccelerator.shm_size = 32

eaccelerator.cache_dir = “/tmp/eaccelerator”

eaccelerator.enable = 1

eaccelerator.optimizer = 0

eaccelerator.debug = 0

eaccelerator.name_space = “”

eaccelerator.check_mtime = 1

eaccelerator.filter = “”

eaccelerator.shm_max = 0

eaccelerator.shm_ttl = 7200

eaccelerator.shm_prune_period = 7200

eaccelerator.shm_only = 1

eaccelerator.compress = 0

eaccelerator.compress_level = 9

eaccelerator.keys = shm

eaccelerator.sessions = shm

eaccelerator.content = shm

zend_extension = “/usr/local/ioncube/ioncube_loader_lin_5.2.so”

zend_extension = “/usr/local/Zend/lib/Optimizer-3.3.9/php-5.2.x/ZendOptimizer.so”

4,安装Memcached(可选)

cd /usr/local/src

tar -xzf libevent-1.4.13-stable.tar.gz

cd libevent-1.4.13-stable

./configure

make

make install

ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib

cd /usr/local/src

tar -xzf memcached-1.4.4.tar.gz

cd memcached-1.4.4

./configure –with-libevent=/usr

make

make install

基本使用方法:

启动:/usr/local/bin/memcached -d -m 64 -p 11211 -u nobody -l localhost

关闭:killall -9 memcached

四.安装nginx

1.安装pcre库

cd /usr/local/src

tar -zxf pcre-8.01.tar.gz

cd pcre-8.01

./configure

make

make install

2.安装nginx

cd /usr/local/src

tar -zxf nginx-0.7.65.tar.gz

cd nginx-0.7.65

./configure –user=nobody –group=nobody –prefix=/usr/local/nginx –pid-path=/usr/local/nginx/logs/nginx.pid –error-log-path=/usr/local/nginx/logs/error.log –http-log-path=/usr/local/nginx/logs/access.log –http-client-body-temp-path=/tmp/nginx_client –http-proxy-temp-path=/tmp/nginx_proxy –http-fastcgi-temp-path=/tmp/nginx_fastcgi –with-http_stub_status_module

make

make install

2.1.添加init控制脚本

#! /bin/sh
ulimit -n 65535
# Description: Startup script for nginx
# chkconfig: 2345 55 25

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/nginx.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

set -e
[ -x "$DAEMON" ] || exit 0

do_start() {
 $DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}

do_stop() {
 kill -QUIT `cat $PIDFILE` || echo -n "nginx not running"
}

do_reload() {
 kill -HUP `cat $PIDFILE` || echo -n "nginx can't reload"
}

case "$1" in
 start)
 echo -n "Starting $DESC: $NAME"
 do_start
 echo "."
 /etc/init.d/httpd start
 ;;
 stop)
 echo -n "Stopping $DESC: $NAME"
 do_stop
 echo "."
 /etc/init.d/httpd stop
 ;;
 reload)
 echo -n "Reloading $DESC configuration..."
 do_reload
 echo "."
 /etc/init.d/httpd restart
 ;;
 restart)
 echo -n "Restarting $DESC: $NAME"
 do_stop
 sleep 1
 do_start
 echo "."
 /etc/init.d/httpd restart
 ;;
 *)
 echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
 exit 3
 ;;
esac

exit 0

保存退出,给该文件赋予执行权限并设置开机启动

chmod u+x /etc/init.d/nginx

chkconfig –level 345 nginx on

2.2.修改nginx配置文件,位于:/usr/local/nginx/conf/目录

cd /usr/local/nginx/conf/

mv nginx.conf nginx.conf.bak

mkdir vhosts

vi nginx.conf

输入以下内容:

worker_processes  1;
worker_rlimit_nofile  65535;
events {
 worker_connections  65535;
 use epoll;
}
error_log  /usr/local/nginx/logs/error.log info;
http {
 include    mime.types;
 default_type  application/octet-stream;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout  10;
 gzip on;
 gzip_http_version 1.0;
 gzip_min_length  1100;
 gzip_comp_level  3;
 gzip_buffers  4 32k;
 gzip_types    text/plain text/xml text/css application/x-javascript application/xml application/xml+rss text/javascript application/atom+xml;
 ignore_invalid_headers on;
 client_header_timeout  3m;
 client_body_timeout 3m;
 send_timeout     3m;
 connection_pool_size  256;
 server_names_hash_max_size 2048;
 server_names_hash_bucket_size 256;
 client_header_buffer_size 256k;
 large_client_header_buffers 4 256k;
 request_pool_size  32k;
 output_buffers   4 64k;
 postpone_output  1460;
 open_file_cache max=1000 inactive=300s;
 open_file_cache_valid    600s;
 open_file_cache_min_uses 2;
 open_file_cache_errors   off;
 include "/usr/local/nginx/conf/vhosts/*.conf";
 server {
 listen 80;
 server_name _;
 access_log off;
 location ~* .(ftpquota|htaccess|asp|aspx|jsp|asa|mdb)$ {
 deny  all;
 }
 location / {
 client_max_body_size    100m;
 client_body_buffer_size 128k;
 proxy_send_timeout   300;
 proxy_read_timeout   300;
 proxy_buffer_size    4k;
 proxy_buffers     16 32k;
 proxy_busy_buffers_size 64k;
 proxy_temp_file_write_size 64k;
 proxy_connect_timeout 30s;
 proxy_pass http://127.0.0.1:81/;
 proxy_set_header   Host   $host;
 proxy_set_header   X-Real-IP  $remote_addr;
 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 }
 }
}

保存退出.

五.为apache安装rpaf模块,该模块用于apache做后端时获取访客真实的IP.

1.使用apxs安装模块.这里要使用此前apache编译安装后的apxs

cd /usr/local/src/

tar -zxf mod_rpaf-0.6.tar.gz

cd mod_rpaf-0.6

/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

2.编辑/usr/local/apache/conf/httpd.conf,添加模块参数,查找LoadModule php5_module modules/libphp5.so,在下方添加:

LoadModule rpaf_module modules/mod_rpaf-2.0.so

#Mod_rpaf settings

RPAFenable On

RPAFproxy_ips 127.0.0.1 [your_ips]

RPAFsethostname On

RPAFheader X-Forwarded-For

上面出现的[your_ips]请修改为你本机所监听web服务的ip.多个IP用空格空开.

六.安装ftp服务器:pure-ftpd

1.编译安装

cd /usr/local/src/

tar -zxf pure-ftpd-1.0.28.tar.gz

cd pure-ftpd-1.0.28

./configure –prefix=/usr/local/pureftpd –with-language=simplified-chinese –with-everything

make

make install

chmod u+x configuration-file/pure-config.pl

cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/

mkdir /usr/local/pureftpd/etc/

cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/

ln -s /usr/local/pureftpd/bin/pure-pw /usr/local/bin/

2.配置pure-ftpd,这里采用PureDB的验证方式.

vi /usr/local/pureftpd/etc/pure-ftpd.conf

查找 PureDB /etc/pureftpd.pdb 取消前面的#号并设置成PureDB/usr/local/pureftpd/etc/pureftpd.pdb

查找 PassivePortRange 取消前面的#号

其他参数根据需要进行修改

3.添加自启动.这里不创建init脚本.直接放在/etc/rc.local启动即可

echo “/usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf –daemonize” > /etc/rc.local

至此.所有安装工作结束.

如何使用这套系统

一,做好必要的安全工作

设置用户家目录/home/user,相关配置参数文件,以及访问日志等目录的权限.

chmod 711 /home

chmod 711 /usr/local/pureftpd

chmod 711 /usr/local/apache/conf/vhosts

chmod 711 /usr/local/nginx/conf/vhosts

chmod 711 /usr/local/apache/domlogs

chmod 711 /usr/local/apache/logs

二,如何创建用户

创建用户分两个步骤.第一步创建系统用户.该命令直接创建用户家目录.第二步创建ftp用户.创建该用户依赖系统用户的创建.步骤如下(以创建用户名为admin为例):

useradd admin -m -s /sbin/nologin

pure-pw useradd admin -u admin -g admin -d /home/admin -m[第一次执行不可用]

pure-pw mkdb[仅限第一次执行]

注意.通过上述方法安装的ftp服务器在第一次创建用户的时候不可以在pure-pw useradd …后直接添加参数-m更新ftp用户数据库.需要分两步执行.以后可以直接在创建用户时在后面添加参数-m,执行之后会提示让你输入密码.需要重复输入两次.

三.如何绑定域名

由于采用前后端操作.因此需要修改两个服务器软件的虚拟主机参数.实例如下(以admin.com为例,用户目录承接上文的/home/admin):

1.创建nginx虚拟主机参数

cd /usr/local/nginx/conf/vhosts

touch admin.com.conf

vi admin.com.conf

输入以下内容:

server {
 error_log /usr/local/nginx/logs/admin.com-error_log warn;
 listen 127.0.0.1:80;
 server_name admin.com www.admin.com;
 access_log off;
 location ~* .(gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg 
|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|rar 
|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
 access_log /usr/local/apache/domlogs/admin.com combined;
 root /home/admin/public_html;
 expires 7d;
 try_files $uri @backend;
 }
 error_page 400 401 402 403 404 405 406 407 408 409 500 501 502 503 504 @backend;
 location @backend {
 internal;
 client_max_body_size    100m;
 client_body_buffer_size 128k;
 proxy_send_timeout   300;
 proxy_read_timeout   300;
 proxy_buffer_size    4k;
 proxy_buffers     16 32k;
 proxy_busy_buffers_size 64k;
 proxy_temp_file_write_size 64k;
 proxy_connect_timeout 30s;
 proxy_redirect http://admin.com:81 http://admin.com;
 proxy_redirect http://www.admin.com:81 http://www.admin.com;
 proxy_pass http://127.0.0.1:81;
 proxy_set_header   Host   $host;
 proxy_set_header   X-Real-IP  $remote_addr;
 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 }
 location ~* .(ftpquota|htaccess|asp|aspx|jsp|asa|mdb)$ {
 deny  all;
 }
 location / {
 client_max_body_size    100m;
 client_body_buffer_size 128k;
 proxy_send_timeout   300;
 proxy_read_timeout   300;
 proxy_buffer_size    4k;
 proxy_buffers     16 32k;
 proxy_busy_buffers_size 64k;
 proxy_temp_file_write_size 64k;
 proxy_connect_timeout 30s;
 proxy_redirect http://admin.com:81 http://admin.com;
 proxy_redirect http://www.admin.com:81 http://www.admin.com;
 proxy_pass http://127.0.0.1:81/;
 proxy_set_header   Host   $host;
 proxy_set_header   X-Real-IP  $remote_addr;
 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

保存退出,注意将上述出现的127.0.0.1替换本机监听web服务的IP

2.创建apache虚拟主机配置文件

cd /usr/local/apache/conf/vhosts

touch admin.com.conf

vi admin.com.conf

输入以下内容:

<VirtualHost 127.0.0.1:81>

 ServerName admin.com
 ServerAlias www.admin.com
 DocumentRoot /home/admin/public_html
 ServerAdmin admin@evlit.com
 UseCanonicalName Off
 CustomLog /usr/local/apache/domlogs/admin.com combined
 php_admin_value open_basedir "/home/admin:/usr/lib/php:/usr/local/lib/php:/tmp"
 <IfModule !mod_disable_suexec.c>
 SuexecUserGroup admin admin
 </IfModule>
 ScriptAlias /cgi-bin/ /home/admin/public_html/cgi-bin/
</VirtualHost>

保存退出,注意将上述出现的127.0.0.1替换本机监听web服务的IP.

四.如何管理MySQL数据库

1.下载最新版PhpMyAdmin源码包

mkdir -p /var/www/html

chmod -R 711 /var/www

cd /var/www/html

wget http://sourceforge.net/projects/phpmyadmin/files%2FphpMyAdmin%2F3.3.0%2FphpMyAdmin-3.3.0-all-languages.tar.bz2/download

tar -jxf phpMyAdmin-3.3.0-all-languages.tar.bz2

mv phpMyAdmin-3.3.0-all-languages phpmyadmin

2.增加apache配置,编辑httpd.conf,转到最后一行

cd /usr/local/apache/conf

vi httpd.conf /* shift+g转到最后一行 */

#Managed Tools

<VirtualHost 127.0.0.1:81 *>

ServerName localhost

ServerAlias pma.*

DocumentRoot /var/www/html/phpmyadmin

ServerAdmin admin@localhost

UseCanonicalName Off

</VirtualHost>

同样,修改上述出现的127.0.0.1为你提供web服务的IP.重启apache后.我们打开绑定到服务器IP的pma.yourdomain.com即可访问到phpmyadmin.第一次使用.需要进行配置.具体配置请善用Google.

其他没有照顾到的地方自行添加即可.如perl,sendmail等.

为方便管理员添加用户及绑定域名.我编写了一个脚本.

wget http://icodex.org/vhosts

chmod u+x vhosts

./vhosts

分类
Dreamweaver

保障Ubuntu Apache Web服务器安全

在一个Linux发行版本上设置一个Web服务器是一个很快的过程,不过要让这种设置成为一种安全的过程可能就需要花点儿工夫。本文将向你展示如何有效地使用访问控制和身份验证策略,使你的Apache Web服务器安全。下面所有的例子都假定你用的是Ubuntu7.10,并对Apache进行了基本的配置。不过,这些例子将帮助任何一位运行Apache服务器的用户获得更大的安全性,因为其要领仍然适用于其它Linux系统。本文中所涉及到的方法应当首先在一台测试服务器上进行试验,在成功之后才能迁移到一个实际使用的Web服务器上。

一、文件许可和访问控制

1. 用户和组

首先要保障的是Apache不要以root身份运行,因为如果Apache被攻破的话,那么攻击者就可以控制root账户。下面让我们看一下Apache正以何种用户和组的身份运行:

运行下面的命令:

# ps auwwfx | grep apache www-data 25675 0.0 0.0 10348 508 ? S Jan21 0:00 _ /usr/sbin/apache2 -k start
www-data 25686 0.0 0.2 231816 2208 ? Sl Jan21 0:00 _ /usr/sbin/apache2 -k start
www-data 25688 0.0 0.2 231816 2200 ? Sl Jan21 0:00 _ /usr/sbin/apache2 -k start

可以看出,www-data是运行Apache的用户。不过,我们需要编辑Apache的配置并创建一个新用户和组:

# groupadd www-data
# useradd -g www-data www-data
# vi /etc/apache2/apache2.conf

将User root Group root改为:

User www-data Group www-data

然后重新加载以使改变生效:

# /etc/init.d/apache2 reload

2. 服务文件准许

一个最易被忽视的安全问题是如何正确地使用chmod命令。例如,我们在Apache 的html root目录中创建了一个index.cgi文件,不过在浏览器中打开这个文件时却被告知拒绝访问。为了让我们的index.cgi文件正常工作,我们执行一个chomod 777 index.cgi。在我们如此试验时,每一个Apache管理员都在考虑这样安全吗?答案是否定的。不过,如何使这种许可足够安全并能允许index.cgi脚本正常运行呢?

Apache需要得到准许来访问index.cgi文件。不过,我们不希望人人都能读写index.cgi。这个文件的所有者应当拥有读写这个文件的许可。为此我们需要下面的命令:

# chmod 755 index.cgi

将下面的一行加入到你的Apache.conf文件中是很重要的:

Options FollowSymLinks AllowOverride None

注意:

1、上面的命令行防止Apache访问root之外的文件。

2、有一些Linux发行版本比其它版本拥有更好的安全性。EnGarde Secure Linux就是一个很好的例子,因为它默认情况下就在其Apache配置文件中包含了上面的代码行。

我们并不想让用户在文件系统上的任何地方运行CGI脚本,不过我们确实需要它们在root中运行。对这个问题的解决办法是“Options ExecCGI”指令。

例如,将下面的行添加到/etc/apache2/apache2.conf文件中:

AllowOverride None Options ExecCGI Order allow,deny Allow from all

重新加载Apache:

# /etc/init.d/apache2 reload

那么,如果你拥有只应当被某个网络或IP地址访问的资源怎么办?对这个问题的解决办法是使用我们的Apache配置来为你增强安全性:

先说一个只允许访问192.168.0.0网络的例子,需要改变/etc/apache2/apache2.conf文件中以下的一行:

AllowOverride None Options ExecCGI Order allow,deny Allow from all

将其改为:

AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16

然后重新加载以使更改生效:

# /etc/init.d/apache2 reload

现在只有你内部网络上的用户能够在/home/username/public_html/cgi-bin中运行CGI脚本。

二、身份验证

我们怎样才能仅允许那些拥有正确口令和用户名的用户访问部分web root呢?下面的步骤将向你展示如何安全地做到这一点:

1. 基本验证

允许.htaccess:

# vi /etc/apache2/apache2.conf

将AllowOveride None改为AllowOveride AuthConfig

重新加载以使改变生效:

# sudo /etc/init.d/apache2 reload

创建一个口令文件:

# mkdir /var/www/misc
# chmod a+rx /var/www/misc
# cd /var/www/misc
# htpasswd -bc private.passwords username password Adding password for user username

创建.htaccess

# cd /home/username/public_html/cgi-bin # vi .htaccess

在.htaccess中增加下面的命令:

AuthName My Private Area” AuthType Basic AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user

将AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16

改变为:AllowOverride .htaccess Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16

然后重新加载以使更改生效:

# /etc/init.d/apache2 reload

2、摘要验证(Digest authentication)

另外一种验证方法称之为摘要验证。如果采用摘要验证,你的口令将不是以明文通过网络传送,因为它们总是作为用户口令的一个MD5摘要传送的。如果采用这种方法,那么通过嗅探网络通信的方法就不能决定用户的口令了。

下面创建口令文件:

# mkdir /var/www/misc
# chmod a+rx /var/www/misc
# cd /var/www/misc
# htdigest -c private.passwords realm username Adding password for username in realm realm. New password:

创建 .htaccess :

# cd /home/username/public_html/cgi-bin # vi .htaccess

在.htaccess中增加下面的内容:

AuthName “My Private Area” AuthType Digest AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user

注意:

1、一些老的浏览器并不支持摘要验证(Digest authentication)

2、要完全地保护你的.htaccess就要使用SSL

三、总结

使Apache更安全的下一步措施是使用Apache的模块来帮助实现更好的安全性,例如mod_security 和 mod_chroot。此外,要保护我们的验证我们还需要配置SSL。

分类
Dreamweaver

利用Ubuntu配置全功能服务器–Web服务器

1、安装
只设置网络部分,其它部分全不安装,系统进入后自行安装。
2、系统设置篇
Ubuntu默认root是没有密码的,那么进入到init 1时自动进入到shell,
#sudo passwd root改变root’s password
3、C/C++编译环境安装配置

#apt 命令默认从cdrom安装

注释掉/etc/apt/sources.list中的deb cdrom项, apt会从互联网上安装安装gcc,make
安装gcc,make

sudo apt-get install gcc g++ libgcc1 libg++ make gdb automake
测试环境配置
编写cpp文件
$ echo ‘
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
printf(“Hello
“);
cout<<“World!!
“;
} ‘ > helloworld.cpp
编写makefile
$ echo -e ‘
all:helloworld
helloworld:helloworld.cpp
g++ -g -o $@ helloworld.cpp
‘ > makefile
}

编译执行

$ make all
$ helloworld
如果屏幕输出

Hello
World!!
则安装成功

4、远程ssh安装
#sudo apt-get install ssh
5、Apache安装
#sudo apt-get install apache2
#sudo vi /etc/apache2/apache2.conf
增加内容
ServerName 192.168.2.1(服务器IP地址)
#sudo ./apache2 restart
增加安全模块,以保障Apache服务的正常运行,现在我们安装mod-security。(可选)
#sudo apt-get install libapache2-mod-security
sudo apt-get install libapache2-mod-security
该模块默认是没激活的,我们可以在/etc/apache2/mods-available目录下看到有mod-security.load文件,但在/etc/apache2/mods-enabled目录却没有它的软链接。我们现在激活它:

$sudo ln -s /etc/apache2/mods-available/mod-security.load /etc/apache2/mods-enabled/mod-security.load
$sudo cp /usr/share/doc/libapache2-mod-security/examples/httpd2.conf.example-full /etc/apache2/mods-available/mod-security.conf
$sudo cp /etc/apache2/mods-available/mod-security.conf /etc/apache2/mods-available/mod-security.conf.orig
#sudo vi /etc/ports.conf
Listen 80
Listen 443
#Listen  8080(如果配置JSP虚拟主机的话,请关闭此处端口)

NameVirtualHost 220.201.35.7
#NameVirtualHost *:443
$sudo vi /etc/apache2/mods-available/mod-security.conf

==== mod-security.conf 文件内容开始====
# 检测内容长度以避免堆溢出攻击
SecFilterForceByteRange 32 254 =>SecFilterForceByteRange 32 126

# debug设置
SecFilterDebugLevel 9 =>SecFilterDebugLevel 0

# 设置缺省的动作
SecFilterDefaultAction “deny,log,status:499” =>SecFilterDefaultAction “deny,log,status:404”

# 把设置传递给子目录
SecFilterInheritance Off

# Redirect user on filter match
# 当匹配sh的时候,重新定向到一个特殊的警告页面,该页面是自行编写的,写些警告的话让攻击者知难而退,该段先不要生效,等到相关配置配好之后再失效不迟。记住在配好之后要使之生效。
#SecFilter sh redirect:http://localhost/hack/warning.htm

# Prevent OS specific keywords
#过滤一些敏感的东西,我们使用*是为了攻击者使用/etc/./passwd来绕开检测
SecFilter /etc/passwd =>SecFilter /etc/*passwd
SecFilter /bin/*sh

# Very crude filters to prevent SQL injection attacks
# 防止SQL插入(SQL Injection)攻击
SecFilter “delete[[:space:]]+from”
SecFilter “insert[[:space:]]+into”
SecFilter “select.+from”
SecFilter “select[[:space:]]+from”
SecFilter “union[[:space:]]+from”
==== mod-security.conf 文件内容结束====

sudo ln -s /etc/apache2/mods-available/mod-security.conf /etc/apache2/mods-enabled/mod-security.conf
重启Apache2服务即可。

虚拟主机设置
Ubuntu 的 /etc/apache2/ 目录下有个 Apache2 的主配置文件 apache2.conf。在该文件中我们可以看到有这么一行内容:

Include /etc/apache2/sites-enabled/[^.#]*
这行的意思表明该文件包含了 /etc/apache2/sites-enabled/ 目录中文件名不含 “.” 或 “#” 这两个字符的所有文件。而当我们列出该目录的文件时,发现只有一个 000-default 的软链接文件,实际连接的是 /etc/apache2/sites-available 目录中的 default 文件,不难看出该文件的文件名中并不包含 “.” 或 “#”。所以这个文件当然是要被配置文件 apache2.conf 所包含的了。打开该文件,发现它其实是一个虚拟主机的配置文件,不过由于该文件中的虚拟主机为 *,所以它实际上是一个通用配置文件。如果我们要建立虚拟主机的话,那么就要把该文件改成如下所示:

#NameVirtualHost 220.201.35.7
<VirtualHost 220.201.35.7>
ServerName ubuntu.91ds.com
ServerAlias www.ubuntu.91ds.com
ServerAdmin webmaster@91ds.com
DocumentRoot /var/www/ubuntu
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/ubuntu>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2’s default start page
# in /apache2-default/, but still have / go to the right place
# Commented out for Ubuntu
#RedirectMatch ^/$ /apache2-default/
</Directory>
</VirtualHost>
#    ScriptAlias /cgi-bin/ /var/www/ubuntu/cgi-bin/
#    <Directory “/var/www/ubunut/cgi-bin”>
#        AllowOverride None
#        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
#        Order allow,deny
#        Allow from all
#    </Directory>
<VirtualHost 220.201.35.7>
ServerName linux.91ds.com
ServerAdmin webmaster@91ds.com
DocumentRoot /var/www/linux
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/linux>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2’s default start page
# in /apache2-default/, but stillhave / go to the right place
# Commented out for Ubuntu
#RedirectMatch ^/$ /apache2-default/
</Directory>
#    ScriptAlias /cgi-bin/ /var/www/ubuntu/cgi-bin/
#    <Directory “/var/www/ubunut/cgi-bin”>
#        AllowOverride None
#        Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
#        Order allow,deny
#        Allow from all
#    </Directory>
ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

#    CustomLog /var/log/apache2/access.log combined
#    ServerSignature On

#    Alias /doc/ “/usr/share/doc/”
#    <Directory “/usr/share/doc/”>
#        Options Indexes MultiViews FollowSymLinks
#        AllowOverride None
#        Order deny,allow
#        Deny from all
#        Allow from 127.0.0.0/255.0.0.0 ::1/128
#    </Directory>

</VirtualHost>
下面我们来分析一下上面这段设置中与虚拟主机有关的设置语句:

NameVirtualHost 220.201.35.7:表示我们要做的是一个基于名称的虚拟主机,且其 IP 地址为 220.201.35.7

<VirtualHost 220.201.35.7> 和 </VirtualHost>:表示在其中的是一个虚拟主机的配置

ServerName ubuntu.91ds.com:设置虚拟主机的域名

ServerAdmin webmaster@91ds.com:设置该虚拟主机网管员的邮件

DocumentRoot /var/www/ubuntu:设置该虚拟主机的主目录路径

ErrorLog /var/log/apache2/error.log:设置该虚拟主机的出错信息

CustomLog /var/log/apache2/access.log combined:设置该虚拟主机的访问信息
#sudo a2dissite ubuntu
#sudo /etc/init.d/apache2 restart
即可,这样既可以维护 ubuntu 这个站点,同时还不影响其他站点的正常运行。
4. 高级配置
上面谈了一下简单的虚拟主机配置方法。这个基本上能满足我们大部分的需要。但如果要是安装 Zope+Plone 的话,上面的这点设置是远远不够的,由于 Zope+Plone 结构所采用的端口并非是80端口,所以我们还得做端口重定向。为了能够做这个,我们得激活 Rewrite 和 Proxy 两个模块。激活模块很简单,同站点配置目录一样,在 Apache2 中也有两个模块配置目录:mods-available 和 mods-enabled。在 mods-available 目录中的是所有可用的模块,而在 mods-enabled 目录中的则是已被安装到 Apache2 中的模块。由于在 mods-available 目录中已经有了 Rewrite 和 Proxy 模块的配置引导文件,所以只需要简单地将其安装到 Apache2 中即可。使用命令:

sudo a2enmod rewrite
sudo a2enmod proxy
然后,添加虚拟主机站点 plone.firehare.com,同 edunuke 站点创建相似在/etc/apache2/sites-available/ 目录中建立一个文件 plone。显然这个文件名中是没有 “.” 或 “#” 这两个字符的了。然后编辑该文件:

<VirtualHost 10.39.6.59>
ServerName plone.firehare.com
ServerAdmin ubuntu.firehare@firehare.com
ErrorLog “/var/log/apache2/plone_errors.log”
CustomLog “/var/log/apache2/plone_accesses.log” common

RewriteEngine on
RewriteRule ^/(.*)http://127.0.0.1:8081/VirtualHostBase/http/plone.firehare.com:80/plone/VirtualHostRoot/$1[L,P]

<Proxy *>
Order Deny,Allow
Deny from all
Allow from all
</Proxy>

</VirtualHost>
这样就安装好了 plone.firehare.com 虚拟主机站点,可以在浏览器中地址栏中输入http://plone.firehare.com 就可以重定向到 Zope+Plone 站点去了。
Apache 服务之 PHP 配置
Apache 服务之 PHP 配置
将系统更新到最新状态,在做任何操作之前都要做这一步,以确保系统的稳定,同时也不会有一些莫名其妙的现象出现。
$sudo apt-get update
$sudo apt-get dist-upgrade
安装PHP支持
$sudo apt-get install libapache2-mod-php5
$sudo apt-get install php5
$sudo apt-get install php5-gd
$sudo apt-get install php5-mysql
$sudo apt-get install php5-pgsql
如果想支持图形就加php5-gd,如果想支持Mysql就加php5-mysql,这里之所以要单独列出libapache2-mod-php5,主要是由于php5的依赖关系没有做好,有可能会安装上libapache-mod-php5的包,所以为了避免不必要的麻烦,干脆还是单独指定比较好。如果有朋友还是会出现问题,请在新立得中查找libapache-mod-php5包,如果安装的话请将其删除。
修改PHP配置文件,以限制内存和文件最大上传尺寸
我们编辑/etc/php5/apache2/php.ini文件,先做一般配置,在改动之前,请先将该配置文件做个备份。以便在出错的时候可以恢复。…
memory_limit = 8M =>修改成你所需的内存大小
upload_max_filesize = 2M =>修改文件最大上传尺寸

extension=mysql.so 支持Mysql服务
extension=gd.so 支持gd函数

其实在Ubuntu下,如果你安装了php5-mysql和php5-gd之后,会自动修改以上二行的,我们做的只不过是确认一下它们前面的注释符是否去掉。
目前大多数php的open source都是用php4写的,为了兼容以前的php版本,有时需要将register_long_arrays打开,否则$HTTP_GET_VARS和$HTTP_POST_VARS等变量将无法使用,会出现一些莫名其妙的问题。
另外,在装完php5后最好确认一下/etc/apache2/mods-enabled/下是否有链接:
php5.load -> /etc/apache2/mods-available/php5.load
加固PHP,以增强安全性。注意,下面的安全性要因情况而定,所以我已经把它们的功能写清楚了,如果有问题的话,看看是否由于下面哪种限制条件所造成,可相应将其注释掉。那么让我们开始吧,我们将再次编辑/etc/php5/apache2/php.ini文件,之所以没有一次改完,主要是为了给大家一个清晰的思路。
#打开安全模式,打开他的好处就是PHP文件只能访问所有者和PHP文件所有着一样的文件,即使在chroot环境下也无法访问jail 中属主不一样的文件,类似于php shell这样的后门就没用武之地了哦,phpshell是很流行的php后门,他可以执行系统命令,就象他的名字一样,和shell很接近。
safe_mode = On
#下面的设置就限制了fopen(), file()等函数可以操作的目录范围,避免了入侵者非法读取文件,一定要在/var/www后面加”/”,否则/var/wwww下的文件也能被访问。该选项会禁止任何不在/var/www/目录下的PHP文件运行,包括任何以软链接方式链到/var/www/目录下的程序,如PhpMyAdmin 包,就在该选项设定后无法正常运行。
open_basedir = /var/www/
#禁止使用phpinfo和get_cfg_var函数,这样可以避免泄露服务信息,一般在在确认PHP能正常工作之后再使之关闭
disable_functions = phpinfo,get_cfg_var
#设置php程序错误日志
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_err.log
#如果php程序没有指明需要register_globals的话,最好把register_globals设置为Off,这样可以避免很多安全问题的。注意,如果你的程序是需要register_globals的话,可千万别关。Ubuntu默认是关闭的。
register_globals = Off
#禁止打开远程地址,记得最近出的php include的那个漏洞吗?就是在一个php程序中include了变量,那么入侵者就可以利用这个控制服务器在本地执行远程的一个php程序,例如phpshell,所以我们关闭这个。
allow_url_fopen = Off