CentOS 6 编译安装Nginx+PHP+Mysql,有需要的朋友不妨参考下。
[1].安装Nginx
1,添加一个不能登录且没有主目录的用户:
2,必要的组件
# unzip pcre-8.13.zip
# cd pcre-8.13
# ./configure
# make && make install
3,编译nginx并安装
# cd nginx-1.1.2
# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
# make && make install
[2].安装PHP
1,安装必要的组件
# wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
# tar -zxvf libmcrypt-2.5.7.tar.gz
# cd libmcrypt-2.5.7
# ./configure
# make && make install
==64位系统==
==64位系统==
2,编译php并安装
# ./configure --prefix=/usr/local/php --with-iconv --with-zlib --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql --with-mysqli --enable-sqlite-utf8 --with-pdo-mysql --enable-ftp --with-jpeg-dir --with-freetype-dir --with-png-dir --enable-fpm --with-fpm-user=www --with-fpm-group=www
# make && make install
3,拷贝和修改php配置文件
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# /usr/local/php/bin/php --ini //测试ini文件是否加载
修改php.ini
safe_mode = On
register_globals = Off
magic_quotes_gpc = Off
allow_url_fopen = Off
allow_url_include = Off
expose_php=Off
disable_functions = shell_exec,system,exec,passthru,show_source,curl_exec,curl_multi_exec,get_cfg_var
[Date]
date.timezone = “Asia/Shanghai”
修改php-fpm.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
emergency_restart_threshold = 0
emergency_restart_interval = 0
[www]
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
4,添加服务启动脚本
# cp php-fpm /etc/init.d/php-fpm
# chmod 755 /etc/init.d/nginx
# chmod 755 /etc/init.d/php-fpm
# chkconfig --add nginx
# chkconfig --add php-fpm
# chkconfig nginx on
# chkconfig php-fpm on
[3].安装Mysql
3.1, 创建mysql安装目录
3.2, 创建数据存放目录
3.3, 创建用户和用户组与赋予数据存放目录权限
# chown mysql.mysql -R /data/mysql/
3.4, 安装必要的组件
# yum -y install ncurses-devel
3.5, 编译安装Mysql
# make && make install
3.6, 初始化数据库
# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/
3.7, 配置环境
# cp support-files/mysql.server /etc/init.d/mysql
# chmod 755 /etc/init.d/mysql
# chkconfig mysql on
# export PATH=/usr/local/mysql/bin:$PATH
3.8, 启动并设置初始密码
# mysqladmin -uroot password '123123'
进行再修改密码的语句
2: flush privileges;(刷新权限)
在nginx 配置文件中经常会用到last与break指令。两者之间的区别在哪里呢?
以nginx-1.0.14的源码为例:
/src/http/modules/ngx_http_rewrite_module.c (366-389行)
if (cf->args->nelts == 4) {
if (ngx_strcmp(value[3].data, "last") == 0) {
last = 1;
} else if (ngx_strcmp(value[3].data, "break") == 0) {
regex->break_cycle = 1;
last = 1;
} else if (ngx_strcmp(value[3].data, "redirect") == 0) {
regex->status = NGX_HTTP_MOVED_TEMPORARILY;
regex->redirect = 1;
last = 1;
} else if (ngx_strcmp(value[3].data, "permanent") == 0) {
regex->status = NGX_HTTP_MOVED_PERMANENTLY;
regex->redirect = 1;
last = 1;
} else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid parameter \"%V\"", &value[3]);
return NGX_CONF_ERROR;
}
}
break 与last的区别在于多了一行,regex->break_cycle = 1; 那么我们来看看这行语句具体有何含义。
break_cycle赋值后会被ngx_http_script_regex_code_t *code 调用。
具体在/src/http/ngx_http_script.c (1007行),代码段如下:
if (code->break_cycle) {
r->valid_location = 0;
r->uri_changed = 0;
} else {
r->uri_changed = 1;
}
r->valid_location = 0; 表示break指令不会继续作用于之后的location域。
r->uri_changed = 0;表示break指令停止继续匹配。而last指令会继续匹配下去。
继续看如下代码
/src/http/ngx_http_core_module.c(1038行)
ngx_http_core_post_rewrite_phase(ngx_http_request_t *r,
ngx_http_phase_handler_t *ph)
{
ngx_http_core_srv_conf_t *cscf;
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"post rewrite phase: %ui", r->phase_handler);
if (!r->uri_changed) {
r->phase_handler++;
return NGX_AGAIN;
}
r->uri_changed = 0; 内核会跳出处理下一个请求。
last指令 r->uri_changed = 1; 会继续不停的匹配。
总结:使用break指令后,不会继续作用于随后的location域,不会循环继续匹配。last指令恰恰相反。
从效率上来说尽量使用break指令。
Centos 6.2 源码安装Nginx0.8.54的方法,供大家学习参考。
一. 准备环境
1.安装gcc
yum install gcc gcc-c++
2.安装pcre
为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCRE(Perl Compatible Regular Expressions)包。
下载pcre-8.20.tar.gz,地址是:http://sourceforge.net/projects/pcre/files/pcre/ ,上传至/usr/local,安装目录:/usr/local/pcre
# tar zxvf pcre-8.20.tar.gz
# cd pcre-8.20
# ./configure --prefix=/usr/local/pcre
# make
# make install
二. 安装Nginx
下载nginx-0.8.54.tar.gz,地址是:http://nginx.org/en/download.html ,上传至/usr/local,安装目录:/usr/local
2.1.安装
#mv nginx-0.8.54 nginx
# cd nginx-0.8.54
# ./configure --sbin-path=/usr/local/nginx --conf-path=/usr/local/nginx --pid-path=/usr/local/nginx --with-http_ssl_module --with-pcre=/usr/local/pcre-8.20
# make
# make install
2.2.检查nginx是否安装成功
#cd /usr/local/nginx/sbin
#./nginx -t
结果显示:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2.3.启动nginx
#cd /usr/local/nginx/sbin
#./nginx
2.4.检查是否启动成功
客户端ie 浏览器中输入 http://ip(Linux)
其中参数:
--with-pcre=/usr/local/pcre-8.20 指的是pcre-8.20 的源码路径,并不是安装路径。
安装成功后 /usr/local/webserver/nginx 目录下有四个子目录分别是:conf、html、logs、sbin 。其中 Nginx 的配置文件存放于 conf/nginx.conf,Nginx 只有一个程序文件位于 sbin 目录下的 nginx 文件。确保系统的 80 端口没被其他程序占用,运行 sbin/nginx 命令来启动 Nginx,打开浏览器访问此机器的 IP(地址栏输入:127.0.0.1),如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
三. 安装过程中出现的问题
1.pcre :/configure: error: no acceptable C compiler found in $PATH See `config.log' for more details
原因是没装gcc
解决办法:yum install gcc
2../configure :checking for C++ compiler default output file name... configure: error: C++ compiler cannot create executables
See `config.log' for more details.
原因是由于c++编译器的相关package没有安装
解决办法:yum install gcc-c++
3.pcre:make时报错:[pcrecpp.lo] Error 1
原因是由于c++编译器的相关package没有安装
解决办法:yum install gcc-c++,重新configure,make && make install通过。
4../configure: error: the HTTP rewrite module requires the PCRE library
原因是需要PCRE library
解决办法:yum -y install pcre-devel
5../configure: error: the HTTP cache module requires md5 functions
from OpenSSL library. You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.
原因:需要OpenSSL library
解决办法:yum -y install openssl openssl-devel