Linux服務器下LNMP安裝與配置方法
一、準備
1.準備php函數的rpm包
2.準備lnmp其他的源代碼包
3.安裝php-5.2.14源代碼包所需要的函數支持包
復制代碼 代碼如下:
(libiconv庫為需要做轉換的應用提供了一個iconv()的函數,以實現一個字符編碼到另一個字符編碼的轉換)
復制代碼 代碼如下:
(libmcrypt是加密算法擴展庫。支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法。)
復制代碼 代碼如下:
如果以上有錯誤,請按以下方法:
打開/etc/ld.so.conf,在文件之后,添加一行:
然后,執行 ldconfig ,重新編譯即可。
二、安裝MySQL
1. 編譯安裝MySQL 5.5.3-m3
復制代碼 代碼如下:
三、安裝PHP
1. 編譯安裝PHP(FastCGI模式。使用fastCGI管理php,加快php解析速度)
復制代碼 代碼如下:
2.準備編譯安裝PHP5擴展模塊
復制代碼 代碼如下:
3. 修改php.ini文件,讓php模塊生效
復制代碼 代碼如下:
4.在php.ini中配置eAccelerator加速PHP
復制代碼 代碼如下:
5.準備php-cgi和nginx進程執行者用戶
6. 創建php-fpm配置文件- php-fpm.conf
7. 啟動php-cgi(fastcgi)進程
監聽127.0.0.1的9000端口,進程數為128(如果服務器內存小于3GB,可以只開啟64個進程),用戶為nginx:
復制代碼 代碼如下:
四、安裝Nginx
1. 安裝Nginx所需的pcre庫
復制代碼 代碼如下:
2. 安裝Nginx
復制代碼 代碼如下:
3. 修改Nginx配置文件
復制代碼 代碼如下:
4. 在/usr/local/nginx/conf/目錄中創建fastcgi_params文件
復制代碼 代碼如下:
#建議把fastcgi_param寫到nginx.conf中而不是把它寫到fastcgi_params配置文件中,否則配置不夠靈活,比如后面默認php設置和alias php設置中,他們的php頁面的系統地址是不同的,比如:
默認php文件->/usr/local/nginx/html/index.php
Alias php文件->/mnt/bbs/index.php
這個時候你會發現fastcgi_params中的SCRIPT_FILENAME的值是相同的,這樣會導致alias php的頁面出不來,而配置在nginx.conf中各自配置各自的php系統地址,這樣比較靈活.
#如果你覺得每個連接php的配置中都要加這一句話有點冗余,那就把它加入到fastcgi_params文件中,這樣只需要加一次,其他所有的nginx.conf中的有關連接fastcgi的一塊就不用加fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name這一句話了.
5.配置開機啟動nginx,php-fpm,ulimit
1)nginx
Vi /etc/rc.local
/usr/local/nginx/sbin/nginx
2)php-fpm
Vi /etc/rc.local
/usr/local/php/sbin/php-fpm start
3)ulimit
Vi /etc/profile
ulimit -SHn 65535
4)mysql
Vi /etc/rc.local
/usr/local/mysql/bin/mysqld_safe --user=mysql &
6.檢查nginx配置文件語句錯誤
7.平滑重啟nginx進程
1)Pkill -HUP nginx
2)kill -HUP `pgrep -uroot nginx`
Pgrep -uroot nginx 取出nginx主進程PID
3)/usr/local/nginx/sbin/nginx -s reload
8. 編寫每天定時切割Nginx日志的腳本
8.1創建腳本/usr/local/nginx/sbin/cut_nginx_log.sh
vi /usr/local/nginx/sbin/cut_nginx_log.sh
8.2設置crontab,每天凌晨00:00切割nginx訪問日志
9.配置nginx虛擬主機
Sina和sohu域名事先解析
復制代碼 代碼如下:
最后在客戶端測試虛擬主機www.baidu.com和www.sina.com兩家公司網站
10.列表頁顯示
11.虛擬目錄設置
#這樣配置html靜態文件是可以出來的,但是php動態頁面出不來,而且會瀏覽器的頁面上會顯示" No input file specified. "的報錯,其實是php系統文件地址( SCRIPT_FILENAME)找不到,也就是說fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;中的$document_root$fastcgi_script_name不是真正的/mnt/bbs/index.php的地址,這可怎么解決:
#后面兩行是關于日志的,就是為了更好的觀察由nginx提交給fastcgi的php的系統地址SCRIPT_FILENAME,在這里我用$request_filename來給SCRIPT_FILENAME賦值,在日志中的結果為/mnt/bbs/index.php,在這里我發現一個問題就是$request_filename中的root設置為/mnt,否則$request_filename的值為:/mnt/bbs/bbs/index.php.
由以上可以得到一個結論,就是默認php設置也可以這樣設置關于
#此時從日志中可以看到,$request_filename的值為/usr/local/nginx/html/index.php,而以前默認的/scripts$fastcgi_script_name顯然是錯的php系統地址,日志中顯示為/scripts/index.php
12.nginx狀態監控
#客戶端訪問網址:http://www.baidu.com/nginxstatus
13.rewrite正則過濾
Rewrite指令最后一項參數為flag標記,支持的flag標記如下:
- Last 標示完成rewrite規則
- Break 不再匹配后面的規則
- Redirect 302臨時重定向
- Permanent 301永久重定向
Last和break用來實現uri重寫,瀏覽器地址欄的url地址不變,但在服務器訪問的路徑發生了變化,redirect和permanent用來實現url跳轉,瀏覽器地址欄會顯示跳轉后的url地址,使用alias指令時必須使用last標記,使用proxy_pass指令時要使用break標記,last標記在本條rewrite規則執行完畢后,會對其所在的server{}標簽重新發起請求,而break標記則在本條規則匹配完成后,終止匹配,不再匹配后面的規則.
在匹配的過程中,nginx將首先匹配字符串,然后再匹配正則表達式,匹配到第一個正則表達式后,會停止搜索,如果匹配到正則表達式,則使用正則表達式的搜索結果,如果沒有匹配到正則表達式,則使用字符串的搜索結果.
可以使用前綴"^~"來禁止匹配到字符串后,再去檢查正則表達式,匹配到url后,將停止查詢.
使用前綴"="可以進行精確的url匹配,如果找到匹配的uri,則停止查詢,例如"location=/",只能匹配到"/",而"/test.html"則不能被匹配.
正則表達式的匹配,按照它們在配置文件中的順序進行,寫在前面的優先.
請求處理匹配結果示例:
例1:域名跳轉
輸入www.sina.com,跳轉到www.sohu.com
例2:靜態index.html跳轉到動態index.php文件
在客戶端輸入:http://www.sina.com/index2.html
會跳轉到index.php,把2當變量傳入index.php程序
14.代理負載均衡技術(反向代理)
模塊設置
1.模塊設置
Error_log
#錯誤日志
Include
#包含子配置文件,0.6版本以后子配置文件放在nginx.conf所在的路徑下
Pid
#主進程id號
User
#nginx nginx表明nginx進程的執行者和組
Worker_processes
#與cpu個數相同,4核cpu為4
Worker_rlimit_nofile 65535
#打開的文件描述符,不過提前得設置ulimit -SHn 65535,即linux允許的打開文件個數
Worker_connectiones 65535
#客戶端最大連接數65535
Alias
#虛擬目錄
Error_page
#404,500錯誤跳轉頁面
Index
#index index.html,設置默認首頁
Keepalive_timeout
#即tcp持續連接超時時間
Limit_rate
#limit _rate 100k,即限速為100KB/s
Limit_rate_after
#limit_rate_after 1m,即下載文件超過1m,則進入limit_rate限速階段
Listen
#listen 192.168.100.1:80,即設置ip和端口
Location
#該指令允許對不同的uri進行不同的配置,可以是字符串、正則表達式
Resolver
#resolver 8.8.8.8,為nginx設置dns域名指向
Root
#設置網站根目錄
Send_timeout
#超時時間是指進行了兩次tcp握手,還沒有轉為established狀態的時間,如果超過這個時間,客戶沒有響應,nginx則關閉連接,可以用來防止ddos攻擊
Sendfile
#啟用或禁用sendfile()函數,作用于拷貝兩個文件描述符之間的操作函數,這個拷貝是在內核中操作的,比read和write拷貝高效得多
Server
#普通web配置或虛擬主機的配置的區域
Server_name
#根據客戶端請求header頭信息中的host域名,來匹配該請求應該由哪個虛擬主機配置或服務器的ip
Tcp_nodelay
#封裝tcp/ip數據包的等待時間,也叫納格算法,在keepalive開啟才有用
Tcp_nopush
#要求sendfile開啟的時候才起作用,設置該選擇的原因是nginx在linux上,試圖在一個包中發送它的httpd應答頭
Allow
#allow 192.168.100.254,只允許192.168.100.254訪問
Deny
#deny all,拒絕其他任何人訪問
Autoindex
#autoindex on,即開啟列表頁功能
Charset
#charset utf8;source_charset gbk,把服務器上的gbk網頁編碼轉換成utf8輸出給客戶端
Fastcgi_pass
#fastcgi_pass 127.0.0.1:9000;
#fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
#include fastcgi_params;
#fastcgi_pass后跟的是php-cgi進程的ip和端口
Access_log
#正確日志
Proxy_pass
# proxy_pass http://myweb1,即后跟的是nginx代理負載池upstream中的服務器
Proxy_set_header
# proxy_set_header Host $host,設置把$host帶給后端的nginx服務器
Proxy_temp_path
#用戶指定一個本地目錄緩沖較大的代理請求,類似于client_body_temp_path
Stub_status
# stub_status on,即開戶狀態監控
Image_filter
#它指定適用于圖片的轉換類型