LNMP是一個基於CentOS/Debian編寫的Nginx、PHP、MySQL、phpMyAdmin、eAccelerator一鍵安裝包。能夠在VPS、獨立主機上輕鬆的安裝LNMP生產環境。php
LNMP表明的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。html
Linux是一類Unix計算機操做系統的統稱,是目前最流行的免費操做系統。表明版本有:debian、centos、ubuntu、fedora、gentoo等。mysql
Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。nginx
Mysql是一個小型關係型數據庫管理系統。sql
PHP是一種在服務器端執行的嵌入HTML文檔的腳本語言。數據庫
這四種軟件均爲免費開源軟件,組合到一塊兒,成爲一個免費、高效、擴展性強的網站服務系統。apache
特色 Nginx是一個小巧而高效的Linux下的Web服務器軟件,是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler 站點開發的,已經在一些俄羅斯的大型網站上運行多年,至關的穩定。ubuntu
Nginx性能穩定、功能豐富、運維簡單、處理靜態文件速度快且消耗系統資源極少。vim
優勢 做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,體現更高的效率。centos
做爲負載均衡服務器:Nginx 既能夠在內部直接支持 Rails 和 PHP,也能夠支持做爲 HTTP代理服務器對外進行服務。Nginx 用C編寫,不管是系統資源開銷仍是CPU使用效率都比Perlbal要好的多。
做爲郵件代理服務器:Nginx同時也是一個很是優秀的郵件代理服務器(最先開發這個產品的目的之一也是做爲郵件代理服務器),Last/fm 描述了成功而且美妙的使用經驗。
Nginx 安裝很是的簡單,配置文件很是簡潔(還可以支持perl語法)。Nginx支持平滑加載新的配置,還可以在不間斷服務的狀況下進行軟件版本的升級。
環境搭建
首先必須有源碼,而後必要的編譯環境。
本文只介紹nginx 與php的源碼安裝。至於mysql前面文章都已經介紹過了。
這裏準備了兩個源碼。
-rw-r--r-- 1 root root 837650 08-11 16:00 libevent-2.0.16-stable.tar.gz //提升nginx性能的一個包
-rw-r--r-- 1 root root 691501 08-11 16:00 nginx-1.0.11.tar.gz 具體的步驟說明能夠參照lamp文章
[root@localhost ~]# yum list all |grep pcre
This system is not registered with RHN.
RHN support will be disabled.
pcre.i386 6.6-2.el5_1.7 installed
pcre-devel.i386 6.6-2.el5_1.7 rhel-server
咱們須要庫文件的支持。因此安裝pcre-devel.
[root@localhost ~]# yum install pcre-devel
[root@localhost ~]# tar -zxvf libevent-2.0.16-stable.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/libevent-2.0.16-stable/
[root@localhost libevent-2.0.16-stable]# ./configure //不進行過多的配置了。直接編譯。
[root@localhost libevent-2.0.16-stable]# vim /etc/ld.so.conf.d/libevent.conf
/usr/local/lib
[root@localhost libevent-2.0.16-stable]# make
[root@localhost libevent-2.0.16-stable]# make install
[root@localhost libevent-2.0.16-stable]# ldconfig -v
[root@localhost libevent-2.0.16-stable]# ldconfig -pv |grep libevent
libevent_pthreads-2.0.so.5 (libc6) => /usr/local/lib/libevent_pthreads-2.0.so.5
libevent_openssl-2.0.so.5 (libc6) => /usr/local/lib/libevent_openssl-2.0.so.5
libevent_extra-2.0.so.5 (libc6) => /usr/local/lib/libevent_extra-2.0.so.5
libevent_core-2.0.so.5 (libc6) => /usr/local/lib/libevent_core-2.0.so.5
libevent-2.0.so.5 (libc6) => /usr/local/lib/libevent-2.0.so.5
libevent-1.1a.so.1 (libc6) => /usr/lib/libevent-1.1a.so.1
[root@localhost libevent-2.0.16-stable]# cd
[root@localhost ~]# tar -zxvf nginx-1.0.11.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/nginx-1.0.11/
[root@localhost nginx-1.0.11]# groupadd -r nginx //建立組nginx
[root@localhost nginx-1.0.11]# useradd -r -g nginx -s /bin/false -M nginx //建立用戶nginx屬於組nginx無登陸權限禁止建立家目錄
[root@localhost nginx-1.0.11]# mkdir /var/tmp/nginx
[root@localhost nginx-1.0.11]# ./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--with-pcre
[root@localhost nginx-1.0.11]# make
[root@localhost nginx-1.0.11]# make install
[root@localhostnginx-1.0.11]# /usr/sbin/nginx //啓動nginx
這樣就解決了nginx的問題。
可是支持php還須要fastcgi_params fastcgi_params.default fastcgi.conf的改動。
[root@localhost nginx-1.0.11]#vim /etc/nginx/nginx.conf
43 location / {
44 root html;
45 index index.php index.html index.htm;
46 }
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 include fastcgi_params;
71 }
[root@localhost nginx-1.0.11]# vim /etc/nginx/fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
安裝PHP
這個地方是最重要的地方,由於默認狀況下Nginx和PHP他倆之間是一點感受沒有的。在以前,不少朋友都搭建過Apache+PHP,Apache+PHP編譯後生成的是模塊文件,而Nginx+PHP須要PHP生成可執行文件才能夠,因此要利用fastcgi技術來實現N ginx與PHP的整合,這個只要咱們安裝時啓用FastCGI便可。這次咱們安裝PHP不只使用了FastCGI,並且還使用了PHP-FPM這麼一個東東,PHP-FPM說白了是一個管理FastCGI的一個管理器,它做爲PHP的插件存在,在安裝PHP要想使用PHP-FPM時就須要把PHP-FPM以補丁的形式安裝到PHP中,並且PHP要與PHP-FPM版本一致,這是必須的,切記!
php 5.3.3及以上的版本內置了fpm ,此處用5.3.7舉例,下載後解壓,進入解壓後目錄
[root@localhost ~]# tar -jxvf php-5.3.7.tar.bz2 -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/php-5.3.7/
[root@localhost php-5.3.7]# less INSTALL
Example #1 Installation Instructions (Apache Shared Module Version) for
PHP
1. gunzip apache_xxx.tar.gz
2. tar -xvf apache_xxx.tar
3. gunzip php-xxx.tar.gz
4. tar -xvf php-xxx.tar
5. cd apache_xxx
6. ./configure --prefix=/www --enable-module=so
7. make
8. make install
9. cd ../php-xxx
[root@localhost php-5.3.7]# ./configure -help
--prefix //安裝路徑
--enable-mbstring //字符串支持
[root@localhost php-5.3.7]# ./configure --prefix=/usr/local/php --enable-mbstring=all --enable-fastcgi --enable-fpm
[root@localhost php-5.3.7]# make
[root@localhost php-5.3.7]# make install
注:Nginx+PHP整合,在安裝時必須啓用--enable-fastcgi和 --enable-fpm,這兩個選項是作什麼的上面已經描述。執行完後系統會提示--enable-fastcgi是一個未知選項,咱們沒必要理會
再把php.ini-production複製到/usr/local/php/lib下,更名php.ini,
把/usr/local/php/etc/php-fpm.conf.default複製一份到相同目錄命名爲php-fpm.conf
[root@localhost php-5.3.7]# cp php.ini-production /usr/local/php/lib/php.ini
[root@localhost php-5.3.7]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php_fpm.conf
爲php-fpm提供Sysv init腳本,並將其添加至服務列表:
[root@localhost php-5.3.7]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@localhost php-5.3.7]# chmod +x /etc/rc.d/init.d/php-fpm
[root@localhost php-5.3.7]# chkconfig --add php-fpm
[root@localhost php-5.3.7]# chkconfig php-fpm on
打開php-fpm.conf,去掉相應的分號註釋,最後以下
pid = /usr/local/php/var/run/php-fpm.pid
error_log = log/php-fpm.log
listen = 127.0.0.1:9000
user = nobody
group = nobody
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
[root@localhost php-5.3.7]# service php-fpm start //啓動php-fpm
使用以下命令來驗正(若是此命令輸出有中幾個php-fpm進程就說明啓動成功了):
[root@localhost php-5.3.7]# ps aux |grep php-fpm
root 5597 0.0 0.2 16340 2176 ? Ss 16:49 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody 5598 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5599 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5600 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5601 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
nobody 5602 0.0 0.2 16340 1724 ? S 16:49 0:00 php-fpm: pool www
root 5606 0.0 0.0 5024 660 pts/1 R+ 16:51 0:00 grep php-fpm
測試網頁
[root@localhost ~]# vim /usr/html/index.php
<?php
phpinfo();
?>