LNMP架構介紹、MySQL安裝 、PHP安裝、Nginx介紹、Nginx安裝
阿新 • • 發佈:2018-12-10
一、LNMP架構介紹
LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站伺服器架構。Nginx中的PHP是以fastcgi的方式結合Nginx的,可以理解為Nginx代理了PHP的fastcgi
LNMP工作模式
- 和LAMP不同的是,LNMP中提供web服務的是Nginx。
- 在LNMP架構中PHP是作為一個獨立的服務存在的,這個服務叫做php-fpm。
- Nginx直接處理靜態請求(支援的併發更高,速度比Apache快),動態請求轉發給php-fpm處理。
二、MySQL安裝
解除安裝MySQL
直接刪除MySQL安裝時的相關檔案。
[[email protected] ~]# rm -rf /usr/local/mysql
[[email protected] ~]# rm -rf /etc/init.d/mysqld
[[email protected] ~]# rm -rf /data/mysql
安裝MySQL
下載、解壓MySQL二進位制免編譯包
cd /usr/local/src wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz tar zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
安裝MySQL二進位制免編譯包
#將解壓出來的目錄移動到/usr/local/目錄下重新命名為mysql mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql #建立mysql使用者 useradd mysql -s /usr/bin/nologin -M #建立存放資料的目錄 mkdir /data/mysql -p #將放資料存放目錄和mysql程式目錄的使用者和組修改為mysql chown -R mysql.mysql /data/mysql /usr/local/mysql #初始化資料庫 cd /usr/local/mysql yum -y install autoconf #需要一個依賴包 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
修改mysql配置檔案
#將下面的命令直到最後一個EOF全部複製,貼上到命令列執行,就會將配置內容寫入/etc/my.cnf檔案
echo >/etc/my.cnf<<EOF
[mysqld]
port = 3306
basedir=/usr/local/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
user=mysql
default-time-zone=system
default-storage-engine=InnoDB
log-error=/var/log/mysqld.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
EOF
接著
#複製mysql啟動指令碼到/etc/init.d/目錄下更名為mysqld
cp support-files/mysql.server /etc/init.d/mysqld
#修改/etc/init.d/mysqld檔案中的basedir
sed -i s'#^basedir=$#basedir=/usr/local/mysql#' /etc/init.d/mysqld
#修改/etc/init.d/mysqld檔案中的datadir
sed -i s'#^datadir=$#datadir=/data/mysql#' /etc/init.d/mysqld
#啟動mysql
/etc/init.d/mysqld start
#將mysqld加入系統管理
chkconfig --add mysqld
#設定開機自啟動
chkconfig --level 35 mysqld on
# 三、php安裝
LAMP安裝PHP有區別,需要開啟php-fpm服務
下載、解壓原始碼包
cd /usr/local/src/
wget http://mirrors.sohu.com/php/php-5.6.30.tar.gz
tar zxf php-5.6.30.tar.gz
編譯安裝PHP
安裝包解除安裝&解壓
cd /usr/local/src/
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
tar zxvf php-5.6.30.tar.gz
先建立賬號
useradd -s /sbin/nologin php-fpm
#該賬號用來執行php-fpm服務,因為在LNMP環境中,PHP是以一種服務的形式獨立存在的
如果之前安裝過PHP,需要清除其原有配置:
cd php-5.6.30
make clean
環境配置
#安裝依賴包
yum -y install gcc libcurl-devel libxml2-devel openssl-devel bzip2-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel
mkdir -p /usr/local/php-fpm/etc
#configure設定安裝引數
cd php-5.6.30
./configure --prefix=/usr/local/php-fpm \ #設定安裝目錄
--with-config-file-path=/usr/local/php-fpm/etc \ #誰定php-fpm配置檔案所在目錄
--enable-fpm \ #開啟php-fpm模式
--with-fpm-user=php-fpm \ #設定php-fpm服務的使用者
--with-fpm-group=php-fpm \ #設定php-fpm服務的使用者組
--with-mysql=/usr/local/mysql \ #設定mysql庫,這種方式基本已經廢棄
--with-mysqli=/usr/local/mysql/bin/mysql_config \ #最新的mysqli連線庫
--with-pdo-mysql=/usr/local/mysql \ #mysqli連線庫
--with-mysql-sock=/tmp/mysql.sock \ #指定mysql.sock檔案路徑
--enable-mysqlnd \
--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
##編譯、安裝
make -j4 && make install
##檢查是否出錯
echo $?
php-fpm相關命令:
執行PHP相關命令的兩種方式:
方法1:
[[email protected] php-fpm]# /usr/local/php-fpm/sbin/php-fpm -m
方法2:
[[email protected] php-fpm]# /usr/local/php-fpm/bin/php -m
php-fpm配置檔案語法檢測:
[[email protected] php-fpm]# /usr/local/php-fpm/sbin/php-fpm -t
配置
新增配置檔案
將配置檔案新增到php-fpm配置檔案目錄:
[[email protected] php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
配置檔案除錯
切換至配置檔案所在目錄:
[[email protected] php-5.6.30]# cd /usr/local/php-fpm/etc/
手動新增配置檔案,寫入如下內容:
[[email protected] etc]# vim php-fpm.conf
[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,本地監聽,也可以監聽其他IP:port
#此處格式會影響配置Nginx和PHP結合時Nginx定址PHP的路徑
listen.mode = 666
#當監聽的為socket檔案時該部分才生效,用於指定.sock檔案的許可權
user = php-fpm
group = php-fpm
#定義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
#以上部分為程序相關資訊
配置啟動指令碼
切換至檔案源目錄:[[email protected] etc]# cd /usr/local/src/php-5.6.30
新增啟動指令碼到系統配置:
[[email protected] php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
更改檔案許可權:
[[email protected] php-5.6.30]# chmod 755 /etc/init.d/php-fpm
新增到系統服務:
[[email protected] php-5.6.30]# chkconfig --add php-fpm
設定開機啟動:
[[email protected] php-5.6.30]# chkconfig php-fpm on
啟動php-fpm服務:
[[email protected] php-5.6.30]# service php-fpm start
Starting php-fpm done
<br/>
四、Nginx介紹
Nginx(“engine x”)是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站使用者有:百度、新浪、網易、騰訊、 淘寶等。
Nginx應用場景:
web伺服器、反向代理、負載均衡
Nginx分支
淘寶基於Nginx開發的Tengine,使用上和Nginx一致,服務名,配置檔名都一樣,和Nginx的最大區別在於Tengine增加了一些定製化模組,在安全限速方面表現突出,另外它支援對js,css合併。
Nginx核心+lua相關的元件和模組組成了一個支援lua的高效能web容器openresty
五、Nginx安裝
下載、解壓原始碼包
cd /usr/local/src
wget http://mirrors.sohu.com/nginx/nginx-1.12.1.tar.gz
tar zxf nginx-1.12.1.tar.gz
配置引數、編譯、安裝
cd nginx-1.12.1
#配置安裝引數,一般只需要指定安裝路徑prefix即可
./configure --prefix=/usr/local/nginx
#編譯、安裝
make -j4 && make install
#檢查是否出錯
echo $?
編輯nginx啟動指令碼
[[email protected] nginx-1.12.2]# vim /etc/init.d/nginx //加入以下內容
#!/bin/bash# chkconfig: - 30 21# description: http service.# Source Function Library
. /etc/init.d/functions# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"start()
{
echo -n $"Starting $prog: "
mkdir -p /dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
return $RETVAL
}stop()
{
echo -n $"Stopping $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -TERM
rm -rf /dev/shm/nginx_temp
RETVAL=$?
echo
return $RETVAL
}reload()
{
echo -n $"Reloading $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -HUP
RETVAL=$?
echo
return $RETVAL
}restart()
{
stop
start
}configtest()
{
$NGINX_SBIN -c $NGINX_CONF -t
return 0
}case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
configtest)
configtest
;;
*)
echo $"Usage: $0 {start|stop|reload|restart|configtest}"
RETVAL=1esacexit $RETVAL
[[email protected] nginx-1.12.2]# chmod 755 /etc/init.d/nginx
[[email protected] nginx-1.12.2]# chkconfig --add nginx //加入系統服務
[[email protected] nginx-1.12.2]# chkconfig nginx on //開機啟動
修改nginx配置檔案
[[email protected] nginx-1.12.2]# > /usr/local/nginx/conf/nginx.conf //重定向符號>,單獨使用時,可以吧一個文字文件快速清空
[[email protected] nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf //寫入以下內容
user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 6000;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
' $host "$request_uri" $status'
' "$http_referer" "$http_user_agent"';
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
}
}
}
[[email protected] nginx-1.12.2]# service nginx start //啟動nginx
[[email protected] nginx-1.12.2]# ps aux |grep nginx
root 14119 0.0 0.0 20500 628 ? Ss 14:54 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 14120 0.0 0.1 22944 3212 ? S 14:54 0:00 nginx: worker process
nobody 14121 0.0 0.1 22944 3212 ? S 14:54 0:00 nginx: worker process
root 14123 0.0 0.0 112680 968 pts/0 R+ 14:54 0:00 grep --color=auto nginx
啟動nginx
#檢查配置檔案是否有錯誤
/usr/local/nginx/sbin/nginx -t
#啟動nginx服務
/etc/init.d/nginx start
#檢查80埠是否開始監聽
netstat -lntp |grep 80
#防火牆允許80埠訪問
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
測試是否正確解析PHP
[[email protected] ~]# vim /usr/local/nginx/html/test.php //寫入以下內容
<?php
echo "This is a test php page!";?>
[[email protected] ~]# curl localhost/test.php
This is a test php page![[email protected] ~]# //出現這個說明解析正常