LNMP(Linux-Nginx-MySQL-PHP)網站架構是目前國際流行的Web框架,該框架包括:Linux操做系統,Nginx網絡服務器,MySQL數據庫,PHP編程語言,全部組成產品均是免費開源軟件,這四種軟件組合到一塊兒,成爲一個免費、高效的網站服務系統。php
Linux、MySQL、PHP這些框架的優勢以前已經介紹過,LNMP和LAMP不一樣的一點就是Web服務器Nginx,那麼Nginx相比Apache有什麼優勢呢?css
Nginx是一個小巧而高效的Linux下的Web服務器軟件,已在一些大型網站上運行多年,不少國內外的門戶網站、行業網站也都在是使用Nginx,至關的穩定。html
Nginx的主要特色是穩定、功能豐富、安裝配置簡單、低系統資源。Nginx對於反向代理和負載均衡有不錯的支持。Nginx不只僅能夠作爲Web服務器,還能夠作負載均衡服務器、代理服務器和郵件服務器。mysql
做爲Web服務器來講,相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,Nginx處理靜態文件、索引文件,自動索引的效率很是高,體現更高的效率。linux
做爲代理服務器,Nginx能夠實現無緩存的反向代理加速,提升網站的運行速度。nginx
做爲負載均衡服務器,Nginx既能夠在內部直接支持Rails和PHP,也能夠支持HTTP代理服務器對外進行服務,同時還支持簡單的容錯和利用算法進行負載均衡;Nginx 用 C 編寫, 不管是系統資源開銷仍是 CPU 使用效率都比 Perlbal 要好的多。c++
做爲郵件代理服務器來講, Nginx是一個很是優秀的郵件代理服務器(最先開發這個產品的目的之一也是做爲郵件代理服務器)。web
安裝配置上,Nginx安裝簡單、配置靈活、配置文件很是簡潔(還可以支持perl語法);性能方面,Nginx是專門爲性能優化而開發的,很是注重效率。它採用Poll模型,能夠支持更多的併發鏈接,最大能夠支持對50000個併發鏈接數的形影,並且只佔用很低的內存資源;可用性方面,Nginx支持熱部署,啓動速度特別迅速,能夠在不間斷服務的狀況下,對軟件版本或者配置進行升級,及時運行數月也無需從新啓動,幾乎能夠作到7*24顯示不間斷運行。算法
可見,LNMP(Linux-Nginx-MySQL-PHP)這四種軟件的組合,能夠成爲一個免費、高效、擴展性強的網站服務系統。sql
1) Linux操做系統,CentOS7.3;
2) Apacheweb服務器,發佈web靜態頁面,Nginx web服務器,發佈靜態頁面;
3) PHP,一門語言,解釋型語言,PHP模塊直接解析.php結尾的文件,基於apache+php整合。php-fpm會處理php相關的請求(叫作動態的請求)
4) MySQL數據庫,關係型數據庫,由各類表格組成,每張表由不一樣的列,不一樣的行組成;(Redis內存數據庫,nosql,高鍵值對Key-Values);
5) LNMP用於企業發佈PHP動態網站+靜態網站,而且鏈接數據庫服務器,必要的數據(員工姓名、密碼、工資條、訂單)存入數據庫;
LNAMP(Linux+Nginx+Apache+MYSQL+PHP+Discuz)
動態、靜態 :
所謂靜態,指的是Ninx能夠直接處理的圖片、js、css、flash、視頻、音頻等等;
所謂動態,指的是這些請求須要和數據庫打交道。好比,用戶登錄過程,好比查看一篇文章,或者寫一篇文章。
靜態頁面:與數據庫沒有交互代碼,不更新,html、css、js、xml、png、jpg、jpeg、txt;
動態頁面:與數據庫有交互,隨着數據庫變化而更新,php、jsp、do、cgi、asp、aspx;
二進制包 yum安裝lnmp環境 命令:
[root@localhost ~]# yum install httpd httpd-devel php php-devel php-mysql mysql-server mysql-devel-mysql libmcript -y
基於Nginx均衡LNMP(負載均衡+反向代理):
http://nginx.org/download/nginx-1.12.0.tar.gz
先安裝依賴的包
yum install gcc gcc-c++ glibc glibc-devel pcre-devel pcre openssl-devel openssl zlib-devel zlib libmcrypt-devel -y
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -xvzf nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure --prefix=/usr/local/nginx
make
make install
nginx 擴展命令查看 用grep –vE 「#|^$」 nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } } } |
查看nginx有沒有安裝
HTTP 80端口被佔用:
誰佔用的80端口命令:
netstat -ntlp | grep 80
先使用kill -9 殺死進程,發現殺死不了,使用pkill- 9命令完全殺死http進程。再次啓動nginx
經過 命令遠程訪問網站 curl –s http://47.94.201.226/ 獲得頁面
upstream jfedu_app { server 127.0.0.1:80 weight=1 max_fails=2 fail_timeout=30s; } server { listen 192.168.149.128:80; server_name localhost www.jfedu1.com; location / { proxy_pass http://jfedu_app; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
[root@localhost ~]# cd /usr/local/src
2.查看以前安裝的mysql是否有在運行,有得話就關掉
[root@localhost src]# ps aux |grep mysql root 5665 0.0 0.1 115388 1688 ? S 1月08 0:00 /bin/sh /usr/local/mariadb/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/centos001.pid mysql 5790 0.0 4.9 1125124 50248 ? Sl 1月08 3:21 /usr/local/mariadb/bin/mysqld --basedir=/usr/local/mariadb --datadir=/data/mysql --plugin-dir=/usr/local/mariadb/lib/plugin --user=mysql --log-error=/data/mysql/centos001.err --pid-file=/data/mysql/centos001.pid --socket=/tmp/mysql.sock --port=3306 root 30128 0.0 0.0 112676 984 pts/1 R+ 18:53 0:00 grep --color=auto mysql [root@centos001 src]# [root@localhost mysql]# rm -rf /usr/local/mysql #刪除/usr/local/mysql 目錄 [root@localhost mysql]# rm -rf /etc/init.d/mysqld #刪除啓動的腳本 [root@centos001 src]# ps aux |grep mysql #S+狀態是由於沒有編譯 root 30139 0.0 0.0 112676 980 pts/1 S+ 18:56 0:00 grep --color=auto mysql [root@localhost ~]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz #二進制免編譯的包
3.將解壓後的文件,移動並建立至/usr/local/mysql目錄下,移動完文件後,使用命令:ls /usr/local/mysql,查看是否移動成功了。
[root@localhost ~]# tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz [root@localhost ~]# mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql [root@localhost ~]# ls /usr/local/mysql #查看是否有如下目錄 bin COPYING data docs include lib man mysql-test README scripts share spl-bench support-files
4.建立用戶。由於已經建立過了因此只須要刪除目錄下的文件就能夠了
[root@localhost ~]# cd /usr/local/mysql/ [root@localhost mysql]# useradd mysql usradd:用戶「mysql」已存在 [root@localhost mysql]# mkdir /data/ [root@localhost mysql]# [root@localhost mysql]# ls /data/ mariadb mysql wwroot [root@localhost mysql]# rm -rf /data/mysql/* #清空之前安裝mysql庫 [root@localhost mysql] useradd -s /sbin/nologin php-fpm [root@localhost mysql]# ls /data/ mysql
5.初始化mysql
###初始化 [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql [root@localhost mysql]# echo $? 0
6.修改配置文件,定義basedir和datadir程序目錄
[root@localhost mysql]# vi /etc/my.cnf
[root@localhost mysql]# cp support-files/m
magic my-default.cnf mysqld_multi.server mysql-log-rotate mysql.server
[root@localhost mysql]# cp suppport-files/mysql.server /etc/init.d/mysql
[root@localhost mysql]# vi /etc/init.d/mysqld
[root@localhost mysql]#mv /etc/init.d/mysql /etc/init.d/mysqld
[root@localhost mysql]# /etc/init.d/mysqld start #啓動MySQL
..............
SUCCESS
[root@localhost mysql]# ps aux | grep mysql
[root@localhost mysql]# chkconfig --add mysqld #把MySQL加到服務中去
[root@localhost mysql]# chkconfig mysqld on #開機啓動
測試
[root@localhost mysql]# service mysqld stop #中止MySQL服務
[root@localhost mysql]# service mysqld start #中止MySQL服務
7.配置啓動腳本,拷貝配置文件
###拷貝啓動腳本至開機啓動目錄/etc/init.d/,並重命名爲mysqld [root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld ###修改配置文件參數 [root@localhost mysql]# vi /etc/init.d/mysqld 具體:basedir=/usr/local/mysql datadir=/data/mysql ###啓動mysql [root@localhost mysql]# /etc/init.d/mysqld start Starting MySQL.Logging to '/data/mysql/centos001.err'. ... SUCCESS! [root@localhost mysql]# ps aux |grep mysql root 30572 0.0 0.1 113260 1644 pts/1 S 20:55 0:00 /bin/sh /usr/local/mysq/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/centos001.pid mysql 30709 1.5 44.5 1300780 449556 pts/1 Sl 20:55 0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/centos001.err --pid-file=/data/mysql/centos001.pid --socket=/tmp/mysql.sock root 30739 0.0 0.0 112676 984 pts/1 R+ 20:58 0:00 grep --color=auto mysql #設置開機啓動 [root@localhost mysql]# chkconfig --add mysqld [root@localhost mysql]# chkconfig mysqld on [root@localhost mysql]# service mysqld stop Shutting down MySQL.. SUCCESS! [root@localhost mysql]# service mysqld start Starting MySQL.. SUCCESS!
1.刪除以前編譯過的php文件,這裏獲得的就至關於剛剛解壓的文件,命令:make clean刪除以前編譯的文件。
[root@localhost ]# cd /usr/local/src/ [root@localhost src]# wget http://cn2.php.net/distributions/php-5.6.30.tar.gz [root@localhost src]#tar zxvf php-5.6.30.tar.gz [root@localhost src]# #建立用戶 [root@localhost src]# useradd -s /sbin/nologin php-fpm [root@localhost src]# cd php-5.6.30 [root@localhost php-5.6.30]# make clean find . -name \*.gcno -o -name \*.gcda | xargs rm -f find . -name \*.lo -o -name \*.o | xargs rm -f find . -name \*.la -o -name \*.a | xargs rm -f find . -name \*.so | xargs rm -f find . -name .libs -a -type d|xargs rm -rf rm -f libphp5.la sapi/cli/php sapi/cgi/php-cgi libphp5.la modules/* libs/* #這些東西一會所有刪掉 [root@localhost php-5.6.30]# ls /usr/local/php #查看該目錄下有沒有php文件 bin etc include lib php
2.編譯
[root@localhost src]# ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
checking for cURL in default path... not found configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
安裝依賴包
[root@localhost php-5.6.30]# yum install libcurl-devel
4.再次編譯後並安裝
[root@localhost php-5.6.30]# make && make install [root@localhost php-5.6.30]# echo $? 0 [root@localhost php-5.6.30]# ls /usr/local/php-fpm/ #查看php-fpm目錄下的文件 bin etc include lib php sbin var [root@localhost php-5.6.30]# ls /usr/local/php/ bin etc include lib php var [root@localhost php-5.6.30]# ls /usr/local/php-fpm/sbin/ php-fpm
5.修改配置文件。要想啓動服務,固然須要先配置服務的啓動文件
#拷貝配置文件並更名 [root@localhost php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini #production適用生產環境 [root@localhost php-5.6.30]# cd /usr/local/php-fpm/etc/ [root@localhost etc]# ls pear.conf php-fpm.conf.default php.ini #修改配置文件 [root@localhostetc]# vim php-fpm.conf.default #配置文件詳細 [global] pid = /usr/local/php-fpm/var/run/php-fpm.pid error_log = /usr/local/php-fpm/var/log/php-fpm.log [www] listen = /tmp/php-fcgi.sock //監聽的地址,這裏還能夠寫主機地址 #listen = 127.0.0.1:9000 #9000是默認值 listen.mode = 666 #定義sock的權限是666 user = php-fpm #定義用戶php-fpm group = php-fpm #定義組 pm = dynamic ##定義啓動者 pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024
[root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t #測試配置文件的語法 #輸出 [10-Jan-2018 23:44:48] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
6.啓動服務
[root@localhost etc]# cd /usr/local/src/php-5.6.30/ #進入源碼包目錄 [root@localhost php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm #拷貝啓動的腳步 [root@localhost php-5.6.30]# chmod 755 /etc/init.d/php-fpm #設置開機啓動 [root@localhost php-5.6.30]# chkconfig --add php-fpm #開啓服務 [root@localhost php-5.6.30]# chkconfig php-fpm on 檢測 [root@localhost php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm -t [23-Jul-2018 15:32:20] NOTICE:configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@localhost php-5.6.30]# service php-fpm start Starting php-fpm [10-Jan-2018 23:04:49] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2) [10-Jan-2018 23:04:49] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf' [10-Jan-2018 23:04:49] ERROR: FPM initialization failed failed
[root@localhost php-fpm]# cd /usr/local/php-fpm/etc/ [root@localhost etc]# ls pear.conf php-fpm.conf.default php.ini #修改文件名字 [root@localhost etc]# mv php-fpm.conf.default php-fpm.conf [root@localhost etc]# ls pear.conf php-fpm.conf php.ini [root@localhost etc]# cd ~ #從新啓動服務 [root@localhost ~]# service php-fpm start Starting php-fpm done #查看進程中有沒有 [root@localhost ~]# ps aux |grep php-fpm root 22388 0.1 0.4 123612 4944 ? Ss 23:10 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf) php-fpm 22389 0.0 0.4 123612 4712 ? S 23:10 0:00 php-fpm: pool www ...... root 22410 0.0 0.0 112676 980 pts/0 R+ 23:11 0:00 grep --color=auto php-fpm [root@localhost ~]#ls -l /tmp/php-fcgi.sock srw-rw-rw- 1 root root 0 6 月 6 15:03 /tmp/php-fcgi.sock #發現權限是咱們設置的666
答:這個php安裝須要mysql的庫,因此編譯時仍是須要指定mysql的安裝路徑的。 你雖然能夠不在本機上運行mysql,但仍是須要安裝的。其實,咱們只須要那個庫文件。
二、這裏的php.ini和php-fpm.conf有什麼區別?
答: php.ini是php的配置文件php-fpm.conf是php-fpm服務的配置文件
三、文件不存在
而後複製cp php.ini-production /usr/local/php-fpm/etc/php.ini
編輯vi php-fpm.conf,而後cd /usr/local/src/php-5.6.30/源碼包,cd /usr/localsrc/php,而後cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm把sapi/fpm/init.d.php-fpm拷貝到/etc/init.d/php-fpm目錄中。
http://blog.csdn.net/hanhuili/article/details/9389571
Nginx("engine x")是一款是由俄羅斯的程序設計師Igor Sysoev所開發高性能的 Web和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。
在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品
圖14.1展現了nginx架構的高層設計。
nginx 進程角色
Nginx在內存中運行多個進程,一個master進程和多個worker進程。同時還有一些特殊用途的進程,例如緩存加載和緩存管理進程。在nginx 1.x版本,全部進程都是單線程的,使用共享內存做爲進程間通訊機制。Master進程使用root用戶權限運行,其餘進程使用非特權用戶權限運行。
master進程負責下列工做:
Nginx緩存簡介
Nginx在文件系統上使用分層數據存儲實現緩存。緩存主鍵可配置,而且可以使用不一樣特定請求參數來控制緩存內容。緩存主鍵和元數據存儲在共享內存段中,緩存加載進程、緩存管理進程和worker進程都能訪問。目前不支持在內存中緩存文件,但能夠用操做系統的虛擬文件系統機制進行優化。每一個緩存的響應存儲到文件系統上的不一樣文件,Nginx配置指令控制存儲的層級(分幾級和命名方式)。若是響應須要緩存到緩存目錄,就從URL的MD5哈希值中獲取緩存的路徑和文件名。
常見問題:
答:yum install -y libmcrypt-devel
php 中使用cURL發送get/post請求,上傳圖片,批處理 : https://mp.weixin.qq.com/s/8luqMEd8xt8oJxFLLCU1XA
PHP編譯安裝時常見錯誤解決辦法,php編譯常見錯誤 : https://www.cnblogs.com/liang-wei/p/6564424.html
PHP內存緩存加速功能memcached安裝與用法 : http://blog.chinaunix.net/uid-25266990-id-2491524.html
VPS小內存LNMP服務器Nginx 502 Bad Gateway故障一分鐘內自動恢復解決辦法 : https://www.osyunwei.com/archives/6439.html
LNMP一鍵安裝包 – 簡單單單配置好linux服務器 : http://blog.51cto.com/xiaogongju/2060977
Nginx爲何比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html apache和nginx工做原理比較 http://www.server110.com/nginx/201402/6543.html mod_php 和 mod_fastcgi以及php-fpm的比較 http://dwz.cn/1lwMSd 概念瞭解:CGI,FastCGI,PHP-CGI與PHP-FPMhttp://www.nowamagic.net/librarys/veda/detail/1319/ https://www.awaimai.com/371.html
在Linux系統上集成項目所需環境(mysql+jdk+tomcat):http://www.zuidaima.com/blog/3822329080056832.htm
使用LNMP架構部署動態網站環境 : https://www.linuxprobe.com/chapter-20.html
LNMP分離式部署實例 薦 : http://blog.51cto.com/liangey/1630038
Linux 服務器即 LNMP 環境搭建(Git倉庫上篇) : https://juejin.im/post/5a7d35625188257a5e5739a6
Ubuntu16.04搭建LNMP : http://blog.51cto.com/xiaogongju/1940542
Ubuntu16.04搭建LAMP : http://blog.51cto.com/xiaogongju/1940541
基於ansible role實現LAMP平臺批量部署 薦 : http://blog.51cto.com/scholar/1660330
LNMP服務器和域名一鍵配置 --- 2018-05-11 : https://www.jianshu.com/p/69acabbf7706
Ubuntu14.04搭建LNMP : http://blog.51cto.com/xiaogongju/1940539
Ubuntu14.04搭建LAMP : http://blog.51cto.com/xiaogongju/1940537
LNMP服務器安裝配置(Rhel+Nginx+PHP+MySQL) : http://blog.51cto.com/ityunwei2017/1733287
項目實戰1—LNMP的搭建、nginx的ssl加密、身份驗證的實現 : http://www.cnblogs.com/along21/p/7822228.html
LNMMP架構實現Web動靜分離 薦 ; http://blog.51cto.com/scholar/1661861
Centos7.2搭建LNMP : http://blog.51cto.com/xiaogongju/1940519
Centos7.2搭建LAMP : http://blog.51cto.com/xiaogongju/1940502
Centos6.5搭建LNMP : http://blog.51cto.com/xiaogongju/1940328
Centos6.5搭建LAMP : http://blog.51cto.com/xiaogongju/1940327
搭建LNMP環境(基於最小化安裝CentOS 6.5) : http://blog.51cto.com/itops/2130205
CentOS 6.5安裝WordPress(基於LNMP) : http://blog.51cto.com/itops/2131735
企業實戰(1)-實現基於LNMP的電子商務網站
從零開始完整搭建LNMP環境+WordPress部署 :http://blog.51cto.com/xpleaf/1903115
基於Centos使用腳本快速部署LNMP環境 : http://blog.51cto.com/leoheng/1955712
CentOS 6.5編譯安裝Nginx+MySQL+PHP : http://blog.51cto.com/ityunwei2017/1745419
Fedora 28 Server 安裝 LNMP 重啓系統後 Web 沒法訪問 : https://www.linuxidc.com/Linux/2018-07/153107.htm
Docker分離環境搭建LNMP並部署Discuz : https://www.linuxidc.com/Linux/2018-07/153107.htm
LNMP Nginx 499 問題 第三方回調異常 : http://blog.51cto.com/qiuyt/2152810
LNMP 502報錯 總結及處理方法 : http://blog.51cto.com/qiuyt/2135100
LNMPA與LNMP服務器性能比較 :https://jingyan.baidu.com/article/7e440953dc2d6e2fc0e2ef3e.html
LNMP一鍵安裝包基礎教程目錄 - 新手從基礎到實踐系列 : https://www.laozuo.org/2665.html