1. 程式人生 > >第二十課預習任務

第二十課預習任務

12.1 LNMP架構介紹 12.2 MySQL安裝 12.3/12.4 PHP安裝 12.5 Nginx介紹 12.6 Nginx安裝

1.LNMP架構介紹

LNMP(Linux-Nginx-MySQL-PHP)網站架構是目前國際流行的Web框架,該框架包括:Linux作業系統,Nginx網路伺服器,MySQL資料庫,PHP程式語言,所有組成產品均是免費開源軟體,這四種軟體組合到一起,成為一個免費、高效的網站服務系統。

2.MySQL安裝

2.1 這裡我們還是來安裝MySQL-5.6,先下載並解壓到指定目錄

//這個下載目錄可以到http://r.aminglinux.com這裡去下載
[
[email protected]
src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz [[email protected] src]# tar xzvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz

2.2 建立使用者並建立資料目錄

//增加mysql使用者
[[email protected] mysql]# adduser mysql
//建立資料目錄
[[email protected]
mysql]# mkdir /data

2.3初始化mysql,拷貝配置檔案和啟動檔案到指定目錄

//初始化mysql
[[email protected] mysql]# ./scripts/mysql_install_db  --user=mysql --datatdir=/data/mysql
Installing MySQL system tables...2018-09-09 15:46:08 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-09-09 15:46:08 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2018-09-09 15:46:08 0 [Note] ./bin/mysqld (mysqld 5.6.39) starting as process 15699 ...
2018-09-09 15:46:08 15699 [Note] InnoDB: Using atomics to ref count buffer pool pages
2018-09-09 15:46:08 15699 [Note] InnoDB: The InnoDB memory heap is disabled
2018-09-09 15:46:08 15699 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-09-09 15:46:08 15699 [Note] InnoDB: Memory barrier is not used
2018-09-09 15:46:08 15699 [Note] InnoDB: Compressed tables use zlib 1.2.3
2018-09-09 15:46:08 15699 [Note] InnoDB: Using Linux native AIO
......................................................................
2018-09-09 15:46:14 15699 [Note] Binlog end
2018-09-09 15:46:14 15699 [Note] InnoDB: FTS optimize thread exiting.
2018-09-09 15:46:14 15699 [Note] InnoDB: Starting shutdown...
2018-09-09 15:46:16 15699 [Note] InnoDB: Shutdown completed; log sequence number 1600607
2018-09-09 15:46:16 15699 [Note] ./bin/mysqld: Shutdown complete

[
[email protected]
mysql]# cp support-files/my-default.cnf /etc/my.cnf [[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysqld [[email protected] mysql]# chmod 755 /etc/init.d/mysqld

2.4 編輯配置檔案datadir,設定開機啟動mysqld

[[email protected] mysql]# vi /etc/init.d/mysqld
# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files.

basedir=/usr/local/mysql
datadir=/data/mysql

[[email protected] mysql]# chkconfig --add mysqld
[[email protected] mysql]# chkconfig mysqld on

2.5 測試mysqld是否配置成功,啟動並在程序和埠號中檢視

啟動mysqld
[[email protected] mysql]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS! 

//檢視程序
[[email protected] mysql]# ps aux|grep mysqld
root      16929  0.0  0.1 113304  1616 pts/1    S    16:05   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
mysql     17103  1.6 45.0 1302728 449780 pts/1  Sl   16:05   0:00 /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/error.log --pid-file=/data/mysql/mysql.pid --socket=/tmp/mysql.sock
root      17127  0.0  0.0 112704   960 pts/1    S+   16:05   0:00 grep --color=auto mysqld

//檢視監聽埠為3306
[[email protected] mysql]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      810/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      898/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      17103/mysqld 

3.PHP安裝

3.1 我們先把要安裝 的Php下載到/usr/local/src目錄下,並解壓出來


[[email protected] src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2
[[email protected] src]# ls
apr-1.6.3.tar.gz       httpd-2.4.34         mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz  php-5.6.32.tar.bz2      php-5.6.32

3.2建立一個php使用者

[[email protected] src]# adduser php-fpm

3.3進入Php目錄編譯安裝

//編譯安裝Php
[[email protected] php-5.6.32]# ./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

//--prefix 指定路徑
//--with-config-file-path 指定配置檔案所在路徑
//--enable-fpm 要加上這個,如果不加就不會有php-fpm執行檔案生成,更不能啟動php-fpm服務。
//--with-fpm-user=php-fpm --with-fpm-group 指定使用者和組
//--with-mysql 指定mysql路徑,後面的mysqli,pdo-mysql,mysql-sock也一樣

[[email protected] php-5.6.32]# make &&make install
Installing PEAR environment:      /usr/local/php-fpm/lib/php/
[PEAR] Archive_Tar    - installed: 1.4.3
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.4.2
[PEAR] PEAR           - installed: 1.10.5
Wrote PEAR system config file at: /usr/local/php-fpm/etc/pear.conf
You may want to add: /usr/local/php-fpm/lib/php to your php.ini include_path
/usr/local/src/php-5.6.32/build/shtool install -c ext/phar/phar.phar /usr/local/php-fpm/bin
ln -s -f phar.phar /usr/local/php-fpm/bin/phar
Installing PDO headers:           /usr/local/php-fpm/include/php/ext/pdo/
[[email protected] php-5.6.32]# echo $?
0

3.4 拷貝配置檔案,並配置它

[[email protected] php-5.6.32]# cp php.ini-production /usr/local/php-fpm/etc/php.ini

[[email protected] php-5.6.32]# vim /usr/local/php-fpm/etc/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 //內部監聽,一般PHP和Nginx在一臺機器上
listen.mode = 666 //監聽的是sock的這行才會生效,用來定義sock檔案的許可權是666
user = 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
//拷貝自啟動檔案
[[email protected] php-5.6.32]# cp sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm

3.5 測試php,將php加入開機啟動

[[email protected] php-5.6.32]# cp sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm
[[email protected] php-5.6.32]# chmod 755 /etc/init.d/php-fpm 
//將php加入啟動服務中
[[email protected] php-5.6.32]# chkconfig --add php-fpm
[[email protected] php-5.6.32]# chkconfig php-fpm on
//啟動php
[[email protected] php-5.6.32]# /etc/init.d/php-fpm start
Starting php-fpm  done
//檢視程序中是否php-fpm
[[email protected] php-5.6.32]# ps aux |grep php-fpm
root      42690  0.1  0.4 227272  4912 ?        Ss   18:43   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   42691  0.0  0.4 227272  4708 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42692  0.0  0.4 227272  4708 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42693  0.0  0.4 227272  4708 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42694  0.0  0.4 227272  4708 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42695  0.0  0.4 227272  4712 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42696  0.0  0.4 227272  4712 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42697  0.0  0.4 227272  4712 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42698  0.0  0.4 227272  4712 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42699  0.0  0.4 227272  4712 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42700  0.0  0.4 227272  4712 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42701  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42702  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42703  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42704  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42705  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42706  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42707  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42708  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42709  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
php-fpm   42710  0.0  0.4 227272  4716 ?        S    18:43   0:00 php-fpm: pool www
root      42713  0.0  0.0 112708   960 pts/1    S+   18:44   0:00 grep --color=auto php-fpm

4.Nginx介紹

4.1Nginx概述:很多人對apache非常熟悉,Nginx與Apache類似,屬於WEB容器,同時也是一款高效能的HTTP和反向代理軟體,它們之間最大的差別是Apache的處理速              度很慢,而且佔用很多記憶體資源,而Nginx卻恰恰相反,在功能實現上,Apache的所有模組都是支援動靜態編譯,而Nginx模組都是靜態編譯的,同時Apache對 Fcgi的支援不好,而Nginx對Fcgi支援非常好,在處理連線方式上,Nginx支援epoll,而Apache卻不支援,Nginx安裝包只有幾百K,而Apache絕對是個龐然大         物;   

4.2Nginx其優勢如下:

  • 作為WEB伺服器, Nginx處理靜態檔案、索引檔案,自動索引的效率非常高;
  • 作為代理伺服器,Nginx可以實現無快取的反向代理加速,提高網站執行速度;
  • 作為負載均衡伺服器、Nginx可以在內部直接支援Redis和PHP,可以支援HTTP代理伺服器對外進行服務,同時還支援簡單的容錯和利用演算法進行負載;
  • 在效能方面,Nginx是專門為效能優化開發的,採用Poll模型,最大支援5萬併發連線,而且佔用很少一部分記憶體資源;
  • 在穩定方面採取了分階資源分配技術,使CPU佔用資源非常的低,官方表示Nginx保持1萬個沒有活動的連結,只佔用2.5M的記憶體,DDOS攻擊對Nginx來說基本上無效;
  • 在高可用性方面,Nginx支援熱部署,啟動速度特別迅速,因此可以不間斷服務情況下,對軟體版本或者配置升級,即使執行數月也無需啟動,幾乎可以做到7*24小時不間斷執行;

4.3Nginx應用

作為Web伺服器來說,相比 Apache,Nginx 使用更少的資源,支援更多的併發連線,Nginx處理靜態檔案、索引檔案,自動索引的效率非常高,體現更高的效率。

  • 作為代理伺服器,Nginx可以實現無快取的反向代理加速,提高網站的執行速度。
  • 作為負載均衡伺服器,Nginx既可以在內部直接支援Rails和PHP,也可以支援HTTP代理伺服器對外進行服務,同時還支援簡單的容錯和利用演算法進行負載均衡;Nginx 用 C 編寫, 不論是系統資源開銷還是 CPU 使用效率都比 Perlbal 要好的多。
  • 作為郵件代理伺服器來說, Nginx是一個非常優秀的郵件代理伺服器(最早開發這個產品的目的之一也是作為郵件代理伺服器)。

5.Nginx安裝

5.1 首先還是我們需要安裝的Nginx版本下到我們的軟體安裝目錄下並解壓出來,下載目錄還是到

[[email protected] nginx-1.8.0]# wget http://nginx.org/download/nginx-1.8.0.tar.gz

[[email protected] src]# ls
apr-1.6.3.tar.gz       httpd-2.4.34         mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz  nginx-1.8.0.tar.gz  php-5.6.32.tar.bz2
apr-util-1.6.1.tar.gz  httpd-2.4.34.tar.gz  nginx-1.8.0                                 php-5.6.32

5.2  編譯安裝nginx

[[email protected] nginx-1.8.0]# ./configure --prefix=/usr/local/nginx
checking for OS
 + Linux 3.10.0-862.el7.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for unistd.h ... found
...............................
[[email protected] nginx-1.8.0]# make &&make install
make -f objs/Makefile
make[1]: Entering directory `/usr/local/src/nginx-1.8.0'
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/nginx.o \
	src/core/nginx.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_log.o \
	src/core/ngx_log.c
...........................................

5.3編輯寫入啟動檔案

[[email protected] nginx-1.8.0]# 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=1
esac
exit $RETVAL

5.4 更改啟動檔案許可權,將nginx加入自啟動服務

[[email protected] nginx-1.8.0]# chmod 755 /etc/init.d/nginx 
[[email protected] nginx-1.8.0]# chkconfig --add nginx
[[email protected] nginx-1.8.0]# chkconfig nginx on

5.5 重新寫入配置檔案

[[email protected] nginx]# cd conf
[[email protected] conf]# ls
fastcgi.conf          fastcgi_params          koi-utf  mime.types          nginx.conf          scgi_params          uwsgi_params          win-utf
fastcgi.conf.default  fastcgi_params.default  koi-win  mime.types.default  nginx.conf.default  scgi_params.default  uwsgi_params.default
[[email protected] conf]# mv nginx.conf nginx.conf.bak
[[email protected] conf]# vim 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;
        }    
    }
}

5.6 檢查配置,並啟動nginx

//檢查語法沒有問題
[[email protected] conf]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

//啟動nginx並檢視埠號可以看到80埠啟動是nginx服務
[[email protected] conf]# /etc/init.d/nginx start
Starting nginx (via systemctl):                            [  OK  ]
[[email protected] conf]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      45128/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      810/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      898/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      17103/mysqld        
tcp6       0      0 :::22                   :::*                    LISTEN      810/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      898/master          
udp        0      0 127.0.0.1:323           0.0.0.0:*                           547/chronyd         
udp6       0      0 ::1:323                 :::*                                547/chronyd