1、準備:Discuz_X3.2_SC_UTF8.zip,虛擬機環境LAMP
注:下載地址http://download.comsenz.com/DiscuzX/3.2/
有四種類型,語言分爲簡體中文(SC)和繁體中文(TC),編碼方式分爲GBK和UTF-8,UTF-8比GBK容量大。
2、安裝全過程
mkdir /data/www(站點目錄)
cd /data/www
unzip Discuz_X3.2_SC_UTF8.zip
cd Discuz_X3.2_SC_UTF8
mv upload/* . 之後刪去之前解壓得到的目錄
Ø 配置虛擬主機
文件apache配置文件/usr/local/apache/conf/httpd.conf
啓用Include conf/extra/httpd-vhosts.conf
vim/usr/local/apache2/conf/extra/httpd-vhost.conf,發現有兩個虛擬主機模板,啓用一個,修改如下:
<VirtualHost*:80>
#ServerAdmin (管理員郵箱)
DocumentRoot “/data/www”(網站根目錄)
ServerName www.wsy.com (主要域名)
ServerAlias www.bb.com (副域名)
#ErrorLog(暫時擱置)
#CustomLog(暫時擱置)
</VirtualHost>
完成後,先檢測語法規則
/usr/local/apache2/bin/apachectl -t :Syntax OK
/usr/local/apache2/bin/apachectl restart
ps aux | grep httpd
[插]將Apache作爲開機啓動服務
ls /etc/init.d/ | grep httpd
cp /usr/local/apache2/bin/apachect1 /etc/init.d/httpd
vim /etc/init.d/httpd
#chkconfig:345 85 15
#description:Startand stop the Apache HTTP Server
chkconfig --add httpd
chkconfig httpd on
Ø 更改本機DNS解析
文件位置:Windows主機c:\Windows\System32\drivers\etc\hosts
修改後:
# localhost nameresolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
192.168.1.106 www.wsy.com www.bb.com
在cmd中ping www.wsy.com、www.bb.com 可以解析了
Ø 訪問安裝頁面
在瀏覽器中輸入設置的解析域名,會發現顯示403Forbidden的錯誤。
解決辦法:vim /usr/local/apache2/conf/httpd.conf
<Directory />中修改成Allow from all
/usr/local/apache2/bin/apachctl -t
/usr/local/apache2/bin/apachctl restart(graceful)
再次訪問域名就出現discuz安裝首頁。
Ø 引導安裝
“我同意”點擊下一步,發現好多目錄下打紅叉,錯誤是沒有寫權限。由於是Apache發佈的,要對Apache的用戶daemon給予站點目錄/data/www加權限:
[/data/www]chown -R daemon:daemon data uc_server/data uc_client/data config
刷新後都變成勾了,下一步選“全新安裝(升級選第二個)”,再下一步需要填寫站點信息(域名、站數據庫、管理員賬號等),先設置數據庫:
[插]
(1)使用mysql作爲全局命令
方法一:ln -s /usr/local/mysql/bin/mysql /usr/bin
方法二:
vim /etc/profile
export $PATH=$PATH:……: /usr/local/mysql/bin
source /etc/profile
(2)初始化密碼
方法一:登錄修改,見LAMP搭建流程
方法二:mysqladmin -u root password ‘newpasswd’;
mysql -u root -p [your passwd]
mysql > create datebase discuzdb;
這裏出現問題Error 10006(HY000):Can’t create database ‘discuzdb’;
我暫時退出MySQL,網上給的解決辦法是清理日誌和進程記錄,我沒有日誌和進程文件,之後重啓MySQL發現錯誤:Manager of pid-file quit without updating file,數據庫停止運行。
後來發現是數據庫存儲/data/mysql和/usr/local/mysql權限不對。
chown -R mysql:mysql /data/mysql /usr/local/mysql
在啓動數據庫服務之前錯誤的使用了mysql命令登錄,爆出一條常見錯誤:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket'/tmp/mysql.sock' (2)
這個錯誤可見系統一般默認尋找與mysql通信的文件在/tmp/mysql.sock,如果mysql.sock不在此目錄下要做軟連接。
啓動數據庫後正常。
mysql > grant all on discuzdb.* ‘discuz’@’localhost’identified by password ‘psd’;
//這裏的用戶可以不同於mysql的登錄賬號
回到瀏覽器的安裝導航頁,填寫剛纔設置的信息,數據文件前綴、系統郵箱和管理員郵箱可不改,進行最後的安裝。安裝完成即可訪問論壇首頁。
Ø discuz操作注意
發帖的驗證碼不顯示,因爲php模塊php-gd安裝不全。
“管理中心”進入管理員後臺,如果提示“Please delete install/index.php”需要刪除這個文件。
3、虛擬主機站點功能配置
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
編輯<VirtualHost *:80></VirtualHost>
(1)用戶認證
在<VirtualHost *:80>中添加:
<Directory *或/data/www>
AllowOverride AuthConfig
AuthName "自定義的"
AuthType Basic
AuthUserFile /data/.htpasswd #這裏的/data/.htpasswd你可以隨便寫一個路徑或名字,沒有限制
require valid-user
</Directory>
保存後,然後
創建apache的驗證用戶
/usr/local/apache2/bin/htpasswd -c -m(md5) /data/.htpasswd [username]
New password: Re-typenew password:
注:
增加第二個用戶的時候,就不要加-c了,因爲-c是創建的意思,如果加上會把這個文件重寫。
/usr/local/apache2/bin/apachctl -t
/usr/local/apache2/bin/apachctl restart(graceful)
訪問論壇提示輸入用戶名和密碼。
(2)域名跳轉
添加<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.bb.com$(副域名)
RewriteRule ^/(.*)$ http://www.wsy.com/$1(主域名)[R=301,L](301重定向,last結束符,之前一個空格)
</IfModule>
注:301與302區別——301永久,302暫時
/usr/local/apache2/bin/apachctl -t
curl -x127.0.0.1:80 www.bb.com -I -->301 Moved Permanently
多個域名的情況:
RewriteCond %{HTTP_HOST} ^www.domain1.com [OR](空格)
RewriteCond %{HTTP_HOST} ^www.domain2.com$
RewriteRule ^/(.*)$ http://www.domain.com/$1 [R=301,L]
注:401 Authorization Requied需要認證
curl -u username:password -x127.0.0.1 URL -I
(3)配置Apache訪問日誌自動歸檔
日誌格式:httpd.conf的LogFormat,Referer指訪問的域名歷史,UserAgent指的是瀏覽器類型。
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
ErrorLog “/usr/local/apache2/logs/1.com-error.log ”
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/apache/bin/rotatelogs -l/usr/local/apache/logs/1.com-access
_%Y%m%d.log 86400(1 day)” combined(日誌系列)env=!image-request(不記錄這些標記項)
(4)配置靜態文件緩存(節點存儲時效)
<IfModule mod_expires.c>
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 "nowplus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
apacheclt -t
apachectl restart
驗證:
touch 1.txt
echo “11111” >> 1.txt
curl -x127.0.0.1:80 -u user:psd www.wsy.com/1.txt -I
max-age=value(緩存時間,默認單位爲s)
或
在chrome瀏覽器中F12,刷新出對象,查看一個對象Response Header的max-age
(5)設置防盜鏈(防止服務器成爲他人存儲)
SetEnvIfNoCase Referer "^http://www.wsy.com"local_ref
SetEnvIfNoCase Referer "www.bb.com"local_ref
#SetEnvIfNoCase Referer "www.up.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch"\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
驗證:
apacheclt -t
apachectl restart
curl -e(--refer) “http://www.baidu.com/xxxx” [-u username:password] -x127.0.0.1:80 www.wsy.com/1.txt -I #盜鏈不成功,403Forbidden
curl -e(--refer) “ http://www.wsy.com/xxxx” [-u username:password] -x127.0.0.1:80 www.wsy.com/1.txt -I #本地可以HTTP200
(6)訪問控制
<Directory /data/www/>
Order deny,allow #執行順序
Deny from all
Allow from 127.0.0.1
</Directory>
針對請求的url去限制
<filesmatch"(.*)admin(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</filesmatch>
某個某目錄下禁止解析php
<Directory /data/www/path>
php_admin_flag engine off
<filesmatch"(.*)php">
Order deny,allow
Deny from all
</filesmatch>
</Directory>
重啓Apache,訪問:www.wsy.com/path/*.php時被拒絕,403Forbidden