设为首页 收藏本站
查看: 899|回复: 0

[经验分享] 基于LAMP搭建Discuz!论坛,并配置Apache、PHP、MySQL-reworth

[复制链接]

尚未签到

发表于 2018-11-19 08:06:36 | 显示全部楼层 |阅读模式
  一、安装Discuz!
  1、新建目录来存放网页等
[root@tpp ~]# mkdir /data/www  [root@tpp ~]# cd /data/www
  [root@tpp www]# wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip                                        //下载最新版本的Discuz!
  [root@tpp www]# unzip Discuz_X3.2_SC_GBK.zip     //解压
  [root@tpp www]# ls
  Discuz_X3.2_SC_GBK.zip  readme  upload  utility
  2、程序文件会放于upload下,所以全部移到www目录下,并且删除多余的文件。
[root@tpp www]# mv upload/* ./  [root@tpp www]# ls
  admin.php  connect.php             favicon.ico  install     readme    template  utility
  api        cp.php                  forum.php    member.php  robots.txt  uc_client
  api.php    crossdomain.xml         group.php    misc.php    search.php  uc_server
  archiver   data                    home.php     plugin.php  source      upload
  config     Discuz_X3.2_SC_GBK.zip  index.php    portal.php  static      userapp.php
  [root@tpp www]# rm -rf readme/ utility/ upload/ Discuz_X3.2_SC_GBK.zip
  3、配置一个虚拟主机
[root@tpp www]# vim /usr/local/apache2/conf/httpd.conf  #Include conf/extra/httpd-vhosts.conf    //找到,开放这个虚拟主机配置文件,如下:
  Include conf/extra/httpd-vhosts.conf
[root@tpp www]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf    //编辑虚拟主机配置文件,在文件最后面有两个模板案例,删除一个再修改另一个为:  
  # ServerAdmin webmaster@dummy-host.example.com         //管理员邮箱,我们可以去掉
  DocumentRoot "/data/www"                              //改为之前创建的目录
  ServerName www.tpp.com                                      //设置域名
  ServerAlias www.ppt.com                                     //设置多个域名
  # ErrorLog "logs/dummy-host.example.com-error_log"           //错误日志
  # CustomLog "logs/dummy-host.example.com-access_log" common  //访问日志
  
  接着打开80端口
[root@tpp www]# vim /usr/local/apache2/conf/httpd.conf  
  Options FollowSymLinks
  AllowOverride None
  Order deny,allow
  Deny from all
  
  改为:
  
  Options FollowSymLinks
  AllowOverride all
  Order deny,allow
  Allow from all
  
  保存退出,检测配置是否正确,并重启
[root@tpp www]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp www]# /usr/local/apache2/bin/apachectl restart
  4、配置hosts文件
  找到本机 C:\Windows\System32\drivers\etc下的hosts文件,添加下面内容后保存退出。
192.168.0.104  www.tpp.com  www.ppt.com  www.ppt1.com  5、我们在浏览器上输入网址 www.tpp.com 这时就会跳转到Discuz!安装界面。
DSC0000.jpg

DSC0001.jpg

  同意安装后我们看多好多都是不可写,这时我们就要给他们权限。
  首先查看Apache进程以哪个身份运行
[root@tpp www]# ps aux |grep http  daemon    4566  0.0  1.0  30140 11028 ?        S    04:42   0:00 /usr/local/apache2/bin/httpd -k start
  daemon    4567  0.0  0.9  28724  9480 ?        S    04:42   0:00
  我们可以看到是daemon,下面我们把所有没有权限的文件都赋予daemon主
[root@tpp www]# chown -R daemon config data uc_client/data uc_server/data  刷新页面后,全都变成绿色的了。下一步就是全新安装。
  6、安装数据库
  在安装数据库之前,我们还需配置数据库
  [root@tpp www]# /usr/local/mysql/bin/mysql
mysql> create database discuz;                   //创建一个数据库,数据库名为discuz
  mysql> grant all on discuz.* to 'tpp'@'localhost'>  // all 所有的权限,用户tpp,密码tpplinux
  然后我们回到原网页,填写数据库名:discuz,数据库用户名:tpp,数据库密码:tpplinux,其他的默认;管理员admin 密码123456,下一步;安装完成以后,点击最右下角的“您的论坛已完成安装,点此访问”。
DSC0002.jpg

  二、配置Apache
  1、为某个虚拟主机配置用户认证
  需求:用户访问/data/www/abc目录下的123.txt文件需要认证
[root@tpp www]# mkdir abc  [root@tpp www]# cd abc
  [root@tpp abc]# cp /etc/passwd 123.txt
  [root@tpp abc]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  在相应的虚拟主机配置文件段,加入以下代码(中文注解,不要加进去,要不然会报错)
  AllowOverride AuthConfig
  AuthName "自定义的"
  AuthType Basic
  AuthUserFile /data/.htpasswd   # 这里的/data/.htpasswd可以随便写一个路径或名字,没有限制
  require valid-user
  
  如图:
DSC0003.jpg

  保存后,然后创建apache的验证用户
[root@tpp abc]# /usr/local/apache2/bin/htpasswd -c /data/.htpasswd tpp  第一次创建用户tpp要用到-c 参数,第2次添加用户,就不用-c参数,因为-c是创建的意思,如果加上会把这个文件重写。
[root@tpp abc]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp abc]# /usr/local/apache2/bin/apachectl restart
  接着我们来访问下 www.tpp.com/abc/123.txt 如下图:
DSC0004.jpg

  上面有乱码,是字符集问题,因为配置文件写了“自定义的”,我们可以写成英文的。
  2、配置域名跳转
  需求:要把访问域名 www.ppt.com(或www.ppt1.com) 的域名转发到 www.tpp.com 上
  实现:
[root@tpp abc]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf  //增加如下内容  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.ppt.com$
  RewriteRule ^(.*)$ http://www.tpp.com/$1 [R=301,L]
  
  如果是多个域名重定向到一个域名
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.ppt.com [OR]
  RewriteCond %{HTTP_HOST} ^www.ppt1.com$
  RewriteRule ^/(.*)$ http://www.tpp.com/$1 [R=301,L]
  
  如下图所示:
DSC0005.jpg

  然后重新重新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  下面我们在浏览器输入www.ppt.com或者www.ppt1.com时,会自动跳转到www.tpp.com,不过前提是在本机的C:\Windows\System32\drivers\etc下的hosts文件添加了www.tpp.com
  3、配置apache的访问日志,并以一天时间来分割。
[root@tpp ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
DSC0006.jpg

  修改为以日期为命名的错误日志和访问日志
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/tpp.com-error_%Y%m%d.log 86400"  SetEnvIf Request_URI ".*\.gif$" image-request
  SetEnvIf Request_URI ".*\.jpg$" image-request
  SetEnvIf Request_URI ".*\.png$" image-request
  SetEnvIf Request_URI ".*\.bmp$" image-request
  SetEnvIf Request_URI ".*\.swf$" image-request
  SetEnvIf Request_URI ".*\.js$" image-request
  SetEnvIf Request_URI ".*\.css$" image-request
  CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/tpp.com-access_%Y%m%d.log 86400" combined env=!image-request
  如下图:
DSC0007.jpg

  其中命令都是以绝对路径,rotatelogs是分割工具,%Y%m%d时间为分割单位,86400秒为一天。SetEnv为自定义的,下面访问日志可以调用env,即不记录以gif、jpg等结尾的文件。
  接着我们从新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  然后我们刷新下网页就会看到有日志生成,如下图:
DSC0008.jpg

  注意:日积月累访问日志会越来越多,下面我们写个脚本进行删除一个月前的访问日志:
[root@tpp ~]# vim /usr/local/apache2/logs/logcron.sh#! /bin/bash  # delete access logs
  keepdays=31
  log_files="/usr/local/apache2/logs/tpp.com-access"
  rm -f ${log_files}_$(date +"%Y%m%d" --date="-${keepdays} day").log
  加入到计划任务中,每天零点执行:
[root@tpp ~]# crontab -e  
00 00 * * * /bin/bash/ /usr/local/apache2/logs/logcron.sh
  4、Apache配置静态缓存
  把浏览网页的静态文件设置为缓存,文件缓存之后不用再调用,节省带宽。
[root@tpp www]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf  在之前的日志文件定义的下面接着定义一个模块
  ExpiresActive on
  ExpiresByType image/gif "access plus 1 days"
  ExpiresByType image/jpeg "access plus 24 hours"
  ExpiresByType image/png "access plus 24 hours"
  ExpiresByType text/css "now plus 2 hours"
  ExpiresByType application/x-javascript "now plus 2 hours"
  ExpiresByType application/javascript "now plus 2 hours"
  ExpiresByType application/x-shockwave-flash "now plus 2 hours"
  ExpiresDefault "now plus 0 min"
  
  如下图所示:
DSC0009.jpg

  接着我们从新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  下面我们来测试是否成功,在/data/www/目录下新建两个文件:1.txt和1.jpg,其中txt不是我们上面定义的静态文件。
[root@tpp www]# touch 1.txt 1.jpg  [root@tpp www]# curl -x127.0.0.1:80 www.tpp.com/1.txt -I
DSC00010.jpg

[root@tpp www]# curl -x127.0.0.1:80 www.tpp.com/1.jpg -I
DSC00011.jpg

  5、Apache配置防盗链接
[root@tpp www]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf  //加入如下模块  SetEnvIfNoCase Referer "^http://www.tpp.com" local_ref
  SetEnvIfNoCase Referer "www.ppt.com" local_ref
  SetEnvIfNoCase Referer "^$" local_ref
  
  Order Allow,Deny
  Allow from env=local_ref
  
  如下图所示(一定要注意空格,不然会报错):
DSC00012.jpg

  接着重新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  现在我们的这些txt|doc|mp3|zip|rar|jpg|gif|png文件,不能被其他网站作为网络链接而引用了。
  6、访问控制
  方法一:
  为了安全期间,有时我们需要限制网站下的某些目录对于php脚本不能执行。
  实例:对/data/www/下的data目录进行控制。
  首先在/data/www/data目录下建个文件1.php,内容如下:

  然后我们直接访问下,如下图所示:
DSC00013.jpg

  下面我们配置httpd-vhosts.conf文件,在相关的虚拟主机段,加入以下内容:
  php_admin_flag engine off
  
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
  
  
  如图:
DSC00014.jpg

  从新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  接着我们来做下访问测试,结果如图:
DSC00015.jpg

  由上图可知不能访问了。
  方法二:
  用rewrite进行禁止操作。
  我们在/data/www/的/tmp/目录下新建12.txt文件,写入以下内容:
vim 12.txt  123456789
  把以下代码拷贝到/usr/local/apache2/conf/extra/httpd-vhosts.conf文件中,添加到IFModulemod_rewrite.c模块中。
RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC] //NC表示不区分大小写  RewriteRule .* - [F]
  如下图所示:
DSC00016.jpg

  如下图所示:禁止访问
DSC00017.jpg

  
  7、Apache限制指定user_agent
  把以下代码拷贝到/usr/local/apache2/conf/extra/httpd-vhosts.conf文件中,添加到IFModulemod_rewrite.c模块。
    RewriteCond %{HTTP_USER_AGENT} ^.*curl* [NC,OR]  RewriteCond %{HTTP_USER_AGENT} ^.*chrome* [NC]
  RewriteRule .* - [F]
  如下图所示:
DSC00018.jpg

  下面我们进行测试:
  测试1
curl -x127.0.0.1:80 www.tpp.com/forum.php  如下图所示:显示403
DSC00019.jpg

  测试2、我们先把RewriteCond %{HTTP_USER_AGENT} ^.*curl* [NC,OR] 注释掉,就是开放curl。
curl -A "adafkangfhchromedeafa" -x127.0.0.1:80 www.tpp.com/forum.php  如图所示:同样是403,因为我们那里有chrome关键字,虽然curl开放,但chrome是被禁掉的。
DSC00020.jpg

  8、Apache的工作模式和最大并发请求数设置(参考以下两篇文章)
  http://blog.csdn.net/davissuperman/article/details/40738507
  http://www.365mini.com/page/apache-concurrency-configuration.htm
  三、配置PHP
  查找php配置文件的命令
[root@tpp ~]# /usr/local/php/bin/php -i |headphpinfo()  PHP Version => 5.3.27
  System => Linux tpp 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686
  Build Date => Aug 30 2015 02:08:41
  Configure Command =>  './configure'  '--prefix=/usr/local/php' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-config-file-path=/usr/local/php/etc' '--with-mysql=/usr/local/mysql' '--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'
  Server API => Command Line Interface
  Virtual Directory Support => disabled
  Configuration File (php.ini) Path => /usr/local/php/etc
  Loaded Configuration File => /usr/local/php/etc/php.ini
  从上面我们可以看到版本信息、配置信息、还有配置文件等。
  1、配置disable_function
  disable_function是禁用函数,我们为了安全考虑,需要禁掉一些函数。
[root@tpp ~]# vim /usr/local/php/etc/php.inidisable_functions=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close  如下图所示:
DSC00021.jpg

  特别是shell_exec函数,一定要禁掉。
  接着我们从新检测和加载Apache
[root@tpp ~]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp ~]# /usr/local/apache2/bin/apachectl graceful
  2、配置error_log
  配置错误日志,也是在/usr/local/php/etc/php.ini文件下配置
[root@tpp ~]# vim /usr/local/php/etc/php.inidisplay_errors=Off               #默认off,on表示配置文件报错了会在页面显示,off则显示空白页面  log_errors=On                    #默认on,开启错误日志记录功能
  error_log=/usr/local/php/logs/error.log   #定义错误日志具体的路径
DSC00022.jpg

  错误日志存放路径写绝对路径,注意定义的路径要创建日志目录,不然无法生成日志
[root@tpp ~]# mkdir /usr/local/php/logs/  [root@tpp ~]# chmod 777 /usr/local/php/logs/    #要给Apache用户读写执行权限
  接着我们配置日志格式级别
error_reporting = E_ALL & ~E_NOTICE     #“&”并且,“~”取反意思
DSC00023.jpg

  接着我们从新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  要是网页出现了错误,我们就可以查看该日志文件了。
  3、配置open_basedir
  作用:将用户可操作的文件限制在某目录下
[root@tpp ~]# vim /usr/local/php/etc/php.iniopen_basedir = /data/www:/tmp       #默认关闭,我们可以限定死  如图:
DSC00024.jpg

  接着我们从新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  这样用户只能访问/data/www和/tmp这两个目录,其他的目录就不能访问;并且这样所有的虚拟主机都不能访问。这样要是有多个虚拟主机多个网站的话,就区分不开到底是哪个主机不能访问了,所以我们可以在Apache配置文件下,针对每个虚拟主机定义一个open_basedir,操作如下:
[root@tpp ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf  php_admin_value open_basedir "/data/www/:/tmp/"
  如图:
DSC00025.jpg

  接着我们从新检测和加载Apache
[root@tpp htdocs]# /usr/local/apache2/bin/apachectl -t  Syntax OK
  [root@tpp htdocs]# /usr/local/apache2/bin/apachectl graceful
  4、安装PHP的扩展模块(动态加载模块)
  查看已安装哪些模块
[root@tpp ~]# /usr/local/php/bin/php -m  php源码包里自带了很多源码,都在/usr/local/src/php-5.3.27/ext/目录下:
[root@tpp ~]# ls /usr/local/src/php-5.3.27/ext/  a、若我们需要的源码包在这个目录下,我们可以直接编译安装,如curl:
[root@tpp ~]# cd /usr/local/src/php-5.3.27/ext/curl  [root@tpp curl]# /usr/local/php/bin/phpize            //生成configure文件
  [root@tpp curl]# ./configure --with-php-config=/usr/local/php/bin/php-config
  [root@tpp curl]# make
  [root@tpp curl]# make install
  b、若没有,我们需要去下载源码,如memcache:
[root@tpp ~]# cd /usr/local/src/  [root@tpp src]# wget http://pecl.php.net/get/memcache-2.2.3.tgz
  [root@tpp src]# tar -zxvf memcache-2.2.3.tgz
  [root@tpp src]# cd memcache-2.2.3
  [root@tpp memcache-2.2.3]# /usr/local/php/bin/phpize
  [root@tpp memcache-2.2.3]# ./configure --with-php-config=/usr/local/php/bin/php-config
  [root@tpp memcache-2.2.3]# make
  [root@tpp memcache-2.2.3]# make install
  生成模块的文件会放在/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/目录下
[root@tpp no-debug-non-zts-20090626]# ls  curl.so  memcache.so
  如图:
DSC00026.jpg 下面我们编辑/usr/local/php/etc/php.ini配置文件,配置并加载curl、memcache

[root@tpp ~]# vim /usr/local/php/etc/php.ini         //添加下面两句  extension=curl.so
  extension=memcache.so
  如图所示:
DSC00027.jpg

  退出保存后我们查看下是否动态加载了curl、memcache两个模块
[root@tpp ~]# /usr/local/php/bin/php -m  如图所示(加载成功):
DSC00028.jpg

  
  
  四、配置MySQL
  MySQL的配置文件
[root@tpp ~]# vim /etc/my.cnf  熟悉MySQL配置常用的参数
DSC00029.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636760-1-1.html 上篇帖子: 使用Apache POI 读取Excel文件 下篇帖子: apache 目录结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表