LAMP平台搭建(菜鳥入門級)
mysql 安裝:
(2)源碼編譯安裝
(1)查看系統配置:#uname -a/i i386 --(32位)---(i686包) x86_64--(64)---(64包)
#cat /etc/issue
(2)添加mysql 用戶組:useradd -s /sbin/nologin -M mysql
檢查是否創建成功:tail -1 /etc/passwd
3.下載 mysql 包
軟件包默認下載存放地址:/usr/local/src/下面
進入:cd /usr/local/src/
下載:
(1)可用:windows 下載好然後上傳如:rz 上傳.命令安裝方式:yum install -lrzsz -y
(2)利用wget命令下載地址
http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-linux-x86_64-glibc23.tar
初始化:
(1)移動解壓後的文件到/usr/local/mysql
#mv mysql-5.1.73-linux-x86_64-glibc23 /usr/local/mysql
(2)創建數據庫存放文件夾
#mkdir -p /data/mysql
(3)更改文件夾權限 屬主屬組
chown -R mysql:mysql /data/mysql
(4)定義數據庫安裝位置(--datadir)及數據庫的所屬主(--user)
# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
檢查:出現兩個ok,ok,表示安裝成功。或用echo $? 返回值為0表示成功。
可提前安裝一下庫文件:如:yum install -y compat-libstdc++-33
(1)拷貝 mysql配置文件至/etc/下
cp support-files/my-large.cnf /etc/my.cnf
(2)拷貝啟動腳本文件並修改其屬性
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
6.修改啟動腳本。
vim /etc/init.d/mysqld更改:
basedir=/usr/local/mysql(安裝位置)
datadir=/data/mysql(數據文存放位置)
7.啟動
chkconfig --add mysqld
chkconfig msyqld on
Service mysqld start
查看端口進程: ps -aux|grep mysql 或netstart -lnp |grep mysql
8.mysql 啟動報錯日志存在:/data/msyql 下,名通常以.err結尾 可查看。
apache 安裝:
1.下載:
(1)進入:cd /usr/local/src/
wget httpd://www.lishiming.net/data/attachment/forum/httpd-2.2.31.tar.bz2
http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.31.tar.gz
http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.31.tar.bz2
(2)解壓
tar -xvzf httpd-2.2.31.tar.gz
(3)編譯:
提前安裝apache必備的庫文件。
yum install -y zlib-devel
yum install -y pcre pcre-devel apr apr-devel
進入:cd httpd-2.2.31
# cat INSTALL 查看安裝過程
# ./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so --enable-defalte=shared --enable-expires=shared --enable-rewrite=shared --with-pcre
解釋:--prefix 指定安裝目錄
--enable-so 啟用DSO
--enable-defalte=shared 表示啟用動態共享的方式編譯deflate 模塊。
檢查:echo $? 返回值為0 表示安裝成功。
make && make install
啟動apachectl start 有提示警告信息
去掉配置文件中的Servernamexxx前面的#號重啟。
/usr/local/apache2/bin/apachectl start
查看進程:ps -aux |grep httpd
2.(1)查看apache的mpm的工作模式
/usr/local/apache2/bin/apachectl -l
Httpd -l 查看工作模式如果出現prefork.c,那就是prefork模式,如果結果中含有
worker.c,那就是worker模式。
apache有三種工作模式分別為:prefork模式,worker模式,event模式。2.4默認為event模式。
(2)更改apache工作模式: 未安裝時可在編譯安裝時可指定工作模式如:--with-pem=(prefork|worker)
安裝後切換模式:編輯httpd-mpm.conf文件
vi /usr/local/apache2/conf/extra/httpd-mpm.conf
詳情參考:https://my.oschina.net/denglz/blog/295880
3.查看開啟啟動:chkconfig --list |grep httpd 修改chkconfig httpd on 需要提前設置path 如:
php編譯安裝:
1.下載php 我下載的5.5
wget http://am1.php.net/distributions/php-5.3.27.tar.gz
安裝:
(1)前提先安裝一些庫文件:
yum install -y libxml2-devel
yum install -y openssl openssl-devel
yum install -y bzip2 bzip2-devel
yum install -y libpeng libpng-devel
yum install -y libpng libpng-devel
yum install -y freetype freetype-devel
yum install -y epel-release
yum install -y libmcrypt-devel
我的報錯直接yum install -y libmcrypt*
(2)編譯安裝:
cd /sur/local/src
[root@localhost src]# cd php-5.5
./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
make && makeinstall
安裝成功後檢查:echo $?
拷貝配置文件:
(3)cp php.ini-production /usr/local/php/etc/php.ini
Apache 結合php
(1)開啟apache php腳本解析
vim /usr/local/apache2/conf/httpd.conf
找到AddType application/x-gzip .gz .tgz在該行下添加
AddType application/x-httpd-php .php
(2)添加php索引,index.php
找到:<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
在index.html 添加index.php
(2)開啟網站訪問權限 (沒有開啟一般回報網站禁止訪問顯示403錯誤)找到
<Directory>
Opentions FOllowSymLinks
AllowOverride None
Order dny,allow
Deny from all 改為Allow from all
</Directory>
(3)找到#SserverName www.example.com:80
修改為#ServerName localhost:80 去掉# 不然會有警告信息。
檢查配置文件
/usr/local/apache2/bin/apachectl -t
重啟apachectl :/usr/local/apache2/bin/apachectl restart
或者重新加載一下
/usr/local/apache2/bin/apachectl graceful
查看apahce加載的模塊:
/usr/local/apache2/bin/apachectl -M
由於我們經常用到開啟或關閉服務比較麻煩即添加path變量:
vim /etc/profile.d/path.sh 添加:
#!/bin/bash
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/apache2/bin
啟用mysql 我們用:service mysqld stop
啟用啟用apahce用:apachectl restart 檢查配置文件 apachectl -t
查看apache工作模式可用:apachectl -M
查看是否啟動:netstat -lnp |grep httpd
也可用curl localhost 簡單測試是否啟動
測試能否解析php
vim /usr/local/apache2/htdocs/1.php
寫入:
<?Php
echo "php解析正常";
?>
保存退出 ,繼續測試
curl localhost/1.php
出現php解析正常[root@localhost ~]#
才算解析正常。
實戰Discuz
(1)下載discuzGBK最新版
創建虛擬主機web站點
mkdir /data/www
cd /data/www
wget http://xxxx
unzip:xxx
mv upload/* ./
rm -rf 刪除其他沒用文件
(2)配置第一個虛擬主機
啟用apache虛擬主機配置文件
刪除:#DocumentRoot "/usr/local/apache2/htdocs"前面的#號
(3)配置虛擬主機站點文件
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
找到
<VirtualHost *:80>
DocumentRoot "/data/www" 指定站點根目錄
ServerName www.test.com 指定服務名
ServerAlias www.aaa.com 指定訪問域名
#ErrorLog "logs/dummy-host.example.com-error_log"
#CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
保持推出
(4)檢查配置文件:apachectl -t
重啟apache服務:apachectl restart
(5)配置mysql 添加用戶 設置密碼 創建數據庫 mysql密碼默認為空用 戶為root 配置請看後續
(6)在本地windows host文件添加本地解析:192.168.1.xx www.test.com www.aaa.com
(7)查看apache 運行賬號:ps -aux|grep httpd 設置站點內文件可寫屬主屬組為 設置為deamon deamon實在apache配置文件中定義的。
chown -R daemon:daemon data uc_server/data uc_client/data config
浏覽器:輸入ip 或域名安裝即可。
簡單lamp平台打架到此結束。
Lamp 詳解:
1.Apache 用戶認證
某個網站目錄只需管理員訪問或者為網站後台增加一層安全機制,即:多加一層用戶訪問機制。當用戶訪問時需要輸入用戶名及密碼。
測試:
(1)在虛擬主機網站目錄下創建文件夾,再次文件夾下創建增加用戶訪問的安全機制如:以本實驗樣機為例--》
cd /data/www/
mkdir abc
cd abc
cp /etc/passwd ./12.txt 拷貝passwd 改名為12.txt作為增加安全機制的文件
浏覽器訪問:http://www.aaa.com/aaa/12.txt 可以顯示
增加安全機制:
(2)修改虛擬主機的配置文件
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
在站點框架中加入:
<Directory /data/www/abc/>
AllowOverride AuthConfig
AuthName "zidingyi"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</Directory>
如下所示:
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
#ErrorLog "logs/dummy-host.example.com-error_log"
#CustomLog "logs/dummy-host.example.com-access_log" common
<Directory /data/www/abc/> --》/data/abc/增加安全機制的文件
AllowOverride AuthConfig
AuthName "zidingyi" -->安全認證提示框顯示文字zidingyi
AuthType Basic
AuthUserFile /data/.htpasswd --》指定安全用戶認證密碼文件/data/.htpasswd
require valid-user
</Directory>
</VirtualHost>
保存退出。
(3)創建存放登陸的用戶及密碼文件
htpasswd -c /data/.htpasswd user1 (data/.htpasswd用戶及密碼文件,user1 為用戶)密碼自己輸入這裡輸入:user1user1
可以查看:cat/data/.htpasswd
創建第二個用戶需要:去掉-c 不然會覆蓋user1的。
htpasswd /data/.htpasswd user2 密碼:user2user2
查看一下:!cat
檢查:apachectl -t
重新加載 或重啟:apachectl graceful/restart
打開浏覽器測試:成功
2.默認虛擬主機配置
默認第一個虛擬主機,凡是能解析到這台機器的域名(任何域名)只要在配置文件中沒有設置,那麼都會被訪問到這個主機默認站點上來,為了避免這種解析,即:在該默認站點前面新建一個空的站點,讓其變成第一個默認站點即:第一個站點。這樣就避免解析混亂的情況,即使訪問到也是空的就會報錯。下面看演示
<VirtualHost *:80>
DocumentRoot "/tmp/123" -》隨便寫
ServerName 123.com -》隨便寫
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
#ErrorLog "logs/dummy-host.example.com-error_log"
#CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
檢查:apachectl -t 報錯沒有/tmp/123 ,我們創建一下:mkdir /tmp/123 設置:600權限讓其不能訪問:chmod 600 /tmp/123
測試:http://192.168.1.107 報錯403 。http://www.aaa.com 或者www.test.com正常。
3.域名301跳轉
1.網站一般會有多個域名,如:www.test.com www.aaa.com 比如我們的目的讓www.aaa.com 跳轉到www.test.com 這種行為叫做301 跳轉,另外還有301表示永久調轉。302為臨時跳轉。域名跳轉一般都是301這樣對搜索引擎優化有好處。
域名跳轉用得到的是rewrite_module模塊 可用apachectl -M 查看。
(1)編輯虛擬主機配置文件
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
在該站點內加入:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>
其中: RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]為跳轉的條件,^www.aaa.com$表示以什麼開頭的域名,RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]表示跳轉的執行的語句。域名在這裡默認省略的。(.*)$表示域名後面的部分如:http://www.aaa.com/123/12.txt.其中12.txt 就用變量(.*)$表示。www.test.com表示 要跳轉到的目的域名。R=301表示狀態碼301 可以指定為302,L表示結束。
(2)多個域名跳轉,需要在條件部分添加多個條件即可,且在第一個條件後面添加[OR]表示或者。如下所示:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.bbb.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>
保存退出測試:輸入www.aaa.com 或者www.bbb.com都會跳轉到www.test.com上面。
如果不加[OR]就表示且。
測試可用curl -x192.168.107:80 www.aaa.com/adfasdfsadf -I
4.Apache 日志切割
(1)開啟apache的訪問日志功能。
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
去掉下面兩行前面的“#”即可打開。
#ErrorLog "logs/dummy-host.example.com-error_log" -》錯誤日志
#CustomLog "logs/dummy-host.example.com-access_log" common ->訪問日志
(2)日志格式名為:common,可以更改,自定義格式。
dummy-host.example.com-error_log 為日志名稱可以更改。如可以定義為test.com-access_log,當然可以加入當日時間作為日志名稱如:改”dummy-host.example.com-access_log”名為:“test.com-access_%Y%m%d_log”
(3)日志格式在主配置文件裡面修改打開住配置文件
vim /usr/local/apache2/conf/http.conf 如:紅色字體
日志logs/test.com-access_%Y%m%d_log common為相對路徑最好寫成絕對路徑。
如: /usr/local/apache2/logs/test.com-access_%Y%m%d_log common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
格式h 來源ip 。l,u,不存在用減號代替,t時間,r動作如:GET,等,referer :來源地址
combined——》 名稱 logformat -》日志格式(一般我們采用這個格式)
LogFormat "%h %l %u %t \"%r\" %>s %b" common
combined——》 名稱 logformat -》日志格式
日志位置:日志默認生成位置:/usr/local/apache2/logs/
日志切割:防止日志過大,所以我們給日志做一個歸檔,每天進行切割,並按照日期命名日志。
(4)日志切割:在虛擬主機配置文件中在,某站點中
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
添加切割語句如:
ErrorLog "logs/test.com-error_log"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined
Rotatelogs -l (切割)後面/usr/local/apache2/logs/test.com-access_%Y%m%d_log日志路徑用絕對路徑。86400日志按天分割,即86400秒。 test.com-access_%Y%m%d_log命名加入時間格式。combined 日志格式名。
apachectl restart 查看生成日志格式及內容:
ls /usr/local/apache2/logs
圖例:
5.Apche 配置不記錄指定文件類型日志
一個站點訪問量特別的大,日志會特別的多,但有一些日志我們可以忽略如訪問網站的一些圖片日志如:js css 等靜態對象日志,這些日志往往是巨量的,而且也沒什麼用,及配置規則忽略對其的記錄。
(1)在虛擬主機配置文件中日志記錄配置行前面加入:
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
(2)在日志記錄配置行後面加入:env=!image-request !表示取反,這樣就可以忽略。
測試:
6.Apache配置靜態緩存
一個網頁裡面都還有今天文件如js,css 圖片等這些元素,當用戶訪問一個站點時候,客戶端浏覽器會緩存圖片等文件到本地電腦,目的是為了下次請求時不在去服務器下載,這樣就加快了速度,提高了用戶體驗。但總不能一直緩存下去,所以需要配置靜態緩存失效時間:配置如下:
在虛擬主機站點框架中加入:
修改前配置文件中顯示png 緩存為24小時 驗證加載時間:
curl -x192.168.1.107:80 'http://www.test.com/static/image/common/logo.png' -I
加載需要的時間為86400
當我們改成12小時在驗證加載時間:
curl -x192.168.1.107:80 'http://www.test.com/static/image/common/logo.png' -I
時間單位可用:days hours 或者min表示,上面用的是mod_expires模塊,也可用mod_headers模塊實現。模塊需要安裝查看已經安裝的模塊/usr/local/apache2/bin/apachectl -M查看。
7.Apache 配置防盜鏈
防止別人盜用自己網站圖片,引用到其他網站,用戶從其他網站直接訪問圖片產生的帶寬開銷對於我們來說沒有任何意義。
禁止別人引用
(1)在虛擬站點框架中加入:
setEnvIfNoCase Referer "^http://.*\.test\.com"local_ref
setEnvIfNoCase Referer "^http://.*\.qq\.com"local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|png|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
Referer變量名 referer指該網站上一次點擊的網站的路徑。
注意:單獨圖片查看即使將自己的域名加入白名單也不行,因為單獨圖片的referer為空,所以無法顯示,別的網站需要引用該元素必須加入改網站的域名到白名單即可。
設置防盜鏈必須將自己的郁悶加入白名單,不然自己的網站所有提到元素都無法顯示
白名單設置可加入多個如:
setEnvIfNoCase Referer "^http://.*\.test\.com"local_ref
setEnvIfNoCase Referer "^http://.*\.qq\.com"local_ref
8.Apache 訪問控制
如發現一個來源的ip 有一些非法的請求,通過ip日志發現該ip有嘗試攻擊站點意圖,於是可以配置禁用該ip訪問此網站
在該站點內加入:
<Directory "/data/www">
AllowOverride None
Options None
order deny, allow
Allow from all
Deny from 192.168.1.106
</directory>
先看順序第四行,先為deny後allow.在執行第一個deny 規則:denyfrom 拒絕192.168.1.1 最後執行allow from all 允許所有 。所以 deny拒絕不生效。
當我們順序變為Order allow ,deny 時,先允許所有在拒絕192.168.1.106訪問。才生效。
圖例:
先allow 所有後deny 拒絕106 訪問。測試用
curl -x192.168.1.106/107:80 -I www.test.com -I
根據uri限制如網站後台登陸頁面地址
如限制後台:admin.php登陸頁面只允許1.107網段訪問別的不可以。
<filesmatch "(.*)admin(.*)">
Order deny,allow
Deny from all
Allow from 192.168.1.107
</filesmatch>
測試: curl -x192.168.1.106:80 -I www.test.com/admin.php
curl -x192.168.1.107:80 -I www.test.com/admin.php
9.Apache 禁止解析php
需求:網站頁面用戶可以上傳文件,如果上傳木馬文件,一旦解析,就會影響我們的服務器安全,所以需要禁止這個目錄下面的訪問解析php.
設置:在虛擬主機站點內添加:
<Directory /data/www/data>
php admin flag engine off
<filesmatch> “(.*)php”>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</filesmatch>
</Directory>
藍色框裡的”php admin flag engine off”作用是禁止解析php。只有藍色部分:/data/www/data目錄不可以解析php,但是可以訪問,當我們訪問時候回直接下載該元素。 而不是網頁展示該元素。所以紅色部分主要是設置可以訪問並展示,而不是下載。
10.Apache 禁止user_gent
比如:禁止“垃圾搜索引擎抓取訪問權限 這樣有助於減輕網站負荷,節省資源。可根據日志查看apache user_agent。
設置:在虛擬主機站點框架內添加:在rewrite模塊裡面添加。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^*Firefox/4.0* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^*Tomato Bot/1.0* [NC,]
RewriteRule .* - [F]
</IfModule>
解釋說明:
如該站點內有rewrite模塊語句,那直接寫在裡面即可,比如301跳轉就使用的是rewrite模塊。如下圖所示:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
RewriteCond %{HTTP_USER_AGENT} ^*Firefox/4.0* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^*Tomato Bot/1.0* [NC,]
RewriteRule .* - [F]
</IfModule>
使用rewrite模塊限制指定user_agent,“ RewriteRule .* - [F]”表示直接禁止訪問,rewritecond 用user_agent來匹配*Firefox/4.0* 表示只要user_agent中包含Firefox/4.0就符合條件,NC表示不區分大小寫,OR表示或者,鏈接下一個條件。例如限制百度搜索引擎可加入:
RewriteCond %{HTTP_USER_AGENT} ^*Baiduspider/2.0* [NC,]來限制。
11.Apche 通過rewrite限制某個目
限制網站下某個子目錄,可用allow 和deny去實現,也可以通過rewrite實現,配置如下:
在rewrite語句中加入:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
RewriteCond %{HTTP_USER_AGENT} ^*Firefox/4.0* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^*Tomato Bot/1.0* [NC]
RewriteCond %{REQUEST_URL} ^.*/tmp/* [NC]
RewriteRule .* - [F]
</IfModule>
只要包含、/tmp/字樣的請求都被限制,比如下面的請求都會被限制。
www.aaa.com/tmp/12.html www.aaa.com/tmp/13.html
如果該網站沒有rewrite模塊語句 只需要新建即可。如:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URL} ^.*/tmp/* [NC]
RewriteRule .* - [F]
</IfModule>
12.php.ini配置文件詳解
php配置文件查看:
/usr/local/php/bin/php -i|head
最後一行會顯示:
Loaded Configuration File => /usr/local/php/etc/php.ini 配置文件路徑粗體標示。
配置php文件:php注釋符號為分號;,不是# 切記。
vim /usr/local/php/etc/php.ini
1.禁用高風險函數:
(1)第一項:disable_function=默認為空。
可改為:disable_function=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,charp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dll,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close
(2)配置error_log
php錯誤日志功能默認是打開的如:
vim /usr/local/php/etc/php.ini
Display_error=off(默認是關閉的,當關閉時,php有錯誤時候,打開頁面是個空白頁面,沒有任何錯誤信息提示。當開啟on時候,網頁錯誤信息會展示在網站上這樣對於用戶來說是不合適的。所以默認我們是關閉的。)
;log_errors=on 默認沒有開啟日志功,所以去掉分號,開啟它。log_errors=on
;error_reporting=php_errors.log (開啟日志存放路徑路徑)去掉前面的分號即可。後將日志路徑改為絕對路徑。如:error_log= /usr/local/php/logs/php_errors.log
(3)設定日志格式級別
error_reporting = E_ALL & ~E_DEPRECATED 改為:error_reporting = E_ALL & ~E_NOTICE
配置完成後,
測試:創建一個/data/www/forum.php寫錯。
浏覽器測試。
查看錯誤日志:cat /usr/local/php/logs/php_errors.log
(4)配置open_basedir
把執行php的用戶限定在指定目錄下,這樣通過權限縮小的方式達到安全的目的。作為一個網站,只需要用戶訪問到網站代碼即可。如果黑客通過其他途徑可以訪問到比如服務器更目錄這樣就造成很大范圍的安全隱患。所以我們只需要將其限定在網站根目錄即:/data/www/tmp下 ,注意這個必須寫對,限定好,是網站程序所在的目錄。如果寫錯網站將報錯找不到這個目錄。查看日志。
配置如下
Open_basedir =/www:/tmp 格式目錄直接用:隔開
測試可寫成Open_bashedir=/www2:/tmp
重啟apache 網頁測試為空白。查看php日志:有報錯信息。
注意:如果我們有多個站點那麼php open_basedir 就不能滿足我們的需求了,php open_basedir 只能限制一個站點裡面的目錄 卻無法限制多個站點目錄。
所以我們可以通過apache 配置apen_basedir來針對多個站點做不同的限制。
配置如下:
可在httpd.conf裡面配置或者在每一個虛擬主機配置文件裡面做限制
在某站點框架中加入:
php_admin_value open_basedir “/data/www:/tmp/” 來做限制。報錯退出注意:apahce裡面做限制時,我們就注釋掉php中的就行。;open_basedir=/www:/tmp
如圖:
測試apache 可寫成:open_basedir “/data/www/:/tmp/”
重啟apache 網頁測試為空白。查看php日志:有報錯信息。
13.php擴展模塊安裝
查看php加載的模塊:
/usr/local/php/bin/php -m 內容包括靜態或者動態模塊。
如果編譯安裝以後,發現缺少一個模塊。解決方法兩種一種:重新編譯安裝。另一種:動態加載模塊。或者php需要添加redis擴展模塊。都可以使用這一方法。
查看已經動態加載的模塊:grep ‘^extension=’/usr/local/php/etc/php.ini 沒有,因為我們本身沒喲動態加載模塊。
實驗:找到php源碼包
cd /usr/local/src/php-5.4.36
cd php-5.4.36/ext(模塊目錄如果沒有 可以下載)
比如編譯curl
默認我們按照php是沒有加載curl模塊的 如查看:/usr/local/php/bin/php -m|grep -i curl
查看沒有curl
現在我們動態加載按照curl模塊
cd curl 進入curl源碼下
/usr/local/php/bin/phpize 生成configure 才能編譯
./configure --with-php-config=/usr/local/php/bin/php-config 編譯安裝固定語法
make && make install
make install 其實就是將curl.so 放到/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525下我們可以查看一下
ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ 發現有curl.so
extension目錄是存放擴展模塊的地方 現在我們查看extensio_dir目錄位置
/usr/local/php/bin/php -i|grep extension_dir 查看會顯示在
發現extension 擴展模塊位置恰好是我們make install 產生surl.so文件存放的位置。
其實extension位置我們是可以定義的 在php.ini文件裡更改即可,一般不用做修改默認即可。
最後加載模塊:
vim /usr/local/php/bin/php.ini
添加extension=curl.so
保存退出。我們查看一下:/usr/local/php/bin/php -m 查看發現已經加載了curl模塊。
我們查看一下已經加載的動態模塊:
grep ‘^extension=’/usr/local/php/etc/php.ini 發現有curl。
注:如果定義錯誤。查看php日志即可。
如有的源碼在ext下面沒喲 ,所以我們需要下載如:memcache源碼模塊。下載地址:
wget http://www.lishiming.net/data/attachment/forum/memcache-2.2.4.tgz
Mysql配置講解
mysql配置
簡單總結個人理解可能有誤:
博客園收藏:http://www.cnblogs.com/feichexia/archive/2012/11/27/mysqlconf.html
Mysql調優:http://ask.apelearn.com/question/5758
vim /etc/my.cnf
核心配置[mysqld]
1.Prot(端口3306)
2 socket 客戶端與服務器之間通信指定的一些套接字文件.
3.skip-locking 避免mysql的外部鎖定,減少出錯幾率增強穩定性。
4.4.Key_buffer_size =256M 索引塊的緩沖區,並不是越大越好。參考:http://ask.apelearn.com/question/5758
5.max_allowed_packet = 4M 接受數據包的大小。增加該值十分安全,他是一種預防,不會因為偶爾數據量過大導致內存溢出的預防措施。
6.table_open_cache =256打開數據表緩存存放個數。
7.sort_buffer_size=1M 執行排序使用的緩沖大小。
8.read_buffer_size=2M 隨機讀取緩存區大小。該參數對應的分配內存是每個連接獨享。
9.read_rnd_buffer_size=4M 隨讀緩沖區大小。
10.mysiam_sort_buffer_size=6M myisam表發生變化時重新排序所需的緩沖。
11.thread_cache_size=8 與cpu核數有關系,一般是cpu核數x2
12.query_cache_size=16M
13.thread_concurrency=8與cpu核數有關系,一般是cpu核數x2
14.wait timeout=8 空閒的連接超時時間默認為:28800s 這個參數依賴於,interactive_timeout =8 兩者必須一起使用。
15 long_query_time=1 慢查詢日志超時時間
16l.og_slow_queries=/path/to/slow_queries 慢查詢日志路徑,必須配合long_query_time=1一起使用。
Mysql密碼重置及登錄
默認mysql沒有密碼:
登錄mysql :/usr/local/mysql/bin/mysql-uroot即可登錄 定義了path直接mysql登錄即可。
設置mysq密碼
未進入mysql之前:
[root@bogon /]# mysqladmin -uroot password ‘wangyunlong1992’
如果有密碼:
[root@bogon /]# mysqwladmin -uroot -p123456 password ‘wangyunlong1992’
進入mysql之後修改密碼
修改root密碼:
mysql> use mysql(連接權限數據庫)
mysql> update user set password=password('123456') where user='root';
mysql> flush privileges; (刷新權限)
mysql> select user,password from mysql.user; (查看root用戶密碼)
Mysql> select * from user where user=’root’\G;
忘記密碼
重置:在mysql配置文件中[mysql]字段下添加參數:skip-grant 這樣就可以進入數據不用授權了。然後進入修改密碼推出,配置文件改成原來即可。
登錄:
本地登錄:
mysql -uroot -pwangyunlong1992
遠程登陸:
授權:grant all on *.* to 'root'@'192.168.1.104' identified by '123456';
登陸: mysql -uroot -h192.168.1.104 -P3306 -p123456
mysql -uroot -h192.168.1.107 -P3306 -p123456
本地多個mysql 登陸可用sock登陸
如:mysql -uroot -S /temp/mysql.sock -p登陸
Mysql常用操作《1》
查看數據庫
mysql> show databases;
切換到某個庫
Mysql> use dedecms
查看當前在那個庫下
mysql> select database();
查看當前版本
mysql> select version();
查看當前是那個用戶:
select user();
查看數據幾個表
show tables;
查看某一個表字段
desc tb1;
查看字段中的數據
select * from tb1;
查看表是怎麼創建的。
show create table tb1;
創建數據庫
mysql> create database wangyunlong;
進入數據庫創建表tb1
mysql> use wangyunlong;
Database changed
mysql> create table tb1
mysql> create table tb1 (`id` int(4),`name` char(40)) ENGINE=MyISAM DEFAULT CHARSET=gbk; 創建表並插入字段id 和name
可以查看表創建語句,及字段等。
插入數據:
mysql> insert into tb1 values(1,'linux');
mysql> insert into tb1 values(2,'wyl'); 可插入多個
也可單獨插入數據:
mysql> insert into tb1 (`id`) values (5);
mysql> insert into tb1 (`name`) values('wangyl');
更新數據
mysql> update tb1 set id=6 where name ='wangy1'; 修改name等於wangl的id值為6
mysql> update tb1 set name = 'wangyun' where id=4; 修改id等於4的name值為wangyun
如果相同id有不同的值則:
update tb1 set name='abc' where id=2 and name is null;
刪除一個表中指定得行。
delete form tb1 where name=‘55’;
delete from tb1 where id=6;
清空一個表
truncate table wangyunlong.tb1;
刪除一個表
drop table tb1;
刪除一個數據庫
drop database wangyunlong;
常用操作《2》
的創建用戶並授權:
grant all on tb1.* to 'user1'@'192.168.1.%' identified by '123456';
Grant(授權) tb1 數據庫名,.*表示庫中所有的表,user1新建的用戶 192.168.1.% 允許1網段的所有ip可登錄 123456為密碼。Ip可以用%匹配所有。
刷新權限:
flush privileges;
查看當前數據庫查詢隊列
show processlist;
查看變量
show variables;
mysql所有變量都可在配置文件裡面修改但是需要重啟,在線上環境中,最好不要重啟,直接在線更改,立即生效。長期生效需要更改改配置文件報存即可。
set global wait_timeout=288001; 設置變量wait_timeout等288001。
查看過濾變量
show variables like 'wait%'; %表示匹配;like表示過濾。
查看mysql狀態 用的比較多
show status;
show status like ‘%running’; %前後都%如:%buffer%
mysql錯誤日志路徑是在etc/init.d/mysqld 中定義的。
修復一個表
repair table tb1.t1; 修復庫tb1中的t1表。
Mysql備份與恢復
默認數據庫備份工具dump
mysqldump -uroot -p123456 tb1 >/data/tb1.sql
備份出tb1 數據庫並重定向到data下
恢復數據庫:
mysql -uroot -p123456 tb1 </data/tb1.sql
單獨備份一個表
mysqldump -uroot -p123456 tb1 t1 >2.sql t1為表,tb1為庫。
恢復只需要庫名就好。mysql -uroot -p123456 tb1 </data/t1.sql
備份指定字符集:
mysqldump -uroot -p --default-character-set=utf8 t1 >/data/t1.sql.
恢復時候同樣指定字符集即可。
mysql -uroot -p --default-character-set=utf8 t1 </data/t1.sql.
lamp平台入門初步完結
http://xxxxxx/Linuxjc/1162740.html TechArticle