1. 程式人生 > >LNMP架構介紹、MySQL安裝 、PHP安裝、Nginx介紹、Nginx安裝

LNMP架構介紹、MySQL安裝 、PHP安裝、Nginx介紹、Nginx安裝

一、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] ~]#       //出現這個說明解析正常

擴充套件: