1. 程式人生 > >LAMP架構搭建與優化

LAMP架構搭建與優化

linux

1.1mysql安裝

LAMP是linux apache mysql php的簡寫

MySQL是一個數據庫文件 apache提供http服務 很多網站站點使用php寫

安裝下載MySQL

www.aminglinux.com/study_v2/chapter12.html

下載 r.aminglinux.com/

1.2Apache編輯安裝

路徑和方法

www.aminglinux.com/study_v2/chapter12.html

下載 r.aminglinux.com/

/usr/local/apache2/bin/apachectl start (stop關閉)啟動apache

ps aux |grep httpd 查看是否啟動了

netstat -lnp 查看監聽窗口80

/usr/local/apache2/bin/apachectl -M 查看模塊 static為靜態 shared為動態

- L只列出靜態模塊

- t 查看配置文件語法有沒有錯誤

/usr/local/apache2/bin/apachectl graceful 重新加載配置文件

-L 中的prefock.c 說明apache在prefock模式下進行

prefock worker event3種模式

1.4php編譯安裝-安裝順序在最後

路徑也方法

www.aminglinux.com/study_v2/chapter12.html

下載 r.aminglinux.com/

/usr/local/php/bin/php -m 查看模塊 都是靜態

-i 查看相關配置

測試php解釋

重啟apache (restart)

vim /usr/local/apache2/conf/httpd.conf 查看配置文件

DocumentRoot就是訪問網站時放在的目錄

AddType application/x-gzip.gz.tgz下添加一條

AddType application/x-httpd-php.php

修改 DirectoryIndex index.html index.php

保存退出

restart (或graceful)apache

可以用ip網站方式或者指令curl測試apache是否結合php搭建LAMP

1.6安裝discuz

Discuz 創建論壇

mkdir /data/www

cd /data/www

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

unzip Discuz_X3.2_SC_GBK.zip

ls

mv upload/* ./ 把upload下的文件都移出來

ls

rm -rf readme/ utility/ upload/Discuz_X3.2_SC_GBK.zip 把多余的幾個文件刪去

ps aux |grep httpd 查看apache啟動否

/usr/local/apache2/bin/apachectl start 開啟

vim /usr/local/apache2/conf/httpd.conf

找到httpd-vhosts.conf,把前面的#刪去,使用了虛擬主機的配置文件

找到Deny,改為Allow

:wq

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

把第二個<VirtualHost *:80>整段刪掉

修改第一個

刪去serveradmin整行

把documentroot 改為“/data/www”

servername 改為www.test.com

serveralias (別名)www.aaa.com

errorlog customlog 錯誤日誌與訪問日誌 在最前面加#

:wq

/usr/local/apache2/bin/apachectl -t

/usr/local/apache2/bin/apachectl restart

hosts 與ip,域名有關 dns服務

vim/etc/hosts

加一行 192.168.73.10(ip)www.baidu.com

:wq

在主機找到hosts文件

在# ::1 localhost下一行加

192.168.73.10 www.test.com www.aaa.com

保存退出

主機用瀏覽器登錄 www.test.com

點擊同意

將紅叉改為可寫

把它們的屬組root改為daemon

chown -R daemon config data uc_client/data uc_server/data

刷新瀏覽器

下一步

第一項全新安裝

創建數據庫

/usr/local/mysql/bin/mysql

create database discuz; (數據庫名)

grant all on discuz.* to [email protected] identified by ‘vincentlinux‘;

回到瀏覽器

庫名 discuz

用戶 111

密碼 vincentlinux

管理員密碼123456

下一步

安裝完成

點此訪問

1.7apache用戶認證

將abc目錄設為只有管理員才能訪問

cd /data/www

mkdir abc

cd abc

cp /etc/passwd ./12.txt

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在#CustomLog下一行加

<Directory /data/www/abc/>

AllowOverride AuthConfig

AuthName "aaaa"

AuthType Basic

AuthUserFile /data/.htpasswd

require valid-user

</Directory>

:wq

vim /etc/profile.d/path.sh 修改path

export PATH=$PATH:/usr/local/mysql/bin/:/usr/local/apache2/bin

:wq

source /etc/profile.d/path.sh

設置用戶和密碼

htpasswd -c /data/.htpasswd user1 用戶名user1

密碼

再創一個user2 刪去-c

重啟apache

apachectl graceful

瀏覽器登錄 www.test.com/abc/12.txt 就會要求打用戶名和密碼登錄了

1.8默認虛擬主機

mkdir /tmp/123 創建空目錄

chmod 600 /tmp/123

vim /use/local/apache2/conf/extra/http-vhosts.conf

在<VirtualHost *:80>上添一段

<VirtualHost *:80>

DocumentRoot “/tmp/123”

ServerName 1111.com

<VirtualHost *:80>

這樣禁止了默認的虛擬主機

只能用指定域名www.test.com 和www.aaa.com登錄論壇

1.9域名301域名

使www.aaa.com域名自動跳轉到www.test.com

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

在#CustomLog下一行添加一段

<Ifmodule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.aaa.com$

RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]

</IfModule>

:wq

如果還有另一個域名www.bbb.com需要跳轉到test,則在aaa下一行再添加一條RewriteCond 給bbb,在aaa.com$後幾格加[OR]

2.0 Apache日誌切割

訪問日誌記錄

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

把ErrorLog和CustomLog前的#去掉 開啟錯誤日誌和訪問日誌的記錄

CustomLog 後面的common指日誌的格式和名字

vim /usr/local /apache2/conf/httpd.conf

搜索 /common

找到兩個LogFormat 就是日誌的格式和名稱,最好用combined格式

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

把common改為combined

:wq

apachectl -t

apachectl graceful

外部瀏覽器訪問論壇

cd /usr/local/apache2/logs

ls

生成 access_log和error_log兩個日誌

切割日誌

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

修改CustomLog的路徑 “|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/+原來的名稱-access_%Y%m%d_log 86400” combined

年月日命名日誌 以86400秒即一天為分割一個日誌

2.1Apache 不記錄指定文件類型的日誌

沒必要記錄論壇的小圖片css等插入件

只需要記錄每頁的地址

先給這些小插件標記

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在serverAlias下一行添加

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 的最後添加 env=!image-request

除了以上image-request標記的都會記錄

:wq

apachectl -t

apachectl restart

外部瀏覽器刷新

ls

less 生成的訪問日誌名稱

查看日誌不存在以上那些格式的內容

2.2Apache 配置靜態緩存

將網頁中的小圖片小圖標作一個緩存 減少帶寬

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在CustomLog的下一段添加

<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 test/css "now plus 2 hours"

ExpiresByType application/x-javascript "now plus 2 hours"

ExpiresByType application/x-shockwave-flash "now plus 2 hours"

ExpiresDefault "now plus 0 min"

</IfModule>

:wq

apachectl -t

apachectl graceful

2.3Apache配置防盜鏈

防止自己網站的東西被人盜用

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

</IfModule> 下一行添加

SetEnvIfNoCase Referer "^http://.*\.test\.com" local_ref

SetEnvIfNoCase Referer ".*\.aminglinux\.com" local_ref

<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|png|gif|js|css)">

Order Allow,Deny

Allow from env=local_ref

</filesmatch>

域名為www.test.com和www.aminglinux.com在白名單上,標記為 local_ref

把(txt|doc|mp3|zip|rar|jpg|png|gif|js|css)這些格式的東西加上防盜鏈

只允許有local_ref標記的地址調用

:wq

apachectl restart

外部瀏覽器測試

2.4Apache訪問控制

限制相關ip訪問站點

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在ErrorLog上方添加一段

<Directory "data/www">(網站根目錄)

AllowOverride None

Options None

Order allow,deny (先allow後deny是黑名單,不允許ip為127.0.0.1訪問)

Allow from all

Deny from 127.0.0.1

</Directory>

<filesmatch "(.*)admin(.*)">(訪問後臺)

Order deny,allow (先deny後allow是白名單,允許127.0.0.1訪問))

Deny from all

Allow from 127.0.0.1

</filesmatch>

測試 curl -x127.0.0.1:80 -I www.test.com

或者

curl -x127.0.0.1:80 -I www.test.com/admin.php

假如 admin.php 被兩個配置段都匹配了的話,那就選精準度更高的。

這兩個就是下面這個filesmatch 精準度高,所以以它為準。所以127.0.0.1能夠訪問www.test.com/admin.php

2.5 Apache禁止解析php

ls -l /data/www/data

查看apache的數組都是daemon

<Directory /data/www/data>

php_admin_flag engine off (關閉php解析引擎)

<filesmatch "(.*)php"> (禁止訪問或下載php文件)

Order deny,allow

Deny from all

</filesmatch>

</Directory>

2.6Apache禁止指定user_agent

在RewriteRule下一行添加

RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR] (匹配curl相關的,NC不區分大小寫,OR或者)

RewriteCond %{HTTP_USER_AGENT} ^.*chrome* [NC] (匹配chrome相關的,NC不區分大小寫,啟動後瀏覽器訪問不了網站,測試完要在前面加上#去除禁止)

RewriteRule .* - [F] (forbidden,禁止以上兩種相關的求情)

:wq

apachectl restart

2.7Apache通過rewrite限制某個目錄

RewriteRule .* - [F] 下一行添加

RewriteCond %{REQUEST_URI} ^.*/tmp/.* [NC] (限制訪問tmp目錄)

RewriteRule .* - [F]

2.8php.ini配置文件詳解

php的配置文件路徑 /usr/local/php/etc/php.ini(用;作註釋符號)

修改

disable functions =disable_functions=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfs (禁用的高風險函數)

display_errors = off

log_errors = On

error_log = /usr/local/php/logs/php_errors.log (若目錄logs不存在,就新建mkdir /usr/local/php/logs 然後修改權限 chmod 777 !$)

errors_reporting = E_ALL & ~E_NOTICE

:wq

apachectl graceful

(錯誤日誌不會暴露,生成存在logs目錄下)

繼續修改

php、apache要訪問一個網站,若網站有漏洞,被別人獲得權限,要限定死在某個目錄下

open_basedir =/data/www:/tmp (網站程序所在目錄)

或者在apache下定義(先註釋了open_basedir),php.ini只能配置一個,apache可以配置多個

vim /usr/local /apache2/conf/extra/httpd-vhosts.conf

在<Directory "/data/www">上一方添加

php_admin_value open_basedir "/data/www/:/tmp/"

:wq

2.9php擴展模塊如何安裝

cd /usr/local/src/php-5.4.36

ls

cd ext/ (源碼包都在ext下)

ls

例子 編譯模塊curl

cd curl/

ls

/usr/local/php/bin/phpize

ls (生成了configure文件)

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

生成了curl.so

/usr/local/php/bin/php/ -i |grep extension_dir

vim /usr/local/php/etc/php.ini

在;extension=php_…最下面添加

extension=curl.so

:wq

3.0mysql配置講解

mysql配置文件

vim /etc/my.cnf

核心配置是mysqld部分

port 端口

socket 監聽的socket

skip-locking 是否過濾掉lock,不鎖

key-buffer-size 索引塊緩沖區

(可以通過mysql調優的帖子參考調值大小

www.aminglinux.com/bbs/thread-5758-1-1.html)

max-allowed-packet 允許最大的包

table-open-cache…

另外還可能用到的log-bin、server-id、interactive_timeout、wait timeout、long_query_time、log_slow_queries=/data/mysql/slow.log

3.1 mysql的root密碼重置

mysqladmin -uroot password ‘密碼‘ 將mysql設置一個登錄密碼

命令 quit 退出mysql模式

重置密碼

vim /etc/my.cnf

在mysqld最下面添加

skip-grant

:wq

/etc/init.d/mysqld restart 重啟

mysql 登錄mysql 不需要密碼

use mysql

update user set password=password(‘新密碼‘)where user=‘root; 設置了新密碼

vim /etc/my.cnf

刪去skip-grant

:wq

/etc/init.d/mysqld restart 重啟

mysql

mysql -uroot -p新密碼 登錄mysql

3.2mysql登錄

遠程登錄mysql

mysql -uroot -h192.168.11.160 -P3306 -p密碼 3306端口

授權ip

在mysql模式裏

grant all on *.* to ‘root‘ @‘192.168.11.160‘ identified by ‘密碼‘; 授權ip192…登錄

select user(); 查看登錄當前用戶

3.3mysql常用操作-1

庫--》表--》行--》字段

show databases; 查看mysql裏有哪些庫

庫information_schema、discuz、mysql、test

use 庫名 切換庫

select database();查看當前數據庫

select version();查看版本

show tables; 查看表

desc 表名; 查看表裏面的字段

show create table 表名\G;查看表的創建

create database A;創建庫A

use A

create table B(‘id‘ int(4), ‘name‘ char(40)) ENGINE=MyISAM DEFAULT CHARSET=gbk;

‘為反引號,創建表B,字段為 id,格式int,長度4位,字段name,格式char,最長40位,engine為myisam,字符集Default charset為gbk

show tables;

desc B;

在表裏插入數據

insert into B values(1,‘aming‘);id為1,name改為aming

delete from B where name=‘aming‘; 把name為aming那行刪去

truncate table A.B; 清空表B

drop table B;刪除表B

drop database A ;刪除庫A

3.4mysql常用操作2

授權 grant all on 數據庫名……

flush privileges ;刷新權限

show processlist;查看數據庫裏的隊列

查看mysql 的錯誤日誌

cd /data/mysql

ls

.err文件就是錯誤日誌

tail .err 查看錯誤日誌

3.5mysql備份與恢復

可以遠程備份也可以本地備份

mysqldump -uroot -p密碼 discuz >/data/discuz.sql 備份數據庫discuz

mysql -uroot -p密碼 discuz < /data/discuz.sql恢復備份


LAMP架構搭建與優化