自學了一段時間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 #我們可以看見,系統端口都有哪些是打開的。
可以看見,目前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條也可以。
重啓防火牆:/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 網絡地址)
安裝完成後,最好重啓一下。
三、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
#出現上圖畫面,證明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
博文完成,裏面還有很多不足,請高手們指教,小弟不勝感激。