12.1 LNMP架构介绍
和LAMP不同的是,提供web服务的是Nginx
并且php是作为一个独立服务存在的,这个服务叫做php-fpm
Nginx直接处理静态请求,动态请求会转发给php-fpm
用户并发支持很大,可以上好几万,Apache做不到
12.2 MySQL安装
1、进到 /usr/local/src 下,下载二进制免编译包,并解压
[root@arslinux-01 ~]# cd /usr/local/src/ [root@arslinux-01 src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz [root@arslinux-01 src]# tar xvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
2、移动解压出的目录到 /usr/local/ 下,并改名为 mysql,进入到目录下
[root@arslinux-01 src]# mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql [root@arslinux-01 src]# cd /usr/local/mysql/
3、创建用户 mysql,创建数据存放目录 /data/
[root@arslinux-01 mysql]# useradd mysql [root@arslinux-01 mysql]# mkdir /data/
4、安装 perl-Data-Dumper.x86_64 包后,进行初始化
[root@arslinux-01 mysql]# yum install -y perl-Data-Dumper.x86_64 [root@arslinux-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/
5、拷贝配置模板到 /etc/ 下并改名为 my.cnf
[root@arslinux-01 mysql]# cp support-files/my-default.cnf /etc/my.cnf
6、编辑配置文件 my.cnf
[root@arslinux-01 mysql]# vim /etc/my.cnf basedir = /usr/local/mysql datadir = /data/mysql socket = /tmp/mysql.sock
7、拷贝启动程序到 /etc/init.d/ 下,并改名为 mysqld
[root@arslinux-01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
8、安装完成,启动 mysqld
[root@arslinux-01 mysql]# /etc/init.d/mysqld start Starting MySQL.Logging to '/data/mysql/arslinux-01.err'. SUCCESS! [root@arslinux-01 mysql]# ps aux|grep mysqld root 10829 0.2 0.1 113308 1632 pts/1 S 21:55 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/arslinux-01.pid mysql 10979 7.4 45.2 1302740 450800 pts/1 Sl 21:55 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=arslinux-01.err --pid-file=/data/mysql/arslinux-01.pid --socket=/tmp/mysql.sock root 11003 0.0 0.0 112724 988 pts/1 R+ 21:55 0:00 grep --color=auto mysqld [root@arslinux-01 mysql]# netstat -lntp 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 7446/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7575/master tcp6 0 0 :::3306 :::* LISTEN 10979/mysqld tcp6 0 0 :::22 :::* LISTEN 7446/sshd tcp6 0 0 ::1:25 :::* LISTEN 7575/master
9、将 mysql 加入 chkconfig 服务,并加入开机启动
[root@arslinux-01 mysql]# chkconfig --add mysqld [root@arslinux-01 mysql]# chkconfig --list 注:该输出结果只显示 SysV 服务,并不包含 原生 systemd 服务。SysV 配置数据 可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。 123 0:关1:关2:开3:开4:开5:开6:关 mysqld 0:关1:关2:开3:开4:开5:开6:关 netconsole 0:关1:关2:关3:关4:关5:关6:关 network 0:关1:关2:开3:开4:开5:开6:关 [root@arslinux-01 mysql]# chkconfig mysqld on [root@arslinux-01 mysql]# service mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS!
12.3/12.4 PHP安装
LNMP下的PHP安装和LAMP下PHP安装有差别,需要开启php-fpm服务
如果之前编译过php,那么进到源码包中,用make clean清除之前make过的文件
1、移动到 /usr/local/src 下,下载php源码包,并解压
[root@arslinux-01 mysql]# cd /usr/local/src/ [root@arslinux-01 src]# wget http://cn2.php.net/distributions/php-5.6.39.tar.bz2 [root@arslinux-01 src]# tar xvf php-5.6.39.tar.bz2
2、创建用户 php-fpm,并指定家目录为 /sbin/nologin
[root@arslinux-01 src]# useradd -s /sbin/nologin php-fpm
3、进到 php 包目录下,编译
[root@arslinux-01 src]# cd php-5.6.39/ [root@arslinux-01 php-5.6.39]# ./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
4、make && make install
[root@arslinux-01 php-5.6.39]# make && make install
5、/usr/local/php-fpm/sbin/php-fpm -m 查看模块
6、/usr/local/php-fpm/sbin/php-fpm -i 查看信息
7、/usr/local/php-fpm/sbin/php-fpm -t 语法检测
8、拷贝配置文件模板到 /usr/local/php-fpm/etc/ 并改名为 php.ini
[root@arslinux-01 php-5.6.39]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
9、编辑配置文件 php-fpm.conf
[root@arslinux-01 php-5.6.39]# cd /usr/local/php-fpm/etc [root@arslinux-01 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.mode = 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
10、拷贝启动脚本,更改权限
[root@arslinux-01 etc]# cp /usr/local/src/php-5.6.39/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@arslinux-01 etc]# chmod 755 /etc/init.d/php-fpm
11、加入到服务列表
[root@arslinux-01 etc]# chkconfig --add php-fpm [root@arslinux-01 etc]# chkconfig --list 注:该输出结果只显示 SysV 服务,并不包含 原生 systemd 服务。SysV 配置数据 可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。 查看在具体 target 启用的服务请执行 'systemctl list-dependencies [target]'。 123 0:关1:关2:开3:开4:开5:开6:关 mysqld 0:关1:关2:开3:开4:开5:开6:关 netconsole 0:关1:关2:关3:关4:关5:关6:关 network 0:关1:关2:开3:开4:开5:开6:关 php-fpm 0:关1:关2:开3:开4:开5:开6:关
12、启动 php-fpm 服务
[root@arslinux-01 etc]# service php-fpm start Starting php-fpm done [root@arslinux-01 etc]# ps aux |grep php-fpm root 33424 0.5 0.4 125924 4964 ? Ss 23:34 0:00 php-fpm: master process (/usr/local/php-fpm/etcphp-fpm.conf) php-fpm 33425 0.0 0.4 125924 4724 ? S 23:34 0:00 php-fpm: pool www php-fpm 33426 0.0 0.4 125924 4724 ? S 23:34 0:00 php-fpm: pool www php-fpm 33427 0.0 0.4 125924 4724 ? S 23:34 0:00 php-fpm: pool www php-fpm 33428 0.0 0.4 125924 4724 ? S 23:34 0:00 php-fpm: pool www php-fpm 33429 0.0 0.4 125924 4728 ? S 23:34 0:00 php-fpm: pool www php-fpm 33430 0.0 0.4 125924 4728 ? S 23:34 0:00 php-fpm: pool www php-fpm 33431 0.0 0.4 125924 4728 ? S 23:34 0:00 php-fpm: pool www php-fpm 33432 0.0 0.4 125924 4728 ? S 23:34 0:00 php-fpm: pool www php-fpm 33433 0.0 0.4 125924 4728 ? S 23:34 0:00 php-fpm: pool www php-fpm 33434 0.0 0.4 125924 4728 ? S 23:34 0:00 php-fpm: pool www php-fpm 33435 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33436 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33437 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33438 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33439 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33440 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33441 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33442 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33443 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www php-fpm 33444 0.0 0.4 125924 4732 ? S 23:34 0:00 php-fpm: pool www root 33446 0.0 0.0 112724 988 pts/1 R+ 23:34 0:00 grep --color=auto php-fpm
(listen也可以为 127.0.0.1:9000,监听内部网络,listen.mode = 666 定义 /tmp/php-fcgi.sock 的权限为 666)
问题汇总:
1、xml2-config not found.
需要安装 libxml2 和 libxml2-devel
2、少cURL
安装 libcurl-devel
3、少OpenSSL's <evp.h>
安装 openssl、openssl-devel
4、jpeglib.h not found.
安装 libjpeg-devel
5、png.h not found.
安装 libpng-devel
6、freetype-config not found.
安装 freetype-devel
7、mcrypt.h not found.
安装 libmcrypt-devel
资料:CentOS下编译php时的一些典型错误及解决办法:http://yanue.net/post-127.html
12.5 Nginx介绍
Nginx官网 nginx.org
Nginx应用场景:web服务、反向代理、负载均衡
Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制化模块,在安全限速方面表现突出,另外它支持对js,css合并
Nginx核心+lua相关的组件和模块组成了一个支持lua的高性能web容器openresty
Nginx 静态文件处理能力比 Apache 强很多
参考http://jinnianshilongnian.iteye.com/blog/2280928
12.6 Nginx安装
1、下载 nginx 源码包,并解压缩
[root@arslinux-01 ~]# cd /usr/local/src/ [root@arslinux-01 src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz [root@arslinux-01 src]# tar xvf nginx-1.14.2.tar.gz [root@arslinux-01 src]# cd nginx-1.14.2/
2、编译、安装
[root@arslinux-01 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx [root@arslinux-01 nginx-1.14.2]# make && make install
3、编辑启动脚本,并更改 755 权限
[root@arslinux-01 nginx-1.14.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=1 esac exit $RETVAL
[root@arslinux-01 nginx-1.14.2]# chmod 755 /etc/init.d/nginx
4、Nginx 支持配置文件语法检测
[root@arslinux-01 nginx-1.14.2]# /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
5、加入服务列表,设置开机启动
[root@arslinux-01 nginx-1.14.2]# chkconfig --add nginx [root@arslinux-01 nginx-1.14.2]# chkconfig nginx on
6、编辑配置文件
[root@arslinux-01 nginx-1.14.2]# cd /usr/local/nginx/conf/ [root@arslinux-01 conf]# mv nginx.conf nginx.conf.bak [root@arslinux-01 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; } } }
7、启动服务
[root@arslinux-01 conf]# /etc/init.d/nginx start Starting nginx (via systemctl): [ 确定 ] [root@arslinux-01 conf]# netstat -lntp 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 10654/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7449/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7776/master tcp6 0 0 :::3306 :::* LISTEN 7690/mysqld tcp6 0 0 :::22 :::* LISTEN 7449/sshd tcp6 0 0 ::1:25 :::* LISTEN 7776/master [root@arslinux-01 conf]# ps aux|grep nginx root 10654 0.0 0.0 20548 624 ? Ss 21:18 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 10655 0.0 0.3 22992 3208 ? S 21:18 0:00 nginx: worker process nobody 10656 0.0 0.3 22992 3208 ? S 21:18 0:00 nginx: worker process root 10666 0.0 0.0 112724 988 pts/0 S+ 21:24 0:00 grep --color=auto nginx
上方有两个子进程 worker process,由配置文件中的worker_processes定义的
user 定义上传等操作完成的用户
worker_processes 定义子进程的数量
error_log 错误日志
pid pid号
worker_rlimit_nofile 指定nginx最多打开多少文件
use epoll 使用epoll模式
worker_connections 进程最大的连接数
fastcgi_pass 如果监听端口是9000,可以写为127.0.0.1:9000这是两种不同方式
[root@arslinux-01 conf]# curl localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href=" <p><em>Thank you for using nginx.</em></p> </body> </html>
上方欢迎语由/usr/local/nginx/html/index.html,而为什么能访问到index.html由nginx.conf定义
解析 php
[root@arslinux-01 conf]# vim /usr/local/nginx/html/1.php <?php echo "This is nginx test page!"; [root@arslinux-01 conf]# curl localhost/1.php This is nginx test page![root@arslinux-01 conf]#
扩展
Nginx为什么比Apache Httpd高效:
原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html
https://www.zhihu.com/question/64727674
apache和nginx工作原理比较 http://www.server110.com/nginx/201402/6543.html
概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM https://www.awaimai.com/371.html
转载于:https://blog.51cto.com/11530642/2394637