——————————————安装与配置——————————————
1.相关软件:
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
http://nginx.org/download/nginx-1.2.0.tar.gz
pcre
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.tar.gz
php
http://cn.php.net/get/php-5.3.13.tar.bz2/from/this/mirror
libiconv http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
mhash
http://ncu.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
mcrypt http://ncu.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
libmcrypt http://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
mysql
ftp://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-5.5/mysql-5.5.24.tar.gz
cmake http://www.cmake.org/files/v2.8/cmake-2.8.5.tar.gz
2.MySQL
(1).安装cmake
[root@study ~]# tar zxf cmake-2.8.5.tar.gz
[root@study ~]# cd cmake-2.8.5
[root@study cmake-2.8.5]# ./configure
[root@study cmake-2.8.5]# gmake && gmake install && cd ../
(2).安装配置mysql
[root@study ~]# useradd mysql
[root@study ~]# mkdir -p /data/mysql
[root@study ~]# chown mysql:mysql /data/mysql
[root@study ~]# tar zxf mysql-5.5.24.tar.gz
[root@study ~]#cd mysql-5.5.24
[root@study mysql-5.5.24]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc/
[root@study mysql-5.5.24]# make && make install
[root@study mysql-5.5.24]# cp support-files/my-medium.cnf /etc/my.cnf
[root@study mysql-5.5.24]# cp support-files/mysql.server /etc/init.d/mysqld
[root@study mysql-5.5.24]# chmod 755 /etc/init.d/mysqld
[root@study ~]# vim /etc/my.cnf
#在[mysqld]增加
datadir
= /data/mysql
wait-timeout = 30
max_connections = 512
default-storage-engine = MyISAM
#修改
max_allowed_packet = 16M
[root@study ~]# cd /usr/local/mysql/
[root@study mysql]# ./scripts/mysql_install_db --user=mysql
#生成授权表
[root@study ~]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18
[root@study ~]# chkconfig mysqld on
[root@study ~]# /etc/init.d/mysqld start
修改密码:
[root@study ~]# /usr/local/mysql/bin/mysqladmin -u root password 123456
3.PHP
(1).安装相关的库
[root@study ~]# tar zxf libiconv-1.13.1.tar.gz
[root@study ~]# cd libiconv-1.13.1
[root@study libiconv-1.13.1]# ./configure --prefix=/usr/local/
[root@study libiconv-1.13.1]# make && make install && cd
[root@study ~]# tar zxf libmcrypt-2.5.8.tar.gz
[root@study ~]# cd libmcrypt-2.5.8
[root@study libmcrypt-2.5.8]# ./configure && make && make install
[root@study libltdl]# /sbin/ldconfig && cd libltdl/ && ./configure --enable-ltdl-install
[root@study libltdl]# make && make install && cd
[root@study ~]# tar zxf mhash-0.9.9.9.tar.gz
[root@study ~]# cd mhash-0.9.9.9
[root@study mhash-0.9.9.9]# ./configure && make && make install && cd
[root@study ~]# ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
[root@study ~]# ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
[root@study ~]# ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
[root@study ~]# ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
[root@study ~]# ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
[root@study ~]# ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
[root@study ~]# ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
[root@study ~]# ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
[root@study ~]# ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
[root@study ~]# ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
[root@study ~]# tar zxf mcrypt-2.6.8.tar.gz
[root@study ~]# cd mcrypt-2.6.8
[root@study mcrypt-2.6.8]# /sbin/ldconfig
[root@study mcrypt-2.6.8]# ./configure && make && make install && cd
(2).php安装
[root@study ~]# tar jxf php-5.3.13.tar.bz2
[root@study ~]# cd php-5.3.13
[root@study ~]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql -enable-fastcgi -enable-fpm \
--with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir \
--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath \
--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-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap
[root@study php-5.3.13]# make ZEND_EXTRA_LIBS='-liconv'
[root@study php-5.3.13]# make install
[root@study php-5.3.13]# cp php.ini-production /usr/local/php/etc/php.ini
(3).配置PHP-FPM(PHP5.3.3已经集成php-fpm了,不再是第三方的包了)
[root@study ~]# useradd www
[root@study ~]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@study ~]# /usr/local/php/sbin/php-fpm -t
#检查语法
[09-May-2012 22:03:32] NOTICE: configuration file /usr/local/php/etc/php-fpm.conf test is successful
[root@study ~]# echo "/usr/local/php/sbin/php-fpm" >> /etc/rc.local
#开机自启动
[root@study ~]# /usr/local/php/sbin/php-fpm
#启动服务
4.Nginx
(1).安装pcre
[root@study ~]# tar zxf pcre-8.21.tar.gz
[root@study ~]# cd pcre-8.21
[root@study pcre-8.21]# ./configure && make && make install
(2).nginx安装
[root@study ~]# tar zxf nginx-1.2.0.tar.gz
[root@study ~]# cd nginx-1.2.0
[root@study nginx-1.2.0]# ./configure --user=www --group=www --prefix=/usr/local/nginx \
--with-http_stub_status_module --with-http_ssl_module \
--with-pcre --lock-path=/var/run/nginx.lock --pid-path=/var/run/nginx.pid
[root@study nginx-1.2.0]# make && make install
[root@study ~]# /usr/local/nginx/sbin/nginx
#启动服务
[root@study ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local #开机自启动
(3).配置nginx
编辑/usr/local/nginx/conf/nginx.conf
将
#user nobody;
events {
worker_connections 1024;
}
#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;
#}
修改成:
- user www;
- events {
- use epoll;
- worker_connections 1024;
- }
- location ~ \.php$ {
- root html;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
(4).重启服务测试
[root@study ~]# /usr/local/nginx/sbin/nginx -t
#语法检查
[root@study ~]# /usr/local/nginx/sbin/nginx -s reload
#重新加载配置
[root@study ~]# cd /usr/local/nginx/html/
[root@study html]# cat index.php
<?php
phpinfo();
?>
问题:
1.make: [ext/phar/phar.phar] error 1
解决:在编译的时候加--without-pear参数,如果还不行,make的时候不添加 ZEND_EXTRA_LIBS='-liconv' 参数。
————————————————使用————————————————
一、Nginx的启动、关闭、重启及版本
1.启动
/usr/local/nginx/sbin/nginx
2.关闭
kill -9 `cat /var/run/nginx.pid`
3.平滑重启
kill -HUP `cat /var/run/nginx.pid`
4.查看版本及编译信息
/usr/local/nginx/sbin/nginx -V
二、Nginx配置
1.虚拟主机配置
- server {
- listen 80; #端口
- server_name web1.example.com; #域名或IP
- access_log logs/web1.example.com main; #日记
-
- location /{
- index index.php;
- root /data/web1; #目录(可用绝对路径或相对路径)
- }
-
- location ~ \.php$ { #php
- root html;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /data/web1$fastcgi_script_name;
- include fastcgi_params;
- }
- }
2.负载均衡
www.example.com域名指向Nginx主机的ip,当用户访问www.example.com时,Nginx将请求负载均衡到后端的两台web主机。
配置文件:
[root@master conf]# egrep -v "(#|^$)" nginx.conf
- user www;
- worker_processes 2;
- events {
- use epoll;
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- log_format example.com '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
- sendfile on;
- keepalive_timeout 65;
- upstream web {
- server 192.168.209.128:80;
- server 192.168.209.129:80;
- }
- server {
- listen 80;
- server_name www.example.com;
- location / {
- proxy_pass http://web;
- proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- access_log /data/logs/example.com.log example.com;
- }
- }
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。
Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。
ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
url_hash:此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
3.日志轮询,通过Nginx的信号控制功能的脚本来实现日志的自动切割。
[root@master ~]# cat nginxlog.sh
- #!/bin/bash
- log_dir="/data/logs"
- data_dir=`date +%Y%m%d%H`
- mkdir -p $log_dir/$data_dir >/dev/null 2>&1
- mv $log_dir/access.log $log_dir/$data_dir/access.log
- mv $log_dir/error.log $log_dir/$data_dir/error.log
- kill -USR1 `cat /var/run/nginx.pid`
配合crontab每天凌晨00:05自动切割
[root@master ~]# crontab -l
5 0 * * * sh /root/nginxlog.sh
4.启动脚本
[root@master ~]# vim /etc/init.d/nginx
- #!/bin/bash
- #date: 2012-05-25
- #chkconfig: 345 85 15
- #description: nginx [engine x] is light http web/proxy server
-
- . /etc/rc.d/init.d/functions
- nginx="/usr/local/nginx/sbin/nginx"
- prog="nginx"
- RETVAL=0
-
-
- start() {
- echo -n $"Starting $prog:"
- daemon $nginx
- RETVAL=$?
- echo
- return $RETVAL
- }
- stop() {
- echo -n $"Stoping $prog:"
- daemon pkill -9 nginx
- echo
- return $RETVAL
- }
- reload() {
- echo -n $"Reloading $prog:"
- daemon kill -HUP `cat /var/run/nginx.pid`
- echo
- return $RETVAL
- }
- check () {
- if [ `$nginx -t` ]; then
- echo "error"
- fi
- }
-
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- reload)
- reload
- ;;
- check)
- check
- ;;
- *)
- echo $"Usage: $0 {start|stop|restart|check}"
- RETVAL=1
- esac
-
- exit $RETVAL
[root@master ~]# chmod a+x /etc/init.d/nginx
[root@master ~]# chkconfig --add nginx