LNMP架設 (備忘錄)

自學了一段時間linux,在基礎命令瞭解的前提下。搭建了一下網站平臺,也總結了一些小經驗,爲了以後不能忘記,現在自己做個備忘。希望以後能用到。

基本步驟:

一,安裝軟件前系統準備:

1,打開需要使用的端口。

2,關閉SELinux。

二,安裝nginx:

三,安裝mysql:

四,安裝php:

五,nginx+php-fastcgi配置

 

一、安裝軟件前系統準備:

操作系統:centos5.6 

1、打開需要使用的80、3306端口:

大家都知道,80端口是我們網站web訪問,也就是nginx的默認端口。3306端口是mysql數據庫默認端口。在軟件安裝完並啓動的時候30和3306端口默認是會啓動的,下面的操作只是作爲一個例子,主要是想更清楚的呈現出其中的原理。

[root@localhost~]#vi /etc/sysconfig/iptables    #我們可以看見,系統端口都有哪些是打開的。

QQ截圖20120802140435

可以看見,目前80和3306端口是沒有打開的,我們來添加進去。記得,一定要在22端口下寫入 80 和3306端口,因爲如果在字面的最後開始寫,等保存後重新啓動防火牆時會報錯哦。那這個22端口是什麼呢?其實它就是ssh的默認端口。

添加條目:-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

              -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

我喜歡按照規範填寫,當然上邊的這2條也可以。

QQ截圖20120802142322

重啓防火牆:/etc/init.d/iptables restart      或者  service iptables restart   都可以。

[root@localhost ~]# service iptables restart
清除防火牆規則:                                                       [確定]
把 chains 設置爲 ACCEPT 策略:filter                       [確定]
正在卸載 Iiptables 模塊:                                          [確定]
應用 iptables 防火牆規則:                                        [確定]
載入額外 iptables 模塊:ip_conntrack_netbios_ns     [確定]
[root@localhost ~]#

2、關閉SELinux:

打開selinux配置文件

[root@localhost ~]# vi  /etc/selinux/config  (由於版面問題,我儘量不截圖了。)

 #SELINUX=enforcing          #註釋掉

#SELINUXTYPE=targeted     #註釋掉
   SELINUX=disabled             #增加(關閉selinux)
   :wq  保存,關閉
   shutdown –r  now #重啓系統

當然,如果你在裝系統時關閉了selinux,這裏也不用設置。

到這裏,系統準備完畢。下面我們來安裝nginx+mysql+php;

二、安裝nginx。

在安裝nginx前,需要確保安裝了 gcc ;c++;openssl-devle;pcre-devel和zlib-devel函數庫,我們來使用yum 進行安裝。

[root@localhost ~]# yum install gcc-c++ openssl-devel pcre-devel zlib-devel

提示選擇“Y”,進行安裝。將這些函數庫安裝好後,我們來下載nginx 官網地址是:http://sysoev.ru/ningx/  Nginx 有三個版本,穩定版、開發版和歷史穩定版。通常建議使用穩定版。這裏我使用nginx-0.8.55.

下載完成後,我們來進行解壓安裝,一般情況下,我喜歡將文件在/usr/local/src/目錄下解壓,並安裝在/usr/local/*這個目錄下。當然這是爲了以後好管理才規範的,就像FHS。

[root@localhost src]# pwd
/usr/local/src
[root@localhost src]# tar -zxvf /root/nginx-0.8.55.tar.gz

#解壓後進入目錄內進行編譯安裝。

[root@localhost nginx-0.8.55]#./confiure  --with-http_stub_status_module --prefix=/usr/local/nginx    (如果記不清相應的模塊,也可以默認編譯如:#./configure 一般默認的安裝路徑同樣是#/usr/local/nginx)

[root@localhost nginx-0.8.55]#make ;make install

make完成後,我們來進入nginx的安裝目錄下看一看。

[root@localhost local]# cd nginx/
[root@localhost nginx]# ll
總計 16
drwxr-xr-x 2 root root 4096 08-01 19:47 conf
drwxr-xr-x 2 root root 4096 08-01 19:47 html
drwxr-xr-x 2 root root 4096 08-01 19:47 logs
drwxr-xr-x 2 root root 4096 08-01 19:47 sbin
#conf目錄爲nginx的配置文件目錄,nginx的配置文件就在這個目錄下。

#html默認網頁目錄,裏面會有一個index.html文件。

#logs 爲nginx錯誤日誌文件目錄。

#sbin 啓動目錄。

安裝完成後,我們要對nginx進行啓動,(關閉和平滑重啓)

#/usr/local/nginx/sbin/nginx     (啓動)

#/usr/local/nginx/sbin/nginx –s reload (重新啓動)

#ps –ef |grep nginx #這個命令是查詢nginx的進程命令,調出進程後,將它KILL ,就關閉了nginx 。

[root@localhost ~]# ps -ef |grep nginx
root     16136     1  0 20:01 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody  16137 16136  0 20:01 ?        00:00:00 nginx: worker process      root        16140  3554  0 20:01 pts/1    00:00:00 grep nginx

#我們能夠看到PID 也就是16136和16137這2個進程ID ,其中16136的使用者是root  而16137纔是nginx的工作進程。

[root@localhost ~]# kill 16137(或者16136)
[root@localhost ~]# ps -ef |grep nginx
root     16147  3554  0 20:04 pts/1    00:00:00 grep nginx

#看見了吧。這樣nginx就關閉了。

 

[root@localhost ~]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

#上面這條命令時進行nginx的平滑重啓,HUP參數是表示重新加載配置,也就是關閉原有進程,並開啓新的工作進程,而且不會中斷用戶的訪問請求。如下所示:

[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost ~]# ps -ef|grep nginx
root     16198     1  0 20:10 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   16199 16198  0 20:10 ?        00:00:00 nginx: worker process      root     16201  3554  0 20:10 pts/1    00:00:00 grep nginx
[root@localhost ~]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
[root@localhost ~]# ps -ef |grep nginx
root     16198     1  0 20:10 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody  16203 16198  0 20:11 ?        00:00:00 nginx: worker process      root     16206  3554  0 20:11 pts/1    00:00:00 grep nginx

#標有下滑線部分,進程號是不是不一樣了… 。

好了,當我們啓動nginx後,打開瀏覽器測試一下,輸入地址 http://192.168.209.133   回車 其中(IP地址部分爲server 網絡地址)

QQ截圖20120802154705

安裝完成後,最好重啓一下。

三、mysql安裝:

#創建mysql用戶和用戶組。

[root@localhost ~]# groupadd mysql

[root@localhost ~]# useradd –g mysql mysql

#mysql 我選擇使用yum安裝。

[root@localhost ~]# yum install mysql mysql-server

#安裝完成後,啓動mysql。(yum安裝的,所以默認路徑固定。)

[root@localhost ~]# /etc/init.d/mysqld start   #啓動MySQL

[root@localhost ~]# cp /usr/share/mysql/my-medium.cnf   /etc/my.cnf  #拷貝配置文件(注意:如果/etc目錄下面默認有一個my.cnf,直接覆蓋即可,

#在/usr/share/mysql目錄中,配製文件有幾個,比如my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的網站和不同配製的服務器環境,當然需要有不同的配製文件了。
一般的情況下,my-medium.cnf這個配製文件就能滿足我們的大多需要;

#MySQL數據庫目錄是:/var/lib/mysql

[root@localhost ~]#chkconfig php-fpm on #設置開機啓動。

#mysql安裝完成。

四、php安裝:

我們使用源碼包,安裝php。

安裝前確認安裝了 gcc;gcc-c++;libxml2;libxml2-devel;autoconf;libjpeg;libjpeg-devel;libpng;libpng-devel;freetype;freetype-devel;zlib;zlib-devel;glibc;glibc-devel;glib2;glib2-devel 函數庫,當然也可以在安裝php過程中,根據錯誤提示信息安裝對應的函數庫。

下載php:http://www.php.net  這裏下載的是php-5.4.0版本,這個版本已經集成了php-fpm包,而php-5.2版本的沒有集成,所以還要下載php-fpm源碼包,整合後進行編譯安裝。至於php-fpm它是一個第三方的fastcgi進程管理器,因爲nginx只能響應靜態請求,無法響應動態請求,只能藉助第三方fastcgi進程管理器來響應動態的請求。

[root@localhost src]#tar –zxvf /root/php-5.4.0.tar.gz  #解壓

[root@localhost php-5.4.0]#./configure --prefix=/usr/local/php5.4 --enable-fastcgi --enable-fpm # --enable-fastcgi 是啓用對php的fastcgi支持;--enable-fpm 是激活對fastcgi模式的fpm支持。當然也可以使用#./configure --prefix=/usr/local/php5.4  。

[root@localhost php-5.4.0]#make;make isntall

[root@localhost php-5.4.0]# cp php.ini-development 

/usr/local/php5.4/etc/php.ini

#php.ini是PHP的全局配置文件,可以根據需求的不同對php.ini進行配置。

#安裝完成後我們進入到安裝目錄下,對php-fpm進行配置。

[root@localhost php5.4]# cd etc
[root@localhost etc]# ll
總計 100
-rw-r--r-- 1 root root  1182 08-01 21:24 pear.conf
-rw-r--r-- 1 root root 20854 08-01 21:23 php-fpm.conf.default
-rw-r--r-- 1 root root 66849 08-01 21:24 php.ini

#php-fpm.conf.default就是php-fpm的配置文件,我們先來備份一下,如果更改錯了,還可以還原。

[root@localhost etc]# cp php-fpm.conf.default  /root/php-fpm.conf

 

我們用vi打開這個文件。

[root@localhost etc]# vi php-fpm.conf.default

#大概是132-133行,我們要將usr  group  默認的用戶和組前面的註釋去掉。像這樣。

; Unix user/group of processes

; Note: The user is mandatory. If the group is not set, the default user's group

;       will be used.

user = nobody

group = nobody

#現在我們來啓動php5.4.0

[root@localhost ~]# /usr/local/php5.4/sbin/php-fpm --fpm-config /usr/local/php5.4/etc/php-fpm.conf.default  #啓動php,無報錯的話,恭喜你,php-fpm已經啓動了。這個啓動命令有點長,哎,可惜我現在還沒有找到短的,呵呵。以後會有好的方法啓動的。

~~簡單寫一下php-5.2.*版本的安裝和配置,其實大同小異,響應步驟如下:

下載php-fpm源碼包後,

[root@localhost ~]# gzip –cd php-5.2.13-fpm-0.5.13.diff.gz |path –d php-5.2.13 -p1#後面爲數字1,該命令需要在解壓php-5.2.13.tar.gz後輸入執行。其操作就是個打補丁的過程。

[root@localhost php-5.2.13]#make;make install

[root@localhost php-5.2.13]# cp php.ini-dist /usr/local/php/lib/php.ini #同理,拷貝配置文件。

[root@localhost ~]#/usr/local/php/bin/php-cgi  --fpm

[root@localhost ~]#/usr/local/php/sbin/php-fpm start #這2條同爲啓動命令,如下:

#stop 強制終止php的fastcgi進程。

#start 啓動php的fastcgi進程。

#quit 平滑終止php的fastcgi進程。

#restart 重啓php的fastcgi進程。

#reload 重新加載php的php.ini。

#logrotate 重啓log文件。

其餘其他步驟與5.4版本操作相同。

 

五,nginx+php-fastcgi配置

這是最後一個步驟,也是重點步驟。是php-fpm對nginx動態請求的一個解析。也是本次試驗成功與否的關鍵。

進入nginx配置目錄,編寫配置文本。

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

進入配置文本中,需要去掉響應的選項註釋。由於文檔比較長,所以我將不需要的註釋去掉,相應的配置會有文字說明。

[root@localhost conf]# cat nginx.conf |grep -v "#"

user  nobody; #該用戶名記得一定要和php-fpm中的用戶名一樣。
worker_processes  1;  #工作進程,一般你的電腦cpu是幾核就填幾。

error_log  logs/error.log; #錯誤日誌目錄。

pid        logs/nginx.pid;  #pid進程號碼顯示的文件。

events {       #設定nginx的工作模式及連接數上限。
    worker_connections  1024;

}

http {
    include       mime.types;
    default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.php index.htm; #重點,記得寫上index.php。
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

location ~ \.php$ { #這幾列一定要記住去掉註釋,並將fastcgi_param 項 該爲變量$document_root 後接$fastcgi......中間無空格。
   root           html;#這裏也可以使用絕對路徑。
   fastcgi_pass   127.0.0.1:9000;#9000端口,本地IP。
   fastcgi_index  index.php;
   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
   include        fastcgi_params;
        }

    }

}

#退出,保存,然後重啓nginx          #/usr/local/nginx/sbin/nginx –s reload     重啓。

#完成這些後基本上可以說,完成了NINGX和PHP-fpm的配置了。 現在我們來測試一下吧。

優化

#在配置完成nginx+fastcgi之後,爲了保證nginx下的php高速運行,需要添加一些fastcgi的優化指令。將下面的代碼添加到nginx主配置文件的HTTP層級:(nginx.conf 下 http層下)

fastcgi_cache_path  /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m  inactive=5m;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

fastcgi_cache TEST;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

測試

測試其實很簡單,書上、文檔上也都是相同的辦法…  就是編寫一個phpinfo.php來測試php-fpm是否已經支持。

編輯phpinfo.php  

[root@localhost ~]# cd /usr/local/nginx/html/  #切換到默認網頁放置目錄。

[root@localhost html]# vi phpinfo.php#用VI編輯。

#進入到vi編輯模式中,鍵入如下代碼:

<?php;
phpinfo();#注意:之間無空格。
?>

#注意,這裏只是測試環境,如果是生產環境,測試完後將它刪除,不要忘記哦。

#編寫完成後,將nginx、php-fpm開啓。

#打開本地瀏覽器,在地址欄內輸入服務器IP地址 如:http://192.168.209.133/phpinfo.php    

 

QQ截圖20120803145744

#出現上圖畫面,證明Nginx+php-fpm配置成功。

#通過上面一系列步驟我們完成了,LNMP的搭建,其中很多命令很重要,一定要記牢。

#ab –c 500 –n 5000 –t 20 http:// IP地址/index.html  #網站壓力測試命令。

#yum –y renmove 軟件包名    #這是yum的卸載命令, 參數 “-y” 是同時卸載軟件的依賴包。

#/etc/init.d/httpd start  (stop restart) #阿帕奇的開啓,停止,重啓。

其實nginx的使用很多,這只是其中的一小部分。比如說負載均衡,虛擬主機,防盜鏈配置,日誌分割。等等,很多用途。

軟件版本查看命令

[root@localhost ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/0.8.55
[root@localhost ~]# /usr/local/php5.4/sbin/php-fpm -v
PHP 5.4.0 (fpm-fcgi) (built: Aug  1 2012 21:23:14)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

博文完成,裏面還有很多不足,請高手們指教,小弟不勝感激。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章