实验课题:搭建LAMP,安装Nginx,作为代理,将MySQL安装在单独的机器,apache负责动态,nginx负责静态


实验环境:

1、VMware Workstation 11

2、设备A:Nginx+Apache+PHP,IP地址:192.168.1.10,Host:web

3、设备B:MySQL,IP地址:192.168.1.11,Host:mysql

4、Linux发行版:Centos 6.6 x86;

5、Nginx:http://nginx.org/download/nginx-1.6.2.tar.gz

6、Apache:http://syslab.comsenz.com/downloads/linux/httpd-2.2.16.tar.gz

7、PHP:http://cn2.php.net/distributions/php-5.3.28.tar.gz

8、MySQL:http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.42-linux2.6-i686.tar.gz


实验准备:

1、分别在设备A和B中下载各个软件;

2、更新系统时间;

3、清空Iptables,关闭Selinux。


实验步骤:

设备A

一、安装apache

# 解压软件包,进入目录文件[root@web src]# tar -xvf httpd-2.2.16.tar.gz[root@web src]# cd httpd-2.2.16# 编译参数[root@web httpd-2.2.16]# ./configure --prefix=/usr/local/apache2 --bindir=/usr/bin/ --sbindir=/usr/sbin/ --enable-mods-shared=most --enable-so......................开始编译......................# 第一个错误提示:未安装gcc编译器,我们yum这个软件就好configure: error: in `/usr/local/src/httpd-2.2.16/srclib/apr':configure: error: no acceptable C compiler found in $PATH      See `config.log' for more details.configure failed for srclib/apr......................继续编译........................config.status: creating support/log_server_statusconfig.status: creating support/logresolve.plconfig.status: creating support/phf_abuse_log.cgiconfig.status: creating support/split-logfileconfig.status: creating build/rules.mkconfig.status: creating build/pkg/pkginfoconfig.status: creating build/config_vars.shconfig.status: creating include/ap_config_auto.hconfig.status: executing default commands......................编译完成...........................[root@web httpd-2.2.16]# make[root@web httpd-2.2.16]# make install# 编辑apache配置文件[root@web httpd-2.2.16]# vim /usr/local/apache2/conf/httpd.conf......................................# 修改为:ServerName localhost:80#ServerName .....................................
    Options FollowSymLinks    AllowOverride None    Order deny,allow    Deny from all  <== Deny修改为Allow# 退出,保存# 测试配置文件的正确性[root@web httpd-2.2.16]# apachectl -tSyntax OK# 启动apache[root@web httpd-2.2.16]# apachectl start测试apache[root@web httpd-2.2.16]# curl localhost

It works!

 浏览器测试


二、安装Nginx

[root@web src]# tar -xvf nginx-1.6.2.tar.gz[root@web src]# cd nginx-1.6.2[root@web nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/ --with-pcre................................................................# 提示未安装pcre-devel的,直接yum去安装./configure: error: the HTTP rewrite module requires the PCRE library.You can either disable the module by using --without-http_rewrite_moduleoption, or install the PCRE library into the system, or build the PCRE librarystatically from the source with nginx by using --with-pcre=
 option............................................................# 提示未安装zlib-devel的,直接yum去安装./configure: error: the HTTP gzip module requires the zlib library.You can either disable the module by using --without-http_gzip_moduleoption, or install the zlib library into the system, or build the zlib librarystatically from the source with nginx by using --with-zlib=
 option.............................................................[root@web nginx-1.6.2]# make[root@web nginx-1.6.2]# make install# 编辑启动脚本[root@web nginx-1.6.2]# vim /etc/init.d/nginx#!/bin/bash# chkconfig: - 30 21# description: http service.# Source Function Library. /etc/init.d/functions# Nginx SettingsNGINX_SBIN="/usr/sbin/nginx"NGINX_CONF="/usr/local/nginx/conf/nginx.conf"NGINX_PID="/usr/local/nginx/logs/nginx.pid"RETVAL=0prog="Nginx"start() {        echo -n $"Starting $prog: "        mkdir -p /dev/shm/nginx_temp        daemon $NGINX_SBIN -c $NGINX_CONF        RETVAL=$?        echo        return $RETVAL}stop() {        echo -n $"Stopping $prog: "        killproc -p $NGINX_PID $NGINX_SBIN -TERM        rm -rf /dev/shm/nginx_temp        RETVAL=$?        echo        return $RETVAL}reload(){        echo -n $"Reloading $prog: "        killproc -p $NGINX_PID $NGINX_SBIN -HUP        RETVAL=$?        echo        return $RETVAL}restart(){        stop        start}configtest(){    $NGINX_SBIN -c $NGINX_CONF -t    return 0}case "$1" in  start)        start        ;;  stop)        stop        ;;  reload)        reload        ;;  restart)        restart        ;;  configtest)        configtest        ;;  *)        echo $"Usage: $0 {start|stop|reload|restart|configtest}"        RETVAL=1esacexit $RETVAL[root@web nginx-1.6.2]# chmod 755 /etc/init.d/nginx[root@web nginx-1.6.2]# chkconfig --add nginx[root@web nginx-1.6.2]# chkconfig nginx on# 这里要先停止apache服务,再启动nginx,因为nginx监听端口和apache的相同,都是80[root@web nginx-1.6.2]# apachectl stop[root@web nginx-1.6.2]# service nginx start正在启动 Nginx:                                           [确定]# 检测nginx服务是否启动[root@web nginx-1.6.2]# ps aux|grep nginx|grep -v greproot     30545  0.0  0.0   3552   516 ?        Ss   22:16   0:00 nginx: master process /usr/sbin/nginx -c /usr/local/nginx/conf/nginx.confnobody   30546  0.0  0.0   3736   872 ?        S    22:16   0:00 nginx: worker process

浏览器测试


三、安装PHP

[root@web src]# tar -xvf php-5.3.28.tar.gz[root@web src]# cd php-5.3.28[root@web php-5.3.28]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/sbin/apxs --with-config-file-path=/usr/local/php/etc --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif --disable-ipv6 --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd...........................................# 未检测到libxml2-devel,进行yum安装checking libxml2 install dir... yeschecking for xml2-config path...configure: error: xml2-config not found. Please check your libxml2 installation............................................# 未检测到openssl-devel,进行yum安装configure: error: Cannot find OpenSSL's 
..........................................# 未检测到bzip2-devel,进行yum安装checking for BZip2 support... yeschecking for BZip2 in default path... not foundconfigure: error: Please reinstall the BZip2 distribution.......................................# 未检测到libjpeg-turbo-devel,进行yum安装configure: error: jpeglib.h not found.........................................# 未检测到libpng-devel,进行yum安装configure: error: png.h not found.........................................# 未检测到freetype-devel,进行yum安装configure: error: freetype.h not found........................................# 未检测到libmcrypt-devel,这个需要先yum安装epel-release,再进行yum安装configure: error: mcrypt.h not found. Please reinstall libmcrypt......................................+--------------------------------------------------------------------+| License:                                                           || This software is subject to the PHP License, available in this     || distribution in the file LICENSE.  By continuing this installation || process, you are bound by the terms of this license agreement.     || If you do not agree with the terms of this license, you must abort || the installation process at this point.                            |+--------------------------------------------------------------------+Thank you for using PHP.[root@web php-5.3.28]# make[root@web php-5.3.28]# make install


四、Apache与PHP整合

[root@web php-5.3.28]# vim /usr/local/apache2/conf/httpd.conf..............................................# 查看模块是否有增加这一行LoadModule php5_module        modules/libphp5.so...............................................    AddType application/x-compress .Z    AddType application/x-gzip .gz .tgz    AddType application/x-httpd-php .php  <== 增加这一行...............................................    # 编辑PHP测试页面[root@web php-5.3.28]# vim /usr/local/apache2/htdocs/phpinfo.php
[root@web php-5.3.28]# apachectl -tSyntax OK[root@web php-5.3.28]# apachectl restart

浏览器测试


机器B

安装MySQL

[root@mysql src]# useradd -s /sbin/nologin mysql[root@mysql src]# mkdir -p /date/mysql[root@mysql src]# chown -R mysql.mysql /date/mysql/[root@mysql src]# tar -xvf mysql-5.5.42-linux2.6-i686.tar.gz[root@mysql src]# mv mysql-5.5.42-linux2.6-i686 /usr/local/mysql[root@mysql src]# cd /usr/local/mysql/[root@mysql mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/date/mysql/# 警告:hosts中未定义主机名,进行修改WARNING: The host 'mysql' could not be looked up with resolveip.This probably means that your libc libraries are not 100 % compatiblewith this binary MySQL version. The MySQL daemon, mysqld, should worknormally with the exception that host name resolving will not work.This means that you should use IP addresses instead of hostnameswhen specifying MySQL privileges !Installing MySQL system tables...# 未检测到libaio-devel,进行yum安装./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directoryInstallation of system tables failed!  Examine the logs in/date/mysql/ for more information.You can try to start the mysqld daemon with:    shell> ./bin/mysqld --skip-grant &and use the command line tool ./bin/mysqlto connect to the mysql database and look at the grant tables:    shell> ./bin/mysql -u root mysql    mysql> show tablesTry 'mysqld --help' if you have problems with paths.  Using --loggives you a log in /date/mysql/ that may be helpful.Please consult the MySQL manual section'Problems running mysql_install_db', and the manual section thatdescribes problems on your OS.  Another information source are theMySQL email archives available at http://lists.mysql.com/.Please check all of the above before submitting a bug reportat http://bugs.mysql.com/[root@mysql mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/date/mysql/Installing MySQL system tables...OKFilling help tables...OKTo start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your systemPLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !To do so, start the server, then issue the following commands:./bin/mysqladmin -u root password 'new-password'./bin/mysqladmin -u root -h mysql password 'new-password'Alternatively you can run:./bin/mysql_secure_installationwhich will also give you the option of removing the testdatabases and anonymous user created by default.  This isstrongly recommended for production servers.See the manual for more instructions.You can start the MySQL daemon with:cd . ; ./bin/mysqld_safe &You can test the MySQL daemon with mysql-test-run.plcd ./mysql-test ; perl mysql-test-run.plPlease report any problems at  [root@mysql mysql]# cp support-files/mysql.server /etc/init.d/mysqld[root@mysql mysql]# chmod 755 !$chmod 755 /etc/init.d/mysqld[root@mysql mysql]# vim !$vim /etc/init.d/mysqld.........................# 这两个目录指定一下basedir=/usr/local/mysqldatadir=/data/mysql...........................[root@mysql mysql]# chkconfig --add mysqld[root@mysql mysql]# chkconfig mysqld on[root@mysql mysql]# cp support-files/my-large.cnf /etc/my.cnfcp:是否覆盖"/etc/my.cnf"? y[root@mysql mysql]# service mysqld startStarting MySQL.. SUCCESS!# 创建mysql的root密码[root@mysql mysql]# /usr/local/mysql/bin/mysqladmin -uroot password New password:Confirm new password:[root@mysql mysql]# /usr/local/mysql/bin/mysqladmin -uroot passwordNew password:Confirm new password:[root@mysql mysql]# /usr/local/mysql/bin/mysql -uroot -pEnter password:Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.5.42-log MySQL Community Server (GPL)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>


环境测试:

一、搭建论坛

      1、在设备A上下载Discuz x3.2

           http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip 

      2、论坛开始安装

# 创建网站程序文件目录[root@web ~]# mkdir /data/discuz/    <== 放网站程序的地方,起一个自己知道的名字# 解压安装程序,将upload里面的文件移到 网站监控目录下/data/mydiscuz [root@web mydiscuz]# mv upload/* .   [root@web ~]# vim /usr/local/apache2/conf/httpd.conf............................................# Virtual hosts# 修改apache主配置文件httpd.conf,开启虚拟主机配置将这一行前面的注释符“#”去掉Include conf/extra/httpd-vhosts.conf............................................# 修改apache虚拟主机配置文件httpd-vhosts.conf,保留以下内容,[root@web ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.confNameVirtualHost *:80
    ServerName bbs.abc.com    DocumentRoot "/data/discuz"[root@web ~]# apachectl -tSyntax OK[root@web ~]# apachectl restart

        在浏览器上进行配置

        1、

           2、

         提示相关目录没有权限,我们开始配置

[root@web ~]# cd /data/discuz/[root@web discuz]# chown -R daemon.daemon config/ data/ uc_client/data/ uc_server/data/

         修改之后下一步

         3、在设备B上为设备A进行配置MySQL数据库权限

[root@mysql ~]# /usr/local/mysql/bin/mysql -uroot -pEnter password:Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 44Server version: 5.5.42-log MySQL Community Server (GPL)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.# 创建discuz数据库mysql> create database discuz;Query OK, 0 rows affected (0.00 sec)# mysql> grant all on discuz.* to 'mydiscuz'@'192.168.0.100' identified by 'mydiscuz123';Query OK, 0 rows affected (0.00 sec)mysql> exitBye

        为网站配置数据库信息

        4、开始安装

            5、安装完毕


              进行Nginx代理配置

# 修改主配置文件[root@web ~]# vim /usr/local/nginx/conf/nginx.confuser nobody nobody;worker_processes 4;error_log /usr/local/nginx/logs/nginx_error.log crit;pid /usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile 51200;events{    use epoll;    worker_connections 6000;}http{    include mime.types;    default_type application/octet-stream;    server_names_hash_bucket_size 3526;    server_names_hash_max_size 4096;    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'    '$host "$request_uri" $status'    '"$http_referer" "$http_user_agent"';    sendfile on;    tcp_nopush on;    tcp_nodelay on;    keepalive_timeout 65;    client_header_timeout 10;    client_body_timeout 10;    send_timeout 10;    connection_pool_size 256;    request_pool_size 4k;    client_header_buffer_size 1k;    large_client_header_buffers 8 4k;    output_buffers 4 32k;    postpone_output 1460;    client_max_body_size 10m;    client_body_buffer_size 256k;    client_body_temp_path /usr/local/nginx/client_body_temp;    proxy_temp_path /usr/local/nginx/proxy_temp;    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;    fastcgi_intercept_errors on;    gzip on;    gzip_min_length 1k;    gzip_buffers 4 16k;    gzip_comp_level 5;    gzip_http_version 1.1;     gzip_types text/plain application/x-javascript text/css text/htm application/xml;    include vhosts/*.conf;}[root@web ~]# vim /usr/local/nginx/conf/vhosts/discuz.conf[root@web ~]# mkdir /usr/local/nginx/conf/vhosts[root@web ~]# vim /usr/local/nginx/conf/vhosts/discuz.confserver{    listen 80 default;    server_name bbs.swt.com;    index index.html index.htm index.php;    root /data/discuz;#根据user_agent控制    if ($http_user_agent ~ 'bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315'){            return 403;    }# 配置管理中心白名单    location ~ admin.php {        allow 192.168.0.50;        deny all;        proxy_pass   http://127.0.0.1:88;        proxy_set_header Host   $host;    }# 配置动态代理解析    location ~ \.php$ {         proxy_pass   http://127.0.0.1:88;         proxy_set_header Host   $host;         proxy_set_header X-Real-IP      $remote_addr;         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }# 配置缓存文件    location ~ .*\.(js|css)?$    {          expires    24h;          access_log off;    }# 配置防盗链    location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {         expires 7d;         valid_referers none blocked server_names *.abc.com *.a.com *.b.com *.baidu.com\         *.google.com *.google.cn *.soso.com ;         if ($invalid_referer) {              return 403;              #rewrite ^/ http://www.example.com/nophoto.gif;         }         access_log off;    }# 配置discuz伪静态        rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;        rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2        &page=$3 last;        rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewth        read&tid=$2&extra=page%3D$4&page=$3 last;        rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page        =$3 last;        rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3         last;        rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;    access_log logs/discuz.log combined_realip;}# 修改apache监听端口为88,防止与nginx端口冲突[root@web ~]# /usr/local/apache2/bin/apachectl -tSyntax OK[root@web ~]# /usr/local/apache2/bin/apachectl restart[root@web ~]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[root@web ~]# service nginx start正在启动 Nginx:                                           [确定]