Tengine的官网:http://tengine.taobao.org/php
wget http://tengine.taobao.org/download/tengine-2.1.0.tar.gz` tar -zxvf tengine-2.1.0.tar.gz cd tengine-2.1.0
须要注意的是,我但愿用Jemalloc
来分配和释放tengine内存(比默认的内存管理好多了),因此编译选项设置了--with-jemalloc
的源码路径,源码包的得到具体经过如下方式:html
官网 http://www.canonware.com/jemalloc/node
wget https://github.com/jemalloc/jemalloc/releases/download/3.6.0/jemalloc-3.6.0.tar.bz2 tar -jxvf jemalloc-3.6.0.tar.bz2 -C /usr/local/src
./configure \ --prefix=/usr/local/nginx \ --with-jemalloc=/usr/local/src/jemalloc-3.6.0/ \ –-user=www-data \ –-group=www-data
若是想知道更多详细的编译参数的话能够执行./configure --help
,会打印出全部的编译选项,能够按需添加或者禁用一些tengine
模块,也能够在之后的使用中按需添加编译属性而后从新编译安装便可。
执行configure
时,可能会报各类依赖包不存在的提示,好比openssl
,若是是开发环境或者对这些依赖程序的版本没有要求的话,能够直接经过apt-get install libxxx
的方式安装这些依赖包。mysql
make make test make install
make install
以后会安装在/usr/local/nginx
目录下,其中conf
为tengine
的配置文件目录,咱们修改一下/usr/local/nginx/conf/nginx.conf
这个配置文件:
若是有像Apache
的vhost
需求的话,能够在conf
目录下新建一个文件夹vhost
,而后全部虚拟主机的配置文件都放到vhost
这里面:nginx
cd /usr/local/nginx/conf mkdir vhost vim nginx.conf
打开nginx.conf
配置文件后,最基础的须要作如下几个地方的修改(所提到的地方都要去除前面的#
号注释,只修改提到的地方,其它地方保留默认便可):git
#Tengine的进程以www-data用户启动 user www-data; #自动以CPU核心数启动相应数量的进程 worker_processes auto; #开启gzip支持 gzip on #全局的错误日志地址,方便调试 error_log /home/jason/BigDisk/nginx/error.log; server { #设置默认访问的server(default是指经过ip或者servername未定义的域名进行访问时就走到这个server) listen 80 default; #默认访问的路径 root /home/jason/Work/nginx-default; location / { index index.php index.html index.htm; } #默认错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #抓发到php-fpm location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.socket; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } #引用其余的vhost配置文件 include vhost/*.conf;
安装好Tengine
后须要启动它,github
上有人已经作了一份比较完美的nginx启动脚本,咱们直接拿下来用:wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
github
赋予可执行的权限:chmod +x /etc/init.d/nginx
web
启动Tengine:/etc/init.d/nginx start
sql
这样基本上就配置好了Tenginenpm
PHP的官网:http://php.net/
安装的php版本为5.6.8
wget http://cn2.php.net/distributions/php-5.6.8.tar.bz2 tar jxvf php-5.6.8.tar.bz2 cd php-5.6.8
./configure --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-config-file-scan-dir=/usr/local/php/etc/extends \ --enable-fpm \ --with-fpm-user=www-data \ --with-fpm-group=www-data \ --with-mysql=shared,mysqlnd \ --enable-sockets \ --with-mcrypt \ --with-curl \ --with-openssl \ --with-mysql \ --enable-mbstring
编译参数带上了--enable-fpm
,这样编译时就会自动为咱们编译php-fpm
--with-config-file-path
指定php的配置文件目录--with-config-file-scan-dir
指定php的其它配置文件放到哪一个目录下
一样,执行configure
的时候会出现各类依赖库未找到的错误,仍是能够经过apt-get install libxxx的方式添加这些库,或者本身下载源码编译安装这些库。
make make test make install
把php的一些二进制执行文件软连接到系统执行目录中ln -s /usr/local/php/bin/php /usr/local/bin/php
ln -s /usr/local/php/bin/phpize /usr/local/bin/phpize
进入php的配置文件cd /usr/local/php/etc
从源码包中复制php.ini-development
或者php.ini-production
文件到此目录下,并修更名字为php.ini
其中php.ini-development
适合开发环境下的php配置文件php.ini-production
适合生产环境下的php配置文件
打开php-fpm
的配置文件,作以下修改:vim php-fpm.conf
//php-fpm程序运行的pid记录文件 pid = /var/run/php-fpm.pid //在[www]区域的配置 user = www-data group = www-data //这样设置的目的是让tengine与php-fpm经过这个socket地址进行通讯 listen = /var/run/php-fpm.socket //建立socket地址时的用户、组、权限, //最好以tengine运行的用户一致,这样tengine才有权限与php-fpm进行通讯 listen.owner = www-data listen.group = www-data listen.mode = 0660
进入php源码包中的ext目录cd php-5.6.8/ext
举个例子吧,假如说咱们要编译一个mcrypt
扩展
进入mcrypt模块的源码目录cd mcrypt
执行phpize
来动态添加php扩展phpize
编译安装./configure
make
make install
安装好后,咱们以前编译php时设置的--with-config-file-scan-dir
就派上用场了,
进入设置的/usr/local/php/etc/extends
目录,若是没有extends
目录能够mkdir
一个。
新建一个mcrypt.conf
文件vim mcrypt.conf
写入
extension=mcrypt.so
这样的话,若是之后咱们不须要mcrypt
扩展时,能够直接删除/usr/local/php/etc/extends/mcrypt.conf
配置文件便可。
php源码包中已自带php-fpm的启动脚本,咱们将它复制到/etc/init.d/
:cp php-5.6.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
修改php-fpm文件vim /etc/init.d/php-fpm
prefix=/usr/local/php //这里的pid文件路径就是上面(php-fpm.conf)配置文件中所设置的pid php_fpm_PID=/var/run/php-fpm.pid
赋予可执行的权限:chmod +x /etc/init.d/php-fpm
启动php-fpm:/etc/init.d/php-fpm start
这样php
和php-fpm
的配置基本就完成了,关于如何配合Tengine
使用在最下面会说。
wget http://nodejs.org/dist/v0.12.2/node-v0.12.2.tar.gz tar zxvf node-v0.12.2.tar.gz cd node-v0.12.2
nodejs的编译安装不须要太多配置
./configure make make install
这样npm
和 node
就一并安装好了
进入先前设置好的Tengine的vhost配置目录:cd /usr/local/nginx/conf/vhost
假设咱们的web目录是在/opt/www
,域名为test.com
新建一个test.com.conf
配置文件
server { #访问端口 listen 80; #所绑定的域名 server_name test.com; #access_log logs/host.access.log main; location / { root /opt/www; index index.php index.html; } #设置php文件的代理转发 location ~ \.php$ { root /opt/www; #转发至php-fpm配置文件中设置的socket通讯地址 fastcgi_pass unix:/var/run/php-fpm.socket; fastcgi_index index.php; #所访问的php文件路径地址 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
配置文件建立成功后执行/etc/init.d/nginx reload
便可
假设咱们运行了一个端口号3000的node.js的web应用
咱们的域名为testnode.com
新建一个testnode.com.conf
配置文件
#设置转发池 upstream testnode { #咱们的nodejs应用地址,可添加多个 #这块的意义是,咱们能够启动多个相同的nodejs应用,并设置不一样的端口号,或者有多台同服务的nodejs服务器,负载均衡 server 127.0.0.1:3000; server 127.0.0.1:3001; server 127.0.0.1:3002; .... keepalive 64; } server { listen 80; server_name testnode.com; location / { #这块设置的意义是当全部请求转发至nodejs应用时,除了客户端发来的请求头以外再携带如下这些头信息 proxy_set_header X-Real-IP remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header Connection ""; #http1.1比http1.0的效率要高的多 proxy_http_version 1.1; #填上面定义的转发池名称 proxy_pass http://testnode; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
配置文件建立成功后执行/etc/init.d/nginx reload
便可