wdOS系統下源碼編譯安裝LNAMP(linux+nginx+apache+mysql+php)

一.關於LNAMP環境的介紹:php

   Lnamp環境是由linux + nginx+apache+mysql+php組成的,Nginx作網站前端,Apache後端處理PHP文件。做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,體現更高的效率,這點使 Nginx 尤爲受到虛擬主機提供商的歡迎。在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品 結合了Nginx高併發和靜態頁面高效率以及Apache穩定的動態頁面處理特色。這樣一來不再用擔憂Nginx以FastCGI模式運行PHP時的502問題,也沒必要擔憂Apache處理靜態頁面過慢,負載太高的問題。html

 

     wdOS是一個基於CentOS版本精簡優化過的Linux服務器系統,並集成nginx,apache,php,mysql等web應用環境及wdcp管理系統,能夠說安裝和使用都很是便利。我此次是選在wdOS的純系統下安裝lnamp環境,但這只是初步的安裝,並無進行mysql以及php的優化。前端

      LNAMP的安裝中php的編譯安裝比較麻煩,須要分爲兩次編譯,另外nginx以及apache的配置也比較複雜,apache須要開啓虛擬主機的功能,使得apache監聽非80端口,nginx反向代理php請求與apache協同工做。mysql

二.安裝過程:linux

 第一步:安裝前準備工做nginx

建立存放源代碼的目錄: mkdir      /usr/local/src c++

建立apache的安裝目錄: mkdir     /usr/local/apacheweb

建立php的安裝目錄:    mkdir    /usr/local/phpsql

建立mysql的安裝目錄:  mkdir    /usr/local/mysqlshell

建立nginx的安裝目錄:  mkdir   /usr/local/nginx

第二步:下載安裝編譯須要用到的庫文件:

1. nginx編譯時須要用到的編譯庫文件 

openssl-devel,glib2-devel ,pcre-devel ,bzip2-devel 以及gzip-devel 

不過,wdOS系統下默認安裝了openssl-devel這個庫文件

因此剩下的使用命令 yum  install glib2-devel  pcre-devel  bzip2-devel  gzip-devel 下載安裝便可

2. 檢查系統是否安裝了編譯mysql所須要的工具包gcc gcc-c++ ncurses-develcamkemysql5.5版本後不使用configure安裝,而是使用cmake來安裝)

咱們使用rpm -qa | grep  gcc  和rpm -qa | grep  ncurses-devel進行檢查:

也就是說,wdOS系統中尚未安裝 ncurses-devel ,因此咱們可使用yum命令進行安裝

下載cmake源代碼到/usr/local/src下:

wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz 

解壓縮:tar zxvf cmake-2.8.4.tar.gz

進入/usr/local/src/cmake-2.8.4這個目錄下設置,

./bootstrap

gamke

gmake install

3.下載安裝php時須要用到的編譯庫文件:

 yum -y install libevent libevent-devel libxml2 libxml2-devel libmcrypt libmcrypt-devel libmcrypt libmcrypt-devel curl-devel libpng-devel libtool-ltdl-devel  

第三步:源碼編譯安裝mysql5.5.25a

mysql數據庫添加用戶和用戶組:(我這裏假設爲mysql用戶以及mysql用戶組

groupadd mysql

useradd -g mysql mysql

下載mysql源代碼:

wget  -c  http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.25a.tar.gz

tar xvf mysql-5.5.25a.tar.gz  進行解壓縮:

 設置編譯時的環境參數:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  -----指定mysql的安裝目錄


編譯  make

安裝: make install

在當前目錄下,創建配置文件:

 cp support-files/my-medium.cnf /etc/my.cnf

說明:在展開的源碼包目錄中的「support-files」文件夾下,提供了多個MySQL服務器的配置文件,分別適用於不一樣負載的數據庫服務器,通常選擇my-medium.cnf文件便可,該配置文件適用於中等負載的數據庫,能夠知足大多數企業的應有需求。

設置軟鏈接使mysqlmysqladminbin命令能在shell中直接運行:

建立用於存放mysql數據和日誌的目錄,並修改目錄全部者和屬組爲mysql:

如今到/etc/my.cnf配置文件下,作下面的修改:

進入mysql安裝目錄下的腳本目錄下的腳本目錄:/tmp/mysql-5.5.25a/scripts 

 先修改mysql_install_db這個文件的權限:

chmod  750 mysql_install_db

而後,利用mysql_install_db腳本生成新的mysql受權表

./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/mysql/data &

添加啓動腳本:

 cp /usr/local/src/mysql-5.5.25a/support-files/mysql.server  /etc/rc.d/init.d/mysqld

修改啓動腳本:添加basedir以及datadir的路徑:

修改啓動腳本的權限:

chmod 750 /etc/rc.d/init.d/mysqld

啓動數據庫:

檢查數據庫的默認偵聽端口 3306是否開啓:

第四步:源碼安裝apache-2.2.22

先下載apache源代碼到目錄/usr/local/src下:(我這裏下載的apache版本爲2.2.22

 wget -c  http://apache.etoak.com/httpd/httpd-2.2.22.tar.gz   

下載完成以後開始解壓縮:(這裏給出部分截圖)

tar -zxvf  httpd-2.2.22.tar.gz

進入解壓縮後的httpd-2.2.22這個目錄下,設定編譯時的參數:

./configure --prefix=/usr/local/apache    ----apache安裝在這個目錄下

--enable-vhost-alias                  ----支持虛擬主機的功能

--enable-rewrite                     -----容許重寫

--enable-info 

開始進行編譯:make

編譯完進行安裝 :make install

在當前目錄下,複製apache初始化文件到/etc/init.d目錄下,並命名爲httpd,修改其權限:

cp  build/rpm/httpd.init /etc/init.d/httpd 

設置Apache開機自啓動:(我這裏使用的是方法一)

方法一:輸入下列命令:

chconfig --add httpd

chkconfig -- level 345 httpd on 

方法二:

 編輯 vi  /etc/init.d/httpd

找到 chkconfig:這句,添加3 4 5
找到description: 這句,添加Apache  httpd

設置完以後你能夠輸入 chkconfig --list | grep httpd   檢查一下3,4,5是否爲on

修改apache服務器的配置文件
  vi /usr/local/apache/conf/httpd.conf找到ServerName那一行,去掉前面的註釋 

爲了適應啓動腳本,咱們建立一些符號連接:

重啓一下apache服務器:

/etc/init.d/httpd start 

第五步:源碼編譯安裝nginx-1.0.4

進入/usr/local/src 這個目錄下載nginx源碼:

wget -c http://nginx.org/download/nginx-1.0.4.tar.gz


解壓縮nginx 源代碼包:

tar -zxvf nginx-1.0.4.tar.gz


進入解壓好的nginx-1.0.4 這個目錄配置相應的編譯參數:

 ./configure      --user=nginx     --group=nginx    --prefix=/usr/local/nginx     --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf     --error-log-path=/var/log/nginx/error.lo--http-log-path=/var/log/nginx/access.log     --pid-path=/var/log/run/nginx.pid --lock-path=/var/log/lock/subsys/nginx --with-http_ssl_module     --with-http_realip_module     --with-http_addition_module     --with-http_sub_module     --with-http_dav_module     --with-http_flv_module     --with-http_gzip_static_module     --with-http_stub_status_module     --with-http_perl_module     --with-mail     --with-mail_ssl_module --with-http_flv_module     --with-http_gzip_static_module      --with-http_perl_modul--with-mail --without-http_rewrite_module   --with-pcre


make 進行編譯:


編譯完就能夠進行安裝:make install


第六步:源碼編譯安裝php-5.3.10

   說明:php的編譯這一步要分爲兩部分進行,要先編譯支持apache模塊的,而後再編譯支持nginx模塊的。若是同時進行編譯就會報錯:You've configured multiple SAPIs to be build(見下圖:)


因此,咱們就先編譯支持apache

這一部分的php編譯設置的參數:

 ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-mbstring --enable-fpm --with-iconv-dir=/usr/local/libiconv --enable-xml --with-curl --with-curlwrappers  --with-mhash --with-gd --enable-gd-native-ttf --with-xmlrpc --with-zlib  --with-apxs2=/usr/local/apache/bin/apxs  --with-config-file-path=/usr/local/php/etc


make


make imstall


完成後,就能夠繼續設置支持nginx的編譯參數了:

 ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-mbstring --enable-fpm --with-iconv-dir=/usr/local/libiconv --enable-xml --with-curl --with-curlwrappers  --with-mhash --with-gd --enable-gd-native-ttf --with-xmlrpc --with-zlib 

而後重複與上面apache類似的步驟,make & make install

創建php配置文件:

複製php.iniphp安裝目錄 php.ini-development /usr/local/php/lib 這個目錄下並重命名爲php.ini


說明:php.ini  是 PHP 在啓動時會讀取的配置文件,我這裏沒有作配置。另外,php5.0版本以後文件的名字發生了改變,其中php.ini-production對應於php.ini-recommended;而php.ini-development對應於php.ini-dist php.ini-dist 適合開發程式使用(也就是測試使用), php.ini-recommended 擁有較高的安全性設定,適合上線當產品使用

作方便php的運行的連接,不用配置環境變量



 完成以後,咱們就能夠查看php的版本:


步:整合nginx和php:

 修改進程管理器php-fpm的配置:

     說明:在LAMP平臺下,php是被編譯成爲模塊而後被apache所調用;而在LNMP平臺下,php是被編譯成二進制文件執行,這樣就須要經過fastCGI技術來實現nginxphp的整合。這裏經過使用fastCGI的一個進程管理器php-fpmphp5.3.3之後的版本已經內置了php-fpm,使用的時候只須要加入參數--enable-fpm就能夠由此整合phpnginx

cd  /usr/local/php/etc

cp  php-fpm.conf.default  php-fpm.conf

 進入php-fpm的主配置文件 php-fpm.conf,找到圖中的部分作相應的修改:

最後就是在/usr/local/nginx/html 這個目錄下建立一個文件命名爲info.php,在裏面添加如下測試內容:


完成後可使用 /usr/sbin/nginx來重啓nginx服務,若是啓動的時候提示:nginx: [emerg] getpwnam("nginx") failed


這時,你只須要 vi /etc/nginx/nginx.conf 進入到這個文件,將配置文件的第一行中的user nobody 這一行的註釋去掉便可。


第八步:爲apache設置虛擬主機,使得apache偵聽非80端口

 (我這裏以同一個ip對應兩個不一樣的端口爲例)

vi 編輯httpd的主配置文件/usr/local/apache/conf/httpd.conf,修改原來的80端口爲8080以及8081端口:


同時註釋下面這句:


使Apache支持rewrite(僞靜態),註釋原來的apache文件根目錄:

 



修改Directory模塊內容(至關是全局的,之後httpd-vhosts.conf也會用到這個設置) ,將AllowOverride  none改成all ,註釋掉下面的order.....

開啓了httpd-vhosts虛擬主機文件: 


修改完主配置文件,下面就是虛擬配置文件的修改:

vi  /usr/local/apache/conf/extra/httpd-vhosts.conf

增長8080以及8081這兩個偵聽端口:


仿照下圖,作相應的修改:(因爲我這裏沒有配置dns服務器,因此servername 這句能夠用localhost代替)


說明:上圖中配置的ErrotLog以及CustomLog中的文件請確保存在,像我這裏8081端口中的ErrotLog以及CustomLog中的文件我尚未創建,因此這裏先進入到/usr/local/apache/logs目錄下而後建立文件:


另外,虛擬主機中用到的文件根目錄以及測試文件也應該相應的建立:(cd /usr/local/apache/htdocs

mkdir 8080

mkdir 8081

同時將該目錄下的index.html 複製到8080以及8081這兩個目錄下:

cp  index.html    8080

cp  index.html   8081

而後建立一個文件命名爲test.php,在裏面添加如下測試內容,用以測試mysql是否能與php協同工做:


將這個文件複製到8080以及8081這兩個目錄下:

 cp  test.php  8080

 cp  test.php  8081

第九步 Nginx採用反Nginx採用反向代理的方式接收Apache的處理結果

    說明:Nginx採用反向代理的方式接收Apache的處理結果,須要先寫一些代理的參數,能夠將下面的配置保存爲proxy_params,之後每一個用到proxy_pass的地方都proxy_params這些參數include進來 

在/etc/nginx/ 這個目錄下新建一個proxy_params文件(touch  proxy_params),而後添加下面的代理參數:


附:代理參數的註解

proxy_redirect  http// $scheme://   #重定向

proxy_set_header Host $host;                   #轉發IPHTTP頭信息  

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   #與後端發起握手等待響應超時時間

proxy_connect_timeout 30;    #與後端鏈接成功後等待響應時間(已進入處理隊列等候處理)

proxy_read_timeout 60;  #後端服務器回傳數據時間(後端必須在指定時間內將數據傳送完畢)

proxy_send_timeout 30;   #保存用戶的頭信息大小

proxy_buffers 8  128k;   #高負載時可請求更大proxy_buffers(通常設爲proxy_buffers的兩倍)

而後在/etc/nginx/nginx.conf這個文件中用到proxy_pass的地方都proxy_params這些參數include進來


下面是我從網上搜來的rewrite規則:(規則要放在配置文件的location /{ }外面,server{ }裏面 )

try_files $uri $uri/ @apache;

location @apache {

    proxy_pass http://127.0.0.1:80;    -----這裏的127.0.0.1改成本身的ip地址

    include proxy_params;

}


說明:LNMP相比,rewrite規則顯得麻煩不少,由於NginxrewriteApacherewrite是串行處理的,即Nginx 進行rewrite以後,若是處理後的請求被交給Apache,那麼Apache又會再根據本身的rewrite rule再處理;相反Apacherewrite結果不會再交回Nginx處理。因此,避免麻煩的方法是,只讓Nginxrewrite,由於Nginxrewrite效率比Apache的高

 

另外,NginxRewrite功能須要用到PCRE(正式表達式庫) 可使用

wget http://sourceforge.net/projects/pcre/files/pcre/8.01/pcre-8.01.tar.gz 下載pcre源碼包,而後編譯安裝(make, make install)

安裝完以後,在nginx的配置參數中加入 --with pcre ,而後從新編譯安裝便可。不然會報nginx: [emerg] the using of the regex "\.php$" requires PCRE library in /etc/nginx/nginx.conf:68 這樣的錯,以下圖:


第十步:爲apache安裝rpaf模塊

說明:rpaf這個模塊用於apache作後端時能夠獲取訪客真實的IP 

先下載源碼到/usr/local/src這個目錄下:

 wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz 


解壓縮這個源碼包:

tar -zxf  mod_rpaf-0.6.tar.gz 


進入 mod_rpaf-0.6 這個目錄下:

 /usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c 


這樣rpaf模塊就安裝完成了。

修改httpd主配置文件/usr/local/apache/conf/httpd.conf:

找到LoadModule添加加載rpaf模塊的語句:

LoadModule rpaf_module modules/mod_rpaf-2.0.so 


同時在IfModule添加下面這段:


所有設置完成後重啓一下各項服務:

/usr/sbin/nginx  啓動(/usr/sbin/nginx -s  reload重啓)nginx服務

service httpd restart  重啓httpd 服務

重啓完成後能夠輸入 netstat -lnpt 查看下端口是否開啓


 其中3306mysqld的偵聽端口,9000php-fpm進程管理器的偵聽端口,80nginx的偵聽端口,80808081均爲httpd的偵聽端口

三.測試結果:

虛擬主機的測試:(8081端口


8081端口中關於mysqlphp協同工做的測試:


8080端口的測試:


8080端口中關於mysqlphp系統工做的測試:


Nginx偵聽的80端口的測試:


附:關於rewrite語法的一些介紹:

rewrite 的語法

語法: rewrite regex replacement flag

默認: none

做用域: server, location, if

這個指令根據表達式來更改URI,或者修改字符串。指令根據配置文件中的順序來執行。

注意重寫表達式只對相對路徑有效。若是你想配對主機名,你應該使用if語句。

rewrite只是會改寫路徑部分的東東,不會改動用戶的輸入參數,所以這裏的if規則裏面,你無需關心用戶在瀏覽器裏輸入的參數,rewrite後會自動添加的,所以,咱們只是加上了一個?號和後面咱們想要的一個小小的參數 ***https=1就能夠了。

nginxrewrite規則參考:

爲區分大小寫匹配

~* 爲不區分大小寫匹配

!~!~*分別爲區分大小寫不匹配及不區分大小寫不匹

-f!-f用來判斷是否存在文件

-d!-d用來判斷是否存在目錄

-e!-e用來判斷是否存在文件或目錄

-x!-x用來判斷文件是否可執行

last 至關於Apache裏的[L]標記,表示完成rewrite,呵呵這應該是最經常使用的

break 終止匹配再也不匹配後面的規則

10 redirect 返回302臨時重定向 地址欄會顯示跳轉後的地址

11 permanent 返回301永久重定向 地址欄會顯示跳轉後的地址

相關文章
相關標籤/搜索