一、LNMP概述
1、什麼是LNMP
LNMP是一個合成詞 = Linux + Nginx + MySQL + PHP LAMP區別就在於Web Server由Apache替換爲Nginx。
2、LNMP之間的關係
LNMP都屬於開源軟件,這也是其比較流行的原因。
Nginx已經被F5公司收購了,負載均衡器 => 最出名的硬件負載均衡F5 Nginx社區版 => 開源免費
Nginx Plus收費版
3、準備LNMP服務器
第一步:克隆LNMP服務器
第二步:更改網卡IP地址與UUID編號
IPADDR = 10.1.1.10
UUID更改編號的最後3位
第三步:設置主機名稱,然後綁定IP地址與主機名稱到/etc/hosts文件
# hostnamectl set-hostname lnmp.itcast.cn # su
# vim /etc/hosts
10.1.1.10 lnmp lnmp.itcast.cn # systemctl restart network
第四步:關閉防火牆與SELinux
# systemctl stop firewalld
# systemctl disable firewalld # setenforce 0
# sed -i '/SELINUX=enforcing/cSELINUX=disabled'
/etc/selinux/config
第五步:關閉NetworkManager服務
# systemctl stop NetworkManager
# systemctl disable NetworkManager
第六步:配置yum源
[aliyun] name=aliyun yum
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/ enabled=1
gpgcheck=0
baseurl=file:///mnt enabled=1
gpgcheck=0
yum
epel-release-latest-7.noarch.rpm
yum.repos.d]# cat server.repo
# rpm -ivh [root@db01 [local]
name=local
第七步:安裝ntpdate,進行時間同步
# mount /dev/sr0 /mnt
# yum install ntpdate -y # ntpdate cn.ntp.org.cn
二、LNMP軟件架構之MySQL
1、MySQL軟件包
mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
說明:通用linux下的二進制包,已編譯好,只需放到相應的安裝目錄裏即可
企業級數據庫部署中,常用的MySQL數據庫一共有兩種安裝方式:GLIBC 安裝與源碼安裝(二選一)
2、使用GLIBC安裝MySQL
默認選項:
套接字文件,負責客戶
mysql安裝目錄
mysql數據目錄
默認安裝路徑:/usr/local/mysql
默認數據目錄:/usr/local/mysql/data 默認端口:3306
默認socket文件存放路徑:/tmp/mysql.sock
端與服務器端進行網絡連接
3、MySQL詳細安裝步驟
上傳MySQL到Linux服務器:
mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
編寫mysql.sh腳本:
# vim mysql.sh #!/bin/bash
tar -zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql useradd -r -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql
cd /usr/local/mysql
yum remove mariadb-libs -y scripts/mysql_install_db --user=mysql
cp support-files/mysql.server /etc/init.d/mysql service mysql start
# 追加/usr/local/mysql/bin目錄到環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >>
/etc/profile source /etc/profile
設置完成後,使用source命令執行mysql.sh腳本
# source mysql.sh
4、MySQL後續配置
第一步:配置MySQL密碼以及安全策略
# mysql_secure_installation
注:在實際運維工作中,MySQL的密碼一定要越複雜越好。第二步:MySQL測試驗證
# mysql -uroot -p Enter password:123
遠程登錄:
# mysql -h 服務器IP地址 -P 端口號 -uroot -p Enter password:123
注:在實際運維工作中,遠程連接賬號儘量不要使用root。應該手工創建一個普通賬號,然後按需分配權限。
5、擴展:mysql.service腳本
CentOS6:service mysql start|restart|stop CentOS7:systemctl start|restart|stop mysql.service
第一步:創建一個mysql.service文件
# vim /usr/lib/systemd/system/mysql.service
第二步:寫入內容
[Unit]
Description=MySQL Server After=network.target After=syslog.target
[Service] User=mysql Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults- file=/usr/local/mysql/my.cnf
LimitNOFILE = 5000
PrivateTmp=false
[Install]
WantedBy=multi-user.target
注:
Unit代表單元,啓動程序需要有單元信息After代表在某些服務啓動後在進行MySQL啓動
Service代表服務,最核心配置
User + Group代表將來以哪個用戶的身份運行此軟件ExecStart代表啓動腳本調用哪個程序(systemctl start mysql.service)
LimitNOFILE代表限制文件大小
PrivateTmp代表是否把MySQL的運行程序放入私有空間,比如pid,socket
文件
Install代表安裝模式,代表把MySQL服務運行在何種模式下
第三步:關閉原有的MySQL,使用systemctl啓動MySQL
# service mysql stop
# systemctl start mysql
擴展:關閉與重啓
# systemctl stop mysql
# systemctl restart mysql
第四步:把mysql.service添加到開機啓動項中
# systemctl enable mysql
擴展:關閉開機啓動項
# systemctl disable mysql
三、LNMP軟件架構之Nginx
1、Nginx概述
Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的http://Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0 發佈於2004年10月4日。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件
(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰 訊、淘寶等。
問題:怎麼判斷一個企業項目架構是否使用了Nginx
# curl -I 域名地址
Server:Nginx
2、Nginx應用場景
- web服務器軟件 httpd(apache)
同類型web服務器軟件:apache nginx(俄羅斯) iis(微軟) lighttpd(德國)
- 提供了IMAP/POP3/SMTP服務
- 充當反向代理服務器,實現負載均衡功能。LB=>Load Blance
3、Nginx特點
① 高可靠:穩定性 master進程 管理調度請求分發到哪一個worker=> worker進程 響應請求 一master多worker
Nginx --------- master進程 ----------------worker worker worker
② 熱部署 :(1)平滑升級 (2)可以快速重載配置 => 不停止業務的情況下實現軟件升級以及重載
③ 高併發:可以同時響應更多的請求 事件 epoll模型 幾萬
④ 響應快:尤其在處理靜態文件上,響應速度很快 sendfile
⑤ 低消耗:cpu和內存 1w個請求 內存2-3MB
⑥ 分佈式支持:反向代理 七層負載均衡,新版本也支持四層負載均衡 =>
把用戶請求進行分流
4、Nginx軟件安裝方式
常見安裝方式:
① yum安裝配置,需使用Nginx官方源或者EPEL源(不推薦 => 版本過低,沒辦法進行定製)
② 源碼編譯(強烈推薦)
5、Nginx編譯安裝
第一步:去Nginx的官網下載Nginx軟件包(1.12.2)
第二步:使用Shell腳本安裝Nginx軟件(配置 => 編譯 => 安裝) 安裝依賴庫:
# mount /dev/sr0 /mnt
# yum -y install pcre-devel zlib-devel openssl-devel
使用nginx.sh安裝Nginx軟件:
# vim nginx.sh #!/bin/bash
tar -zxf nginx-1.12.2.tar.gz cd nginx-1.12.2
useradd -r -s /sbin/nologin www
./configure --prefix=/usr/local/nginx --user=www -- group=www --with-http_ssl_module --with- http_stub_status_module --with-http_realip_module make && make install
注:
--prefix:安裝路徑
--user:以哪個用戶身份安裝初始化
--group:以哪個用戶組身份安裝初始化
--with-*:代表安裝哪些模塊(默認情況下只安裝基本模塊)
6、Nginx目錄介紹
conf:配置文件目錄,Nginx主配置文件nginx.conf。當Nginx啓動時,會自動加載nginx.conf文件
html:項目目錄,項目的源代碼就存放於此目錄下 logs:日誌目錄,error.log錯誤日誌與access.log訪問日誌sbin:二進制文件目錄,Nginx的主程序sbin/nginx
7、使用sbin/nginx -h求幫助
# cd /usr/local/nginx # sbin/nginx -h
-V :顯示Nginx的版本號與配置的選項信息(加載哪些模塊)
-t :在編寫nginx.conf時,非常重要。主要用於語法檢查
-s :發送信號,stop(停止)、quit(優雅的推出)、reopen(重新打開配置文件)、reload(熱重載配置文件)
說明:stop停止與quit優雅推出的區別
stop:代表立即停止所有請求
quit:代表其不會立即停止所有請求,等待所有請求處理完畢後,在進行停止
reopen 與 reload reopen:代表重新打開配置文件
reload:熱重載,就是在不停止業務的前提下,重新加載nginx.conf配置文件
-c :加載配置文件
8、啓動Nginx軟件
# cd /usr/local/nginx
# sbin/nginx -c /usr/local/nginx/conf/nginx.conf # ss -naltp |grep 80
設置完成後,在Windows端打開瀏覽器,使用服務器的IP+80訪問Nginx主頁面
9、擴展nginx.service腳本
第一步:停止原生的nginx
# cd /usr/local/nginx # sbin/nginx -s stop
第二步:創建nginx.service腳本
# vim /usr/lib/systemd/system/nginx.service
第三步:編寫腳本內容
[Unit]
Description=Nginx Web Server After=network.target
[Service] Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c
/usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true
[Install]
WantedBy=multi-user.target
注:
Type=forking,代表後臺運行
第四步:使用nginx.service程序啓動:
# systemctl start nginx
停止:
# systemctl stop nginx
熱重載:
# systemctl reload nginx
開機啓動項:
# systemctl enable nginx
開機不啓動:
# systemctl disable nginx
四、LNMP軟件架構之PHP
1、什麼是PHP
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言,主要應用於Web領域。
PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多
PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。(新特性)
2、PHP-FPM
Apache與PHP 和 Nginx與PHP有何不同:
# httpd.conf => LoadModule => AddType => .php文件
Apache與PHP的之間的關係:PHP是以模塊的形勢加載在Apache的內核中。在解析動態PHP代碼時,其效率較高。LoadModule
Nginx與PHP之間的關係:Nginx與PHP相對而言都是獨立的,只不過在應用過程中,解析動態腳本時,Nginx會自動源代碼發送給PHP-FPM程序。Nginx在處理靜態頁面時,效率較高。
3、PHP-FPM軟件安裝
第一步:安裝依賴庫
# yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel
第二步:編寫配置文件
# tar -zxf php-7.2.12.tar.gz # cd php7.2.12
# ./configure --prefix=/usr/local/php --with-config-file- path=/usr/local/php/etc --enable-fpm --with-fpm-user=www -
-with-fpm-group=www --with-mysqli=mysqlnd --with-pdo- mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with- jpeg-dir --with-png-dir --with-zlib --with-libxml-dir -- enable-xml --disable-rpath --enable-bcmath --enable-shmop
--enable-sysvsem --enable-inline-optimization --with-curl
--enable-mbregex --enable-mbstring --enable-ftp --with-gd
--with-openssl --with-mhash --enable-pcntl --enable- sockets --with-xmlrpc --with-libzip --enable-soap -- without-pear --with-gettext --disable-fileinfo --enable- maintainer-zts
# make && make install
注:
--prefix:安裝目錄
--with-config-file-path:配置文件目錄
--enable-fpm:開啓php-fpm功能
--with-fpm-user:代表以哪個用戶運行php-fpm
--with-fpm-group:代表以哪個用戶組運行php-fpm
--with-mysqli:php-mysqli擴展
--with-pdo-mysql:php-pdo-mysql擴展
--with-*:項目所需的額外的擴展庫(需要運維工程師安裝,但是由程序猿提供文檔)
php7.2:從php5.6開始,php鏈接mysql必須使用mysqli或pdo擴展。
4、PHP-FPM配置文件
使用php-fpm進行管理php服務,有兩個配置文件:
① php.ini #默認php配置文件(/root/php-7.2.12) PHP => redis.so => Redis
② php-fpm.conf #php-fpm相關的配置 (默認已存在)
③ www.conf #php-fpm主配置文件(默認已存在)
# ll /usr/local/php
etc文件夾:專門用於存放php-fpm啓動或運行過程中需要的配置文件
第一步:把php.ini移動到/usr/local/php/etc目錄
# cp /root/php-7.2.12/php.ini-development
/usr/local/php/etc/php.ini
第二步:加載php-fpm.conf主配置文件
# cd /usr/local/php/etc目錄
# cp /usr/local/php/etc/php-fpm.conf.default
/usr/local/php/etc/php-fpm.conf
第三步:加載php-fpm子配置文件www.conf文件
# cp /usr/local/php/etc/php-fpm.d/www.conf.default
/usr/local/php/etc/php-fpm.d/www.conf
PHP-FPM啓動 => php.ini => php-fpm.conf => www.conf文件
5、添加php-fpm啓動項
# 把php-fpm添加到/etc/init.d目錄下
# cp /root/php-7.2.12/sapi/fpm/init.d.php-fpm
/etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm # service php-fpm start
# 查看9000端口的佔用情況(Nginx中的PHP是以獨立進程的方式運行,佔用計算機的9000端口)
# ss -naltp |grep 9000
6、把php的bin目錄添加到環境變量
# echo 'export PATH=$PATH:/usr/local/php/bin' >>
/etc/profile
# source /etc/profile
五、讓Nginx關聯PHP-FPM
1、爲什麼需要關聯
我們在安裝Nginx與PHP時都是獨立安裝的。
Nginx佔用80端口、PHP-FPM佔用計算機的9000端口。
問題:請求過來後,都要先通過80端口的Nginx軟件。那如果是.php爲後綴的動態文件怎麼處理呢?
2、創建php腳本
# cd /usr/local/nginx/html # vim demo.php
<?php
echo 'hello php!';
?>
直接在瀏覽器中,訪問IP地址+demo.php,自動彈出下載
原因分析:正常情況下,Nginx不具備PHP代碼的解析功能。所以遇到PHP 代碼以後,會把其當做未知文件,自動調用下載器進行下載。
3、讓Nginx把.php文件轉發PHP-FPM
Nginx 識別.php代碼,然後轉發 PHP-FPM
所以核心就是更改Nginx的配置文件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;
# 真實域名,localhost代表本機
server_name localhost;
# 項目目錄
root html;
# 任意請求
location / {
# 默認首頁(如果在html目錄發現默認首頁,直接運行)
index index.html index.htm;
}
# 添加PHP文件支持
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
}
# 當訪問遇到錯誤時,返回50x.html頁面給用戶
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx.conf文件,主要由三部分組成:
http {
server {}
server {}
}
一個nginx.conf對應一個http,代表http請求,所以一個頁面只有一個http
一個http可以包含多個server區塊,每個區塊就是一個項目(網站)=> 虛擬主機
配置讓Nginx可以識別.php文件,然後轉發:
設置完成後,一定要重載Nginx
# systemctl reload nginx
重載完成後一定要檢查一下9000端口是否啓用,否則請求過來之後無法進行轉發。