LNMP = Linux + Ningx + Mysql + PHPjavascript
由Nginx取代apache,提供web服务;php
PHP做为一个独立服务存在而非apache的一个模块,这个服务为php-fpm;css
Nginx直接处理静态请求,动态请求会转发给php-fpm。html
Nginx在处理静态文件的速率较Apache要快的多,这时二者的底层设计所决定的。同时Nginx能够处理的并发访问量也较Apache要大的多,毕竟Apache建立之初并无考虑到当今的高并发访问量的规模会如此之大。Apache采用的是多进程的方式,对内存的要求会较高,并且有限制;Nginx采用多线程的方式,在内存消耗方面要比Apache好的多。java
Mysql安装的方法与LAMP架构中一致node
可能缺乏的软件包:mysql
[root@localhost src]# yum install -y perl-Data-Dumper libaio-devel
具体操做以下:linux
[root@localhost src]# tar zxf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz [root@localhost src]# mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql
[root@localhost src]# cd /usr/local/mysql/ [root@localhost mysql]# useradd mysql [root@localhost mysql]# mkdir /data
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
[root@localhost mysql]# cp support-files/my-default.cnf /etc/my.cnf [root@localhost mysql]# vi /etc/my.cnf "修改[mysqld]内的2行便可 basedir = /usr/local/mysql datadir = /data/mysql 保存退出"
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld [root@localhost mysql]# vi /etc/init.d/mysqld "一样要修改一下参数 basedir=/usr/local/mysql datadir=/data/mysql"
[root@localhost mysql]# chmod 755 /etc/init.d/mysqld [root@localhost mysql]# chkconfig --add mysqld [root@localhost mysql]# service mysqld start
本人安装过程当中报的一个错(读安装过程报错十分重要)nginx
... ./bin/mysqld: Can't create/write to file '/tmp/iboFQUc3' (Errcode: 30 - Read-only file system) ...
发现是我以前在tmp下挂载了磁盘镜像,mysql_install_db脚本对/tmp目录又有写权限致使的错误。执行umount /tmp
后,脚本运行正常。c++
PHP的安装的部分参数较LAMP不一样
[root@localhost src]# tar zxvf php-5.6.30.tar.gz [root@localhost src]# cd php-5.6.30
[root@localhost src]# useradd -M -s /sbin/nologin php-fpm
[root@localhost php-5.6.30]# yum install -y epel-release [root@localhost php-5.6.30]# yum install -y gcc gcc-c++ libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel
[root@localhost php-5.6.30]# ./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 [root@localhost php-5.6.30]# make && make install
php7版本已经取消--with-mysql参数,编译安装时该参数不写,写了会报错
[root@localhost php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini [root@localhost php-5.6.30]# cd /usr/local/php-fpm/etc [root@localhost etc]# vi php-fpm.conf [root@localhost etc]# cat 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 # 监听socket #listen = 127.0.0.1:9000 listen.mode = 666 # 监听是socket才会生效 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
# 启动脚本模板文件在/usr/local/src/php-5.6.30/sapi/fpm/init.d.php-fpm [root@localhost etc]# cd /usr/local/src/php-5.6.30 [root@localhost php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@localhost php-5.6.30]# chmod 755 /etc/init.d/php-fpm [root@localhost php-5.6.30]# chkconfig --add php-fpm [root@localhost php-5.6.30]# chkconfig --level 345 php-fpm on
[root@localhost php-5.6.30]# service php-fpm start Starting php-fpm done
相对于LAMP中php安装目录,LNMP安装的php多了一些文件、目录
[root@localhost php-5.6.30]# ls /usr/local/php-fpm/ bin etc include lib php sbin var [root@localhost php-5.6.30]# ls /usr/local/php-fpm/var/ log run # sbin目录下是php-fpm启动脚本 [root@localhost php-5.6.30]# ls /usr/local/php-fpm/sbin/ php-fpm
[root@localhost php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm -i | grep -i configure [19-Dec-2017 22:10:30] NOTICE: PHP message: PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0 Configure Command => './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'
[root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -m [PHP Modules] cgi-fcgi Core ctype curl date dom ereg exif fileinfo filter ...
[root@localhost ~]# /usr/local/php-fpm/sbin/php-fpm -t [02-Jan-2018 21:43:03] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
yum install -y libxml2-devel
yum install -y openssl-devel
yum install -y libcurl-devel
yum install -y libjpeg-devel
yum install -y libpng-devel
yum install -y freetype-devel
yum install -y epel-release yum install -y libmcrypt-devel
官网 nginx.org,由俄罗斯程序员开发的一种web服务器,小巧而强大。Ningx在处理静态文件方便较apache更好,被更多国内外网站也采用。Ningx能够经过外接模块来扩展功能,这点与apache同样。
Ningx不只能够应用于web服务,一样能够用于反向代理服务以及负载均衡。
Nginx是一个开源的软件,淘宝基于其开发的Tengine,在使用上与其一致,其内的服务名、配置文件等都一致,不一样的是它添加了一些定制化的模块,在安全限速方面的表现很好,另外还支持对js、css合并功能。
openresty:一个由Nginx核心+lua相关组件和模块组成的支持lua的高性能web容器。
当前最新稳定版:http://nginx.org/download/nginx-1.12.2.tar.gz
[root@localhost ~]# cd /usr/local/src [root@localhost src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz --... 22:22:26-- http://nginx.org/download/nginx-1.12.2.tar.gz 正在解析主机 nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2606:7100:1:69::3f, ... 正在链接 nginx.org (nginx.org)|206.251.255.63|:80... 已链接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:981687 (959K) [application/octet-stream] 正在保存至: “nginx-1.12.2.tar.gz” 100%[============================>] 981,687 74.1KB/s 用时 9.3s ... 22:22:36 (103 KB/s) - 已保存 “nginx-1.12.2.tar.gz” [981687/981687]) [root@localhost src]# tar zxf nginx-1.12.2.tar.gz
[root@localhost src]# cd nginx-1.12.2 [root@localhost nginx-1.12.2]# ./configure --prefix=/usr/local/nginx [root@localhost src]# make && make install
[root@localhost 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=1 esac exit $RETVAL
[root@localhost nginx-1.12.2]# chmod 755 /etc/init.d/nginx [root@localhost nginx-1.12.2]# chkconfig --add nginx [root@localhost nginx-1.12.2]# chkconfig nginx on # 若是没法直接使用nginx命令,则表示/etc/init.d不在PATH变量内,能够经过修改/etc/profile来添加
[root@localhost nginx-1.12.2]# mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak [root@localhost 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; } } }
[root@localhost nginx-1.12.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
[root@localhost nginx-1.12.2]# /etc/init.d/nginx start
[root@localhost ~]# /etc/init.d/nginx start Starting nginx (via systemctl): [ 肯定 ] [root@localhost ~]# ps aux | grep nginx root 1302 0.0 0.0 20500 628 ? Ss 21:40 0:00nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 1307 0.0 0.2 22944 3464 ? S 21:40 0:00nginx: worker process nobody 1308 0.0 0.2 22944 3212 ? S 21:40 0:00nginx: worker process root 2386 0.0 0.0 112680 976 pts/0 R+ 21:42 0:00 grep --color=auto nginx
在配置自定义启动脚本以前若是使用PREFIX/sbin/nginx启动了脚本,那么可能出现以下错误:
[root@localhost nginx-1.12.2]# nginx start Starting nginx (via systemctl): Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. [失败]
解决方法是使用PREFIX/sbin/nginx -s stop
先关闭nginx进程,而后使用自定义脚本启动便可。