虾击吧扯

吃鸡巴亏上鸡巴当倒鸡巴霉!

模块开发者主页:http://code.google.com/p/substitutions4nginx/

执行svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only

下载:

编译安装时添加两个参数


–with-http_sub_module –add-module=/root/substitutions4nginx-read-only


sub_module用法:http://wiki.nginx.org/HttpSubModule

substitutions4nginx用法:http://code.google.com/p/substitutions4nginx/

s安装substitutions4nginx提示错误:-bash: svn: command not found

需安装subversion 安装命令yum -y install subversion

翻译substitutions4nginx参数:


g(default):替换所有匹配的字符串。
i: 执行不区分大小写的匹配。
o: 只需将第一个。
r: 该模式是作为一个正则表达式处理,默认是固定的字符串。


实际使用:


subs_filter ‘<(no?script.*?)>(.*?)<(\/no?script.*?)>’ ” gi; //替换掉全部的<noscript></noscript>
subs_filter ‘<(s?cript.*?)>(?:\s|\S)*?<(\/s?cript.*?)>’ ” gi; //替换掉全部的<script>包换中间换行</script>
subs_filter ‘<(i?frame.*?)>(.*?)<(\/i?frame.*?)>’ ” gi; //替换<iframe></iframe>


实际测试中sub_filter比subs_filter的速度要快,但如果你开启了nginx的cache速度上可以得到改善的。

测试过程发现对gzip源的内容无法实现替换的问题

可以在server段内加入 proxy_set_header Accept-Encoding "";

如果是替换中文词组则需要将nginx的配置文件保存为utf-8格式!

转自:http://www.caohuan.com/nginx-configuration-is-the-filter-to-accelerate-website.html 


根据hostloc上的高手指点后我已经将代码简化到极致了! nginx的try_files功能非常强大,可以判断文件是否存在! 通过try_files判断 当文件不存在就跳到@backend块上处理,这样伪静态的url就轻松搞定了!


location ~ .*\.(php|jsp|cgi|pl|py|php4|php5)?\$ {
include proxy.inc;
}
location / {
try_files \$uri @backend;
}
location @backend {
internal;
include proxy.inc;
}
location ~ .*\.(ftpquota|htaccess|htpasswd|asp|aspx|jsp|asa|mdb)?\$ {
deny all;


#proxy.inc 内容代码
proxy_connect_timeout 30s;
proxy_send_timeout   90;
proxy_read_timeout   90;
proxy_buffer_size    32k;
proxy_buffers     4 32k;
proxy_busy_buffers_size 64k;
proxy_pass http://127.0.0.1:81;
proxy_redirect     off;
proxy_hide_header  Vary;
proxy_set_header   Accept-Encoding '';
proxy_ignore_headers Set-Cookie Cache-Control Expires;
proxy_set_header   Host   $host;
proxy_set_header   Referer $http_referer;
proxy_set_header   Cookie $http_cookie;
proxy_set_header   X-Real-IP  $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
client_body_buffer_size 128k;

更新系统组件

yum update -y

安装所需工具包

yum -y install gcc gcc-c++ autoconf 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 krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

安装nginx,因为所列源并没有nginx,所以我们需要下载nginx附加包

rpm -Uvhhttp://download.Fedora.RedHat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum -y install nginx
chkconfig nginx on

安装php+mysql

yum -y install php mysql mysql-server mysql-devel php-mysql php-cgi php-mbstring php-gd php-fastcgi
chkconfig mysqld on

通过以上命令,lnmp环境就此安装完毕。上传网站文件


官方详细参数:http://wiki.nginx.org/NginxHttpProxyModule

1、传统缓存之一(404)

这个办法是把nginx的404错误定向到后端,然后用proxy_store把后端返回的页面保存。

配置:

location / {
root /home/html/;#主目录
expires 1d;#网页的过期时间
error_page 404 =200 /fetch$request_uri;#404定向到/fetch目录下
}

location /fetch/ {#404定向到这里
internal;#指明这个目录不能在外部直接访问到
expires 1d;#网页的过期时间
alias /home/html/;#虚拟目录文件系统地址要和locaion /一致,proxy_store会将文件保存到这目录下
proxy_pass http://xok.la/;#后端upstream地址,/fetch同时是一个代理
proxy_set_header Accept-Encoding '';#让后端不要返回压缩(gzip或deflate)的内容,保存压缩后的内容会引发乱子。
proxy_store on;#指定nginx将代理返回的文件保存
proxy_temp_path /home/tmp;#临时目录,这个目录要和/home/html在同一个硬盘分区内
}
使用的时候还有要注意是nginx要有权限往/home/tmp和/home/html下有写入文件的权限,在linux下nginx一般会配置成 nobody用户运行,这样这两个目录就要chown nobody,设成nobody用户专用,当然也可以chmod 777,不过所有有经验的系统管理员都会建议不要随便使用777。

2、传统缓存之二(!-e)

原理和404跳转基本一致,但更简洁一些:

location / {
root /home/html/;
proxy_store on;
proxy_set_header Accept-Encoding '';
proxy_temp_path /home/tmp;
if ( !-f $request_filename )
{
        proxy_pass http://xok.la/;
}
}
可以看到这个配置比404节约了不少代码,它是用!-f来判断请求的文件在文件系统上存不存在,不存在就proxy_pass到后端,返回同样是用proxy_store保存。

两种传统缓存都有着基本一样的优点和缺点:
缺点1:不支持带参数的动态链接,比如read.php?id=1,因为nginx只保存文件名,所以这个链接只在文件系统下保存为read.php,这样用户访问read.php?id=2时会返回不正确的结果。同时不支持http://xok.la/这种形式的首页和二级目录http://xok.la/download/,因为nginx非常老实,会将这样的请求照链接写入文件系统,而这个链接显然是一个目录,所以保存失败。这些情况都需要写rewrite才能正确保存。
缺点2:nginx内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就会撑暴整个硬盘空间。为此可以使用一个shell脚本定期清理,同时可以撰写php等动态程序来做实时更新。
缺点3:只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力。
缺点4:nginx不会自动选择内存或硬盘作为存储介质,一切由配置决定,当然在当前的操作系统里都会有操作系统级的文件缓存机制,所以存在硬盘上也不需要过分担心大并发读取造成的io性能问题。

nginx传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。在生产应用中它常常用作和squid的搭档,squid对于带?的链接往往无法阻挡,而nginx能将其访问拦住,例如:http://xok.la/?和http://xok.la/在squid上会被当做两个链接,所以会造成两次穿透;而nginx只会保存一次,无论链接变成http://xok.la/?1还是http://xok.la/?123,均不能透过nginx缓存,从而有效地保护了后端主机。

nginx会非常老实地将链接形式保存到文件系统中,这样对于一个链接,可以很方便地查阅它在缓存机器上的缓存状态和内容,也可以很方便地和别的文件管理器如rsync等配合使用,它完完全全就是一个文件系统结构。

这两种传统缓存都可以在linux下将文件保存到/dev/shm里,一般我也是这么做的,这样可以利用系统内存来做缓存,利用内存的话,清理过期 内容速度就会快得多。使用/dev/shm/时除了要把tmp目录也指向到/dev/shm这个分区外,如果有大量小文件和目录,还要修改一下这个内存分 区的inode数量和最大容量:

mount -o size=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm
上面的命令在一台有3G内存的机器上使用,因为/dev/shm默认最大内存是系统内存的一半就是1500M,这条命令将其调大成2500M,同时shm 系统inode数量默认情况下可能是不够用的,但有趣的是它可以随意调节,这里调节为480000保守了点,但也基本够用了。

3、基于memcached的缓存

nginx对memcached有所支持,但是功能并不是特别之强,性能上还是非常之优秀。

location /mem/ {
    if ( $uri ~ "^/mem/([0-9A-Za-z_]*)$" )
    {
     set $memcached_key "$1";
     memcached_pass     192.168.6.2:11211;
    }
    expires 70;
}
这个配置会将http://xok.la/mem/abc指明到memcached的abc这个key去取数据。

nginx目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404定向到后端去写入数据。

4、基于第三方插件ncache

ncache是新浪兄弟开发的一个不错的项目,它利用nginx和memcached实现了一部分类似squid缓存的功能,我并没有使用这个插件的经验,可以参考:

http://code.google.com/p/ncache/

5、nginx新开发的proxy_cache功能

从nginx-0.7.44版开始,nginx支持了类似squid较为正规的cache功能,目前还处于开发阶段,支持相当有限,这个缓存是把链接用md5编码hash后保存,所以它可以支持任意链接,同时也支持404/301/302这样的非200状态。

配置:

首先配置一个cache空间:

proxy_cache_path /xok/to/cache levels=1:2 keys_zone=xok1:10m inactive=5m max_size=2m clean_time=1m;
proxy_temp_path参数路径也需要跟上面的proxy_cache_path在一个分区上,否则会报错。

注意这个配置是在server标签外,levels指定该缓存空间有两层hash目录,第一层目录是1个字母,第二层为2个字母,保存的文件名就会 类似/xok/to/cache/e/4a/0f1019b0db2f97d17c2238c0271a74ae;keys_zone为这个空间起个名 字,10m指空间大小为10MB;inactive的5m指缓存默认时长5分钟;max_size的2m是指单个文件超过2m的就不缓 存;clean_time指定一分钟清理一次缓存。

location / {
    proxy_pass http://xok.la/;

    proxy_cache xok1;#使用xok1这个keys_zone

    proxy_cache_valid 200 302 1h;#200和302状态码保存1小时
    proxy_cache_valid 301 1d;#301状态码保存一天
    proxy_cache_valid any 1m;#其它的保存一分钟
}
综合起来可以简单优化静态文件:

location ~ .*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv)$     
    {
    proxy_pass http://backend;
    expires 6h; #设置浏览器过期时间
    proxy_cache xok1;#使用xok1这个keys_zone

    proxy_cache_valid 200 302 1h;#200和302状态码保存1小时
    proxy_cache_valid 301 1d;#301状态码保存一天
    proxy_cache_valid any 1m;#其它的保存一分钟
                }
注意:支持cache的0.7.44到0.7.51这几个版本的稳定性均有问题,访问有些链接会出现错误,所以这几个版本最好不要在生产环境中使用。 nginx-0.7下目前所知较为稳定的版本是0.7.39。稳定版0.6.36版也是近期更新,如果在配置里没有使用到0.7的一些新标签新功能,也可 以使用0.6.36版。

本文来自: E点废墟(www.xok.la) 详细出处参考:http://xok.la/2009/10/nginx_cache_five.html


LNAMP 1.0 beta一键安装包PHP的运行方式是基于mod_php的,至于是采用mod_php还是mod_fcgi来运行php,网上很多朋友们都在争论这个问题,但是根据笔者从网上查阅大量的文章来看,貌似它们两个各有各的优势和缺点,这个还得根据个人需求来决定是选择mod_php还是mod_fcgi。

一、本文需要用到的软件:


mysql:http://lnamp-shell.googlecode.com/files/mysql-5.1.45.tar.gz
apache:http://lnamp-shell.googlecode.com/files/httpd-2.2.15.tar.gz
mod_fcgi:http://lnamp-shell.googlecode.com/files/mod_fcgid.2.2.tgz
php:http://lnamp-shell.googlecode.com/files/php-5.2.14.tar.gz
php5-mail-header-patch:http://lnamp-shell.googlecode.com/files/php5-mail-header.patch
suhosin-patch:http://lnamp-shell.googlecode.com/files/suhosin-patch-5.2.14-0.9.7.patch.gz
pcre:http://lnamp-shell.googlecode.com/files/pcre-8.01.tar.gz
nginx:http://lnamp-shell.googlecode.com/files/nginx-0.7.65.tar.gz

二、在安装之前的准备:

更新一下系统


#yum -y update

如果你的cent os已经采用yum安装了httpd、php、mysql,请先卸载


#yum -y remove httpd
#yum -y remove httpd*
#yum -y remove mysql*
#yum -y remove php*

安装yum-fastestmirror提升yum安装的速度


#yum -y install yum-fastestmirror

安装一些必要的组件


#yum -y install gcc patch gcc-c++ gcc4-c++ autoconf gd gd-devel libxml2 libxml2-devel
zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel
curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl
openssl-devel expat expat-devel sqlite sqlite-devel png-devel jpeg-devel libtool libjpeg*
libpng* freetype-devel

三、安装mysql


#wget -c http://lnamp-shell.googlecode.com/files/mysql-5.1.45.tar.gz
#tar zxvf mysql-5.1.45.tar.gz
#cd mysql-5.1.45
#./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-thread-safe-client
--enable-assembler --with-charset=utf8 --enable-thread-safe-client --with-extra-charsets=all
--with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
#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
#sed -i 's/skip-locking/skip-external-locking/g' /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 your_password(修改mysql的密码,your_password
替换为你设置的mysql密码)
#service mysql restart
#service mysql stop

四、安装Apache


#wget -c http://lnamp-shell.googlecode.com/files/httpd-2.2.15.tar.gz
#groupadd apache
#useradd -g apache apache
#tar zxf httpd-2.2.15.tar.gz
#cd httpd-2.2.15
#./configure --prefix=/usr/local/apache2 \
--enable-dav \
--enable-dav-fs \
--enable-modules=all \
--enable-mods-shared=all \
--disable-auth-basic \
--enable-include \
--enable-substitute \
--enable-authz-dbm \
--enable-log-config \
--enable-headers \
--enable-setenvif \
--with-ssl \
--enable-static-ab \
--enable-http \
--enable-mime \
--enable-status \
--enable-isapi \
--enable-imagemap \
--enable-actions \
--enable-speling \
--enable-userdir \
--enable-alias \
--enable-vhost-alias \
--enable-dir \
--enable-rewrite \
--enable-dumpio \
--enable-echo \
--enable-so \
--enable-example \
--enable-case-filter \
--enable-substitute \
--enable-log-config \
--enable-logio \
--enable-env \
--with-mpm=worker \
--with-included-apr \
--with-apr \
--with-apr-util \
--with-z \
--enable-proxy \
--enable-proxy-connect \
--enable-proxy-ftp \
--enable-proxy-http \
--enable-proxy-ajp \
--enable-proxy-balancer \
--enable-suexec \
--with-suexec-caller=apache \
--with-suexec-userdir=public_html \
--with-suexec-docroot=/home \
--with-suexec-uidmin=100 \
--with-suexec-gidmin=100 \
--with-suexec-logfile=/usr/local/apache2/logs/suexec_log
#make
#make install
#ln -s /usr/local/apache2/bin/apachectl /etc/init.d/httpd
#cd ../
#sed -i 's/User[[:space:]]daemon/User apache/g' /usr/local/apache2/conf/httpd.conf
#sed -i 's/Group[[:space:]]daemon/Group apache/g' /usr/local/apache2/conf/httpd.conf
#sed -i 's/Listen[[:space:]]80/Listen 81/g' httpd.conf
#sed "/mod_rewrite/a\LoadModule fcgid_module modules/mod_fcgid.so" /usr/local/apache2/
conf/httpd.conf > /usr/local/apache2/conf/temp.conf
#rm /usr/local/apache2/conf/httpd.conf
#mv /usr/local/apache2/conf/temp.conf /usr/local/apache2/conf/httpd.conf
#mkdir -p /usr/local/apache2/conf/vhost
#sed "/httpd-vhosts/a\Include conf/vhost/*.conf" /usr/local/apache2/conf/httpd.conf >
/usr/local/apache2/conf/temp.conf
#rm /usr/local/apache2/conf/httpd.conf
#mv /usr/local/apache2/conf/temp.conf /usr/local/apache2/conf/httpd.conf

五、安装mod_fcgi


#wget -c http://lnamp-shell.googlecode.com/files/mod_fcgid.2.2.tgz
#tar zxf mod_fcgid.2.2.tgz
#cd mod_fcgid.2.2
#make
#make install
#cd /usr/local/apache2/conf/
#sed "/mod_rewrite/a\LoadModule fcgid_module modules/mod_fcgid.so" httpd.conf > temp.conf
#rm -Rf httpd.conf
#mv temp.conf httpd.conf
#cd ../

六、安装PHP


#wget -c http://lnamp-shell.googlecode.com/files/php-5.2.14.tar.gz
#wget -c http://lnamp-shell.googlecode.com/files/php5-mail-header.patch
#wget -c http://lnamp-shell.googlecode.com/files/suhosin-patch-5.2.14-0.9.7.patch.gz
#tar zxf php-5.2.14.tar.gz
#patch -d php-5.2.14 -p1 < php5-mail-header.patch
#gzip -d ./suhosin-patch-5.2.14-0.9.7.patch.gz
#cd php-5.2.14/
#patch -p 1 -i ../suhosin-patch-5.2.14-0.9.7.patch
#./buildconf --force
#./configure --prefix=/usr/local/php \
--with-config-file-path=/etc \
--with-libxml-dir \
--enable-cli \
--enable-cgi \
--enable-fastcgi \
--enable-bcmath \
--enable-force-cgi-redirect \
--enable-discard-path \
--enable-path-info-check \
--with-openssl \
--with-pcre-regex \
--enable-calendar \
--enable-dom \
--enable-ftp \
--with-openssl-dir=/usr/local/ssl \
--enable-gd-jis-conv \
--enable-hash \
--with-iconv \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-pdo \
--enable-posix \
--enable-libxml \
--enable-simplexml \
--with-sqlite \
--enable-tokenizer \
--enable-xmlreader \
--enable-xmlwriter \
--enable-sockets \
--with-zlib \
--with-freetype-dir \
--with-gd \
--with-jpeg-dir=/usr/lib \
--with-png-dir=/usr/lib \
--with-mime-magic \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-zlib-dir=/usr/lib/libz.so \
--with-pdo-mysql=/usr/local/mysql \
--with-pdo-sqlite \
--enable-posix \
--enable-soap \
--enable-suhosin
#make
#make install
#cp php.ini-dist /etc/php.ini
#cd ../

七、安装pcre


#wget -c http://lnamp-shell.googlecode.com/files/pcre-8.01.tar.gz
#tar zxf pcre-8.01.tar.gz
#cd pcre-8.01
#./configure
#make
#make install
#cd ..

八、安装nginx


#wget -c http://lnamp-shell.googlecode.com/files/nginx-0.7.65.tar.gz
#tar zxf nginx-0.7.65.tar.gz
#cd nginx-0.7.65
#sed -i 's/0.7.65/1.0/g' src/core/nginx.h
(修改nginx的版本信息,根据需要酌情修改)
#sed -i 's/"nginx/"LNAMP/g' src/core/nginx.h
(修改nginx的版本信息,根据需要酌情修改)
#sed -i 's/"NGINX/"LNAMP/g' src/core/nginx.h
(修改nginx的版本信息,根据需要酌情修改)
#./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

九、重新创建nginx的配置文件nginx.conf


#mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
#vim /usr/local/nginx/conf/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;
  }
  }
}

十、创建一个虚拟主机


#groupadd vhost
#useradd -g vhost lnamp
#mkdir /home/lnamp/public_html
#mkdir /home/lnamp/logs

创建虚拟主机配置文件


#vim /usr/local/apache2/conf/vhost/domain.com.conf

写入一下内容:


<VirtualHost *:81>
SuexecUserGroup lnamp vhost
ServerAdmin {你的邮箱}
DocumentRoot "/home/lnamp/public_html"
ServerName {你的服务器ip}
ServerAlias {你需要绑定的域名}
ErrorLog "/home/lnamp/logs/error_log"
CustomLog "|/usr/local/apache2/bin/rotatelogs /home/lnamp/logs/%Y_%m_%d_log 86400 +480" common
<Directory /home/lnamp/public_html>
AddHandler fcgid-script .php
#AddHandler cgi-script .pl .cgi
FCGIWrapper /home/lnamp/php-cgi .php
Options ExecCGI FollowSymLinks
AllowOverride all
Order deny,allow
Allow from all
</Directory>
</VirtualHost>

创建php-cgi文件


#vim /home/lnamp/php-cgi

写入一下内容


#!/bin/sh
export PHPRC=/home/lnamp
export PHP_FCGI_CHILDREN=4
export PHP_FCGI_MAX_REQUESTS=5000
exec /usr/local/php/bin/php-cgi "$@"

修改目录权限


chmod 755 -R /home/lnamp
chown lnamp:vhost -R /home/lnamp

十一、启动mysql、apache、nginx


#service mysql start
#service httpd start
#/usr/local/nginx/sbin/nginx

至此安装完成!你可以在/home/lnamp/public_html目录下面创建一个index.php文件,写入<?php phpinfo();?>,你就可以看到php的配置信息!


本文适用于所有256M(含256M)以上VPS,不适用于128M VPS。安装环境为CENTOS
本文假设所有的操作均在/opt/software目录下执行

# mkdir /opt/software
# cd /opt/software/

全编译前准备

准备1、安装编译器gcc

一般VPS都是最小化安装的,没有安装编译器
# yum -y update
# yum -y install gcc gcc-c++ automake
# yum install -y openssl-devel

这一步只所以没有用源码装,试因为GCC牵扯到很多关联模块,并和系统kernel有关,搞得不好,VPS就无法使用了,所以不建议去编译GCC
在这里只给出yum的安装方式,如果有童鞋有兴趣研究GCC的编译方式,建议先去看LFS或者编译内核一类的。

准备2、设置库文件路径
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

准备3、安装libtool
# wget http://ftp.gnu.org/gnu/libtool/libtool-2.4.tar.gz
# tar xvf libtool-2.4.tar.gz
# cd libtool-2.4
# ./configure
# make && make install
# cd ..

一、MYSQL-5.1.54

1.1、nucrse
# wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.7.tar.gz
# tar xvf ncurses-5.7.tar.gz
# cd ncurses-5.7
# ./configure --with-shared --without-debug
# make && make install
# cd ..

1.2、mysql-5.1.54
# wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.54.tar.gz/from/http://mysql.he.net/
# tar xvf mysql-5.1.54.tar.gz
# cd mysql-5.1.54
# ./configure --prefix=/usr/local/mysql \
--with-unix-socket-path=/var/lib/mysql/mysql.sock \
--localstatedir=/var/lib/mysql/data \
--with-charset=utf8 --with-collation=utf8_general_ci \
--with-extra-charsets=all --enable-assembler --with-pthread

# make
# make install

# groupadd mysql
# useradd mysql -s /sbin/nologin -g mysql -M
# cp support-files/my-medium.cnf /etc/my.cnf

修改my.cnf
在skip-locking这句前面加上#号,添加
skip-external-locking

# chown mysql.root -R /usr/local/mysql
# cd /usr/local/mysql/

# bin/mysql_install_db --user=mysql
# chown mysql.mysql -R /var/lib/mysql/
# ln -s /usr/local/mysql/bin/* /usr/local/bin

重要:
# ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
# chmod 700 /etc/init.d/mysqld


mysql的启动和关闭
/etc/init.d/mysqld start
/etc/init.d/mysqld stop

二、PHP-5.3.5

回到我们的编译目录
# cd /opt/software

2.1、ZLIB

# wget http://zlib.net/zlib-1.2.5.tar.gz
# tar xvf zlib-1.2.5.tar.gz
# cd zlib-1.2.5
# ./configure --prefix=/usr/local/
# make && make install
# cd ..

2.2、LIBPNG
# wget http://sourceforge.net/projects/libpng/files/libpng15/1.5.0/libpng-1.5.0.tar.gz/download
# tar xvf libpng-1.5.0.tar.gz
# cd libpng-1.5.0
# ./configure --prefix=/usr/local/
# make && make install
# cd ..

2.3、FREETYPE
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.1.10.tar.bz2
# tar xvf freetype-2.1.10.tar.bz2
# cd freetype-2.1.10
# ./configure --prefix=/usr/local/  --enable-shared
# make && make install
# cd ..

2.4、LIBJPEG
# wget http://freshmeat.net/urls/6228c609a20bb6f87b2fef4fd4b6a30c
# tar xvf jpegsrc.v8b.tar.gz
# cd jpeg-8b/
# ./configure --prefix=/usr/local --enable-shared --enable-static
# make
# make test
# make install
# cd ..

2.5、LIBICONV
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
# tar xvf libiconv-1.13.1.tar.gz
# cd libiconv-1.13.1
# ./configure --prefix=/usr/local/
# make && make install
# cd ..

2.6、GD
# wget http://www.libgd.org/releases/gd-latest.tar.gz
# tar xvf gd-latest.tar.gz
# cd gd-2.0.34
# ./configure --with-png --with-freetype --with-jpeg
# make
# make install
# cd ..

2.7、libevent
# wget http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz
# tar xvf libevent-2.0.10-stable.tar.gz
# cd libevent-2.0.10-stable
# ./configure --prefix=/usr/local/
# make
# make install
# cd ..

2.8、libxml2
# wget ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz
# tar xvf libxml2-2.7.8.tar.gz
# cd libxml2-2.7.8
# ./configure --prefix=/usr/local/
# make && make install
# cd .. 2.9-2.15为可选安装

2.9、安装curl
# wget http://curl.haxx.se/download/curl-7.21.3.tar.gz
# tar xvf curl-7.21.3.tar.gz
# cd curl-7.21.3
# ./configure --prefix=/usr/local/ --enable-shared
# make && make install
# cd ..

2.10、安装net-snmp
# wget http://sourceforge.net/projects/net-snmp/files/net-snmp/5.6.1/net-snmp-5.6.1.tar.gz/download
# cd net-snmp-5.6.1
# ./configure --prefix=/usr/local/
然后一路回车下去,到了这里Default version of SNMP to use (3): 笔者输入的是2
其他都用默认的,开始config
# make && make install
# cd ..

2.11、安装LIBXSLT
# wget ftp://xmlsoft.org/libxml2/libxslt-1.1.25.tar.gz
# tar xvf libxslt-1.1.25.tar.gz
# cd libxslt-1.1.25
# ./configure --prefix=/usr/local/ --enable-shared
# make && make install
# cd ..

2.12、libmcrypt
# wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
# tar xvf libmcrypt-2.5.7.tar.gz
# cd libmcrypt-2.5.7
# ./configure --prefix=/usr/local/
# make
# make check
# make install
# cd ..

2.13、mhash
# wget http://ncu.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2
# tar xvf mhash-0.9.9.9.tar.bz2
# cd mhash-0.9.9.9
# ./configure --prefix=/usr/local
# make
# make check
# make install
# cd ..

2.14、mcrypt
# wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download
# tar xvf mcrypt-2.6.8.tar.gz
# cd mcrypt-2.6.8
# LD_LIBRARY_PATH=/usr/local/lib ./configure --prefix=/usr/local/
# make
# make check
# make install
# cd ..

2.15、GETTEXT
# wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.1.1.tar.gz
# tar xvf gettext-0.18.1.1.tar.gz
# cd gettext-0.18.1.1
# ./configure --prefix=/usr/local/ --enable-shared
# make && make install
# cd ..

(以上可选部分结束)

2.16、安装php-5.3.3
# wget http://www.php.net/get/php-5.3.5.tar.bz2/from/this/mirror
# tar xvf php-5.3.5.tar.bz2
# cd php-5.3.5

如果没有安装可选部分的话,使用如下参数编译

# ./configure --prefix=/usr/local/php \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-gd --with-freetype-dir=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-zlib-dir=/usr/local \
--enable-fpm \
--disable-debug \

如果安装了可选部分的话,使用如下参数编译
./configure --prefix=/usr/local/php \
--with-mysql=/usr/local/mysql --with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-gd --enable-gd-native-ttf --enable-gd-jis-conv \
--with-freetype-dir=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-zlib --with-zlib-dir=/usr/local \
--with-curl --with-curlwrappers --with-pic --enable-bcmath \
--with-xsl -with-openssl --with-pdo-mysql --with-gettext --with-iconv \
--with-mcrypt --with-mhash --with-snmp --enable-xml --enable-mbstring \
--enable-sockets --enable-inline-optimization --enable-calendar --enable-dba \
--enable-exif --enable-ftp --enable-soap --enable-zip --enable-sysvsem \
--enable-fpm \

# make
# make install

# cp php.ini-production /usr/local/php/lib/php.ini
# ln -s /usr/local/php/bin/* /usr/local/bin/
# cd ..

2.17、安装php加速器

# wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
# tar jxvf eaccelerator-0.9.6.1.tar.bz2
# cd eaccelerator-0.9.6.1
# phpize
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
# make
# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
#

vi /usr/local/php/lib/php.ini

在最后的; End:前面加入

[eaccelerator]
extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
extension="eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

# mkdir /tmp/eaccelerator
# chmod 777 /tmp/eaccelerator
# cd ..

2.18、配置php-fpm
# cd /usr/local/php/etc/
# cp php-fpm.conf.default php-fpm.conf

编辑php-fpm.conf
[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
[www]

pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

将以上语句前面的注释符去掉即可。


启动php
# /usr/local/php/sbin/php-fpm
# ps -ef|grep php-fpm

如果看到有php-fpm的话,说明成功

# killall -9 php-fpm
# cp /opt/software/php-5.3.5/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#

现在可以通过/etc/init.d/php-fpm start|stop 来启动和关闭phpfpm了

三、nginx-0.8.53

3.1、安装pcre
回到我们的安装目录
# cd /opt/software
# wget http://sourceforge.net/projects/pcre/files/pcre/8.11/pcre-8.11.tar.gz/download
# tar xvf pcre-8.11.tar.gz
# cd pcre-8.11
# ./configure --prefix=/usr/local/
# make && make install
# cd ..

3.2、安装nginx
# wget http://nginx.org/download/nginx-0.8.53.tar.gz
# tar xvf nginx-0.8.53.tar.gz
# cd nginx-0.8.53
# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
# make && make install

3.3、PHP整合fpm
修改/usr/local/nginx/conf/nginx.conf,将server段 关于php部分前面的注视符号#全部去掉,如下:
        location ~ \.php$ {
            root           html;
                fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

修改/usr/local/nginx/conf/fastcgi_params
在这一段
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
下面加入
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

完整的如下:
# cat fastcgi_params

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;


在/usr/local/nginx/html目录下建立一个info.php文件,内容如下:
<?php
phpinfo();
?>

启动所有服务:
# /etc/init.d/mysql start(或者restart)
# /etc/init.d/php-fpm start(或者restart)
# /usr/local/nginx/sbin/nginx

通过浏览器查看http://ip(你的VPS商分配给你的IP地址)/info.php,看到phpinfo的信息说明全部正确

测试用的:
http://64.34.205.27/
http://64.34.205.27/info.php

开机自动启动:
#chkconfig --level 345 mysqld on
#chkconfig --level 345 php-fpm on
#echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local

至此,LNMP安装工作全部完成


Mapn 是以 MySQL + Apache + PHP + Nginx 的安装顺序命名

Apache后端 + Nginx前端 的强大就不重复说了
Apache + Nginx 还有一个便捷处,伪静态什么的直接放个 .htaccess(Apache的伪静态规则即可) 文件就行了,修改也即时生效。
如果单单 Nginx 就得修改 .conf 文件,还得重启服务,规则还得由 Apache 转换而。

简述:
安装程序自动载入服务器所有IP;Apache端口为 127.0.0.1:81;简便添加虚拟主机;简便添加支持SSL虚拟主机;简便删除已有虚拟主机;等等多项优化

程序版本信息:
MySQL: 5.1.54     Apache: 2.2.17     PHP: 5.2.17     Nginx: 0.8.54
Memcache: 2.2.6     eAccelerator: 0.9.6.1     ZendOptimizer: 3.3.9
phpMyAdmin: 3.3.9     Suhosin: 0.9.32.1     ionCube: 4.0.5
... And so on.

安装 Mapn :
建议安装前运行 screen -S mapn

(当网络断线或者关闭电脑,运行 screen -r mapn 即可回到之前窗口。注:运行 screen 是在服务器运行的,也就是你运行 screen 运行安装 Mapn 后关闭窗口,Mapn 仍会继续安装,当你想退出 screen 窗口,在 screen 窗口输入 exit 即退出。如未安装 screen 服务,运行 yum -y install screen* 安装)


#下载安装包(下载版)
wget -c http://files.ngro.org/mapn/Mapn_Ver_2_8.tar.gz
#解压文件
tar zxvf Mapn_Ver_2_8.tar.gz
#进入安装目录
cd Mapn_Ver_2_8/
#执行安装
./MapnInstaller.sh

#下载安装包(建议网络不好下载完整版)
wget -c http://files.ngro.org/mapn/Mapn_Full_Ver_2_8.tar.gz  
#解压文件
tar zxvf Mapn_Full_Ver_2_8.tar.gz 
#进入安装目录
cd Mapn_Full_Ver_2_8/ 
#执行安装
./MapnInstaller.sh

输入想设置的 MySQL root 密码(留空则为默认 root ),即开始自动编译安装
待安装完成后即可开始你的网站之旅。

可选安装(PureFTPd):
进入 Mapn 目录:
下载版: cd Mapn_Ver_2_8/
完整版: cd Mapn_Full_Ver_2_8/

执行安装:
./PureftpdInstaller.sh

安装完成后用浏览器访问 http://您的IP或域名/ftp/install.php 安装 User manager for PureFTPd
请参考 http://www.ngro.org/mapn/mapn-install-pureftpd.html 安装

Mapn 状态管理: /root/mapn { start | stop | reload | restart | kill | status }
PureFTPd 状态管理: /root/pureftpd { start | stop | restart | kill | status }
虚拟主机管理: /root/mapn { 1 | 2 | 3 }

提示:  /root/mapn 1  =  /root/AddVirtualHost.sh  |  添加虚拟主机
提示:  /root/mapn 2  =  /root/AddVirtualHostWithSSL.sh  |  添加支持 SSL 的虚拟主机
提示:  /root/mapn 3  =  /root/RemoveVirtualHost.sh  |  删除虚拟主机

Mapn 相关目录:
MySQL :   /usr/local/mysql
Apache :   /usr/local/apache
PHP :     /usr/local/php
Nginx :   /usr/local/nginx
网站主目录 :    /home/wwwroot


目前 Mapn 仅对 CentOS / RadHat 32bit 最好的支持,更多系统版本将陆续推出。


Powered by Typecho. Trapecho theme by 咳嗽di小鱼.