一、准备工作
1. 安装编译环境:
yum install make apr* autoconf automake curl-devel gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel gd kernel keyutils patch perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel ppl cloog-ppl keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* php-common php-gd ncurses* libtool* libxml2 libxml2-devel patch libmcrypt libmcrypt-devel zlib:nginx提供gzip模块,需要zlib库支持,openssl:nginx提供ssl功能,pcre:支持地址重写rewrite功能 2. 下载源码包 Nginx:Nainx-1.8.0: http://nginx.org/download/nginx-1.8.0.tar.gz Boost:http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.tar.gzMySql: MySql-5.6.24: http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.24.tar.gz Cmake:Cmake-3.2.2:http://www.cmake.org/files/v3.2/cmake-3.2.2.tar.gz Php5:http://cn2.php.net/get/php-5.5.25.tar.gz/from/this/mirror 二、编译安装Nginx
1.1 Nginx编译安装 mkdir -p /var/www/nginx/web groupadd -r nginx #创建nginx用户 #创建用户nginx并加入到nginxuseradd -s /sbin/nologin -g nginx -r nginx mkdir /usr/sbin/nginx mkdir /usr/local/nginx mkdir /etc/nginx/ mkdir /var/run/nginx/ cd nginx-1.8.0 ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx/ --conf-#创建二进制文件目录 #创建安装目录 #创建PID文件目录 组,不允许nginx用户登录系统 #创建配置文件目录 tar -zxvf nginx-1.8.0.tar.gz #解压nginx-1.8.0.tar.gz path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx/nginx.pid --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --with-http_stub_status_module make && mke install #编译安装完成 ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_dav_module --with-http_flv_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-mail --with-pcre=../pcre-8.11 --with-zlib=../zlib-1.2.5 --with-debug --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi make && make install ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ --prefix #nginx安装目录,默认在/usr/local/nginx --pid-path #pid问件位置,默认在logs目录 --lock-path #lock问件位置,默认在logs目录 --with-http_ssl_module #开启HTTP SSL模块,以支持HTTPS请求。 --with-http_dav_module #开启WebDAV扩展动作模块,可为文件和目录指定权限 --with-http_flv_module #支持对FLV文件的拖动播放 --with-http_realip_module #支持显示真实来源IP地址 --with-http_gzip_static_module #预压缩文件传前检查,防止文件被重复压缩 --with-http_stub_status_module #取得一些nginx的运行状态 --with-mail #允许POP3/IMAP4/SMTP代理模块 --with-mail_ssl_module #允许POP3/IMAP/SMTP可以使用SSL/TLS --with-pcre=../pcre-8.11 #注意是未安装的pcre路径 --with-zlib=../zlib-1.2.5 #注意是未安装的zlib路径 --with-debug #允许调试日志 --http-client-body-temp-path #客户端请求临时文件路径 --http-proxy-temp-path #设置http proxy临时文件路径 --http-fastcgi-temp-path #设置http fastcgi临时文件路径 --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi #设置uwsgi 临时文件路径 --http-scgi-temp-path=/var/tmp/nginx/scgi #设置scgi 临时文件路径 1.2 设置nginx
设置nginx自启动,加入以下脚本
vi /etc/init.d/nginx 配置一 ======================================================= #!/bin/bash # nginx Startup script for the Nginx HTTP Server # it is v.0.0.2 version. # chkconfig: - 85 15 # description: Nginx is a high-performance web and proxy server. # It has a lot of features, but it's not for everyone. # processname: nginx # pidfile: /var/run/nginx.pid # config: /usr/local/nginx/conf/nginx.conf nginxd=/usr/sbin/nginx/nginx nginx_config=/etc/nginx/nginx.conf nginx_pid=/var/run/nginx/nginx.pid RETVAL=0 prog=\"nginx\" # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = \"no\" ] && exit 0 [ -x $nginxd ] || exit 0 # Start nginx daemons functions. start() { if [ -e $nginx_pid ];then echo \"nginx already running....\" exit 1 fi echo -n $\"Starting $prog: \" daemon $nginxd -c ${nginx_config} RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx return $RETVAL } # Stop nginx daemons functions. stop() { echo -n $\"Stopping $prog: \" killproc $nginxd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx/nginx.pid } # reload nginx service functions. reload() { echo -n $\"Reloading $prog: \" #kill -HUP `cat ${nginx_pid}` killproc $nginxd -HUP RETVAL=$? echo } # See how we were called. case \"$1\" in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; status) status $prog RETVAL=$? ;; *) echo $\"Usage: $prog {start|stop|restart|reload|status|help}\" exit 1 esac exit $RETVAL ======================================================= 配置二 ======================================================= #! /bin/bash # Description: Startup script for webserver on CentOS. cp it in /etc/init.d and # chkconfig --add nginx && chkconfig nginx on # then you can use server command control nginx # # chkconfig: 2345 08 99 # description: Starts, stops nginx set -e PATH=$PATH:/usr/sbin/nginx/ DESC=\"nginx daemon\" NAME=nginx DAEMON=/usr/sbin/nginx/$NAME CONFIGFILE=/etc/nginx/nginx.conf PIDFILE=/var/run/nginx/nginx.pid SCRIPTNAME=/etc/init.d/$NAME # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0 d_start() { $DAEMON -c $CONFIGFILE || echo -n \" already running\" } d_stop() { kill -QUIT `cat $PIDFILE` || echo -n \" not running\" } d_reload() { kill -HUP `cat $PIDFILE` || echo -n \" can't reload\" } case \"$1\" in start) echo -n \"Starting $DESC: $NAME\" d_start echo \".\" ;; stop) echo -n \"Stopping $DESC: $NAME\" d_stop echo \".\" ;; reload) echo -n \"Reloading $DESC configuration...\" d_reload echo \"reloaded.\" ;; restart) echo -n \"Restarting $DESC: $NAME\" d_stop sleep 1 d_start echo \".\" ;; *) echo \"Usage: $SCRIPTNAME {start|stop|restart|force-reload}\" >&2 exit 3 ;; esac exit 0 ======================================================= 再配置每天自动切割nginx日志脚本: ======================================================= vi /usr/local/nginx/sbin/cut_nginx_log.sh #!/bin/bash # This script run at 00:00 # The Nginx logs path logs_path=\"/var/log/nginx/error.log\" logs_bak_path=\"/root/logs/nginx/\" mkdir -p ${logs_bak_path}$(date -d \"yesterday\" +\"%Y\")/$(date -d \"yesterday\" +\"%m\")/ cp ${logs_path} ${logs_bak_path}$(date -d \"yesterday\" +\"%Y\")/$(date -d \"yesterday\" +\"%m\")/access_$(date -d \"yesterday\" +\"%Y%m%d\").log rm -rf ${logs_path} kill -USR1 `cat /var/run/nginx/nginx.pid ` ======================================================= 定时自动启动任务crontab 设定cut_nginx_logs.sh启动时间。 执行命令crontab -e进入编辑状态 添加如下代码,每天0点01分启动。 [html] view plaincopy 01 00 * * * /bin/sh /usr/local/nginx/sbin/cut_nginx_logs.sh :wq 退出 crontab -l 查看运行情况 chmod 700 /etc/init.d/nginx chkconfig --add nginx chkconfig --level 2345 nginx on /etc/init.d/nginx start 三、编译安装MySql 1.1 编译安装cmake tar -zxvf cmake-3.2.2.tar.gz编译安装cmake cd cmake-3.2.2 ./configure make && make install 1.2 编译安装
mkdir /usr/local/boost cp boost_1_57_0.tar.gz /usr/local/boost/ groupadd mysql 接登录系统 mkdir -p /data/mysql #创建MySQL数据库存放目录 chown -R mysql:mysql /data/mysql #设置权限 mkdir -p /usr/local/mysql #创建安装目录 编译安装mysql #添加mysql组 #创建用户mysql并加入到mysql组,不允许mysql用户直useradd -g mysql mysql -s /bin/false mkdir -p /etc/mysql/ tar zxvf mysql-5.6.24.tar.gz cd mysql-5.6.24 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DINSTALL_DATADIR=/data/mysql/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_SSL=yes -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DSYSCONFDIR=/etc/mysql/ -DWITH_READLINE=on -DWITH_BOOST=/usr/local/boost/ Make Make install 1.3配置MySql
1.2.1 5.6版本安装
mv /etc/my.cnf /etc/my.cnf.bak /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld chown 755 /etc/rc.d/init.d/mysqld service mysqld start 注:在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索\"$basedir/my.cnf\",在本例中就是 /usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置! 注意:在CentOS 6.4版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。 在使用\"yum update\"更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题。 MySQL启动成功后,root默认没有密码,我们需要设置root密码。 设置之前,我们需要先设置PATH,要不不能直接调用mysql 修改/etc/profile文件,在文件末尾添加 ======================================================= PATH=/usr/local/mysql/bin:$PATH export PATH ======================================================= 关闭文件,运行下面的命令,让配置立即生效 source /etc/profile 现在,我们可以在终端内直接输入mysql进入,mysql的环境了 执行下面的命令修改root密码 mysql -uroot mysql> SET PASSWORD = PASSWORD('1314@kissy!'); 若要设置root用户可以远程访问,执行 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%' IDENTIFIED BY 'password' WITH GRANT OPTION; 红色的password为远程访问时,root用户的密码,可以和本地不同。 四、PHP安装
1.编译安装PHP
mkdir -p /usr/local/php5 mkdir -p /etc/php5 ./configure --prefix=/usr/local/php5 --with-config-file-path=/etc/php5 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-gd --with-iconv --with-zlib --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --disable-fileinfo make make install 2.配置php
cp php.ini-production /usr/local/php5/etc/php.ini #复制php配置文件到安装目录 rm -rf /etc/php.ini #删除系统自带配置文件 ln -s /usr/local/php5/etc/php.ini /etc/php.ini #添加软链接 cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf#拷贝模板文件为php-fpm配置文件 vi /usr/local/php5/ etc/php-fpm.conf #编辑 user = nginx #设置php-fpm运行账号为nginx group = nginx #设置php-fpm运行组为nginx pid = run/php-fpm.pid #取消前面的分号 设置 php-fpm开机启动 cp /root/php-5.6.9/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm 录 chmod +x /etc/rc.d/init.d/php-fpm #添加执行权限 chkconfig php-fpm on #设置开机启动 vi /usr/local/php5/etc/php.ini #编辑配置文件 找到date.timezone 修改为: ======================================================= date.timezone = PRC #设置时区 ======================================================= 找到:disable_functions = 修改为: #拷贝php-fpm到启动目======================================================= disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname ======================================================= 五、配置nginx支持php
vi /usr/local/nginx/conf/nginx.conf #编辑配置文件,需做如下修改 user nginx nginx; #首行user去掉注释,修改Nginx运行组为nginx nginx;必须与/usr/local/php5/etc/php-fpm.conf中的user,group配置相同,否则php运行出错 ======================================================= server { listen 8001;/*监听端口号*/ server_name www.allposs.cn;/*域名*/ access_log/usr/local/nginxweb/htdocs/access.log;/*站点访问日志*/ location / { root /var/www/nginx/web/;/*页面文件目录*/ index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html;/*服务器错误页面*/ location = /50x.html { root html; } # pass the PHP scripts to FastCGI serverlistening on 127.0.0.1:9000 location ~ \\.php$ { root /var/www/nginx/web/; fastcgi_pass 127.0.0.1:9000; /*Nginx转发请求地址*/ fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\\.ht { deny all; } } ======================================================= 六、测试篇
cd /var/www/nginx/web/ #进入nginx默认网站根目录 vi index.php #编辑 :wq! #保存退出 chown nginx.nginx /var/www/nginx/web/ -R #设置目录所有者 chmod 700 /var/www/nginx/web/ -R #设置目录权限 shutdown -r now #重启系统 在浏览器中打开服务器IP地址,会看到下面的界面,配置成功 服务器相关操作命令 service nginx restart #重启nginx service mysqld restart #重启mysql /usr/local/php5/sbin/php-fpm #启动php-fpm /etc/rc.d/init.d/php-fpm restart #重启php-fpm /etc/rc.d/init.d/php-fpm stop #停止php-fpm /etc/rc.d/init.d/php-fpm start #启动php-fpm ############################################################################# 备注: nginx默认站点目录是:/var/www/nginx/web/ 权限设置:chown nginx:nginx /var/www/nginx/web/ -R MySQL数据库目录是:/data/mysql 权限设置:chown mysql.mysql -R /data/mysql 七、问题篇
1.问题一
执行时遇到如下错误: [root@nginx ~]# /etc/init.d/nginx start bash: /etc/init.d/nginx: /bin/bash^M: bad interpreter: 没有那个文件或目录 错误分析: 我先详细检查了脚本内容,发现并没有错误,想到以前遇到过脚本格式导致不能执行的问题,于是查看脚本格式: [root@nginx ~]#vim /etc/init.d/nginx ……脚本内容省略…… :set ff fileformat=doc 因此可以肯定次脚本估计是其在windows下写的,直接修改格式为unix再次执行: [root@nginx ~]#vim /etc/init.d/nginx ……脚本内容省略…… :set ff=unix 保存后再次执行,一切正常! 八、参考文档
http://www.cnblogs.com/xiongpq/p/3384681.html http://www.cnblogs.com/whoamme/p/3678795.html http://blog.csdn.net/tjssehaige/article/details/40938757
因篇幅问题不能全部显示,请点此查看更多更全内容