本人租用了阿里云主机,打算配置LA(T)MP环境(运行java接口),配置LNMP(运行PHP接口),Nginx作为代理服务器,对静态资源请求,代理转发,并配置nginx+php-fpm负载均衡来处理动态请求。
前言
php+apache 和 php+nginx的区别
Nginx+PHP与Apache+PHP性能对比
无论是静态还是动态内容,Apache都可以处理,Apache具有内置的解析和执行各种动态脚本语言(包括PHP,Python和Perl)的功能,无需借助外部处理器。动态内容处理恐怕是Nginx的痛点。Nginx处理动态内容的效率并不高,且需借助外部的处理器。
FPM 是一个 PHP 进程管理, 安装PHP前要明白nginx和PHP之间的通信方式是fastcgi,nginx中不能直接运行php文件,只能通过调用外部CGI处理器运行php文件,例如php-fpm。而php-fpm提供了对fastcgi进程管理的工具,安装php时要编译安装php-fpm.
选择web服务器nginx理由
本来是想配置apche+tomcat+nginx的,但是最终还是选择了nginx+fpm, 放弃apche, 主要考虑以下几点:(如果以后有需求再用nginx反代apche.)
Nginx+PHP-FPM实现了动静分离,负载均衡,故障转移,在高并发场景确实要比Apache有优势.
内置PHP模块的Apache进程在处理PHP时就无法处理静态资源,而Nginx则不需要担心这个问题,因为处理PHP是PHP-FPM的事,这就是动静分离.而且Nginx支持upstream配置PHP-FPM集群实现负载均衡,这点也是Apache不擅长的.
PHP-FPM配合Nginx还可以把I/O密集操作分离出来,减少阻塞对整个PHP应用的影响.
服务器 参考:
NGINX:基础访问控制设置
1、服务地址:/etc/init.d/nginx
2、配置地址:/etc/nginx/如:/etc/nginx/nginx.conf
3、Web默认目录:/usr/share/nginx/html/如:/usr/share/nginx/html/index.html
4、日志目录:/var/log/nginx/如:/var/log/nginx/access.log
5、主程序文件:/usr/sbin/nginx
使用root安装完软件后,默认的网站根目录是/usr/share/nginx/html
(一般修改配置至/var/www)
本人环境是centos7 通过yum的方式安装的nginx(yum导致没有与其他程序一起装在user/local/下)。
用systemctl status nginx.service 查看状态
systemctl start nginx.service 运行
否则自己编写脚步实现
:service nginx restart 启动
ps -ef|grep nginx 查看运行状态
注意,conf文件错误会导致启动失败
TOMCAT:
1、Web默认目录:/usr/local/apache-tomcat-9.0.6/webapps
2、日志目录:/usr/local/apache-tomcat-9.0.6/logs如:/catalina.out
3、主程序文件:/usr/local/apache-tomcat-9.0.6
—————————————————————————————————————
数据库:
使用了MYSQL, PHP sql 处理上,没有类似于 java mybatis,所以打算配置 java mybatis作为DAO层的数据库连接框架
—————————————————————————————————————
JDK与PHP+FPM:
配置JDK1.8+ Maven, Controller层采用SpringMVC,Spring对Mybatis和SpringMVC进行整合和事务管理
PHP 7+composer .TP框架
JDK配置参考
sudo vim /etc.profile 追加下面的内容: export JAVA_HOME=/usr/lib/jvm/java-8-oracle export CLASSPATH=.:JAVA_HOME/lib:JAVA_HOME/jre/lib:CLASSPATH export PATH=JAVA_HOME/bin:JAVA_HOME/jre/bin:PATH
然后执行命令使该配置文件生效(千万不能忘记): source /etc/profile
安装PHP 7及相关依赖 linux安装php7教程
按照建议, 本人服务器上php位置:/usr/local/php-7.0.27
所有php有关扩展配置文件位置:/usr/local/bin
切记./configure编译阶段开启所有需要的扩展,特别是fpm
记得引入用户组www,从而管理PHP的权限
注意一个地方就是php.ini配置文件的位置可以在编译前配置参数中设置,编译参数可以写成:--with-config-file-path=/usr/local/php 这样的话php就回去指定的目录下读取php.ini配置文件,如果不加这个参数默认位置就是php安装目录下的lib目录,具体也可以在phpinfo()输出界面查看,如果php.ini放到其他位置,php读取不到,那么所有的配置修改后都是不生效的,这点要注意
FPM Linux下安装php环境并且配置Nginx支持php-fpm模块
PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。所以已经不需要另外下载了。我这里是7所以就可以直接用。要想使php支持php-fpm,只需要在编译的时候带上 --enable-fpm 就可以了。由于我php已经安装好了,而且之前编译的时候没有带上fpm模式,所以我必须找到源码重新编译一下:
make clean 清理一下
然后./configure -
最后必须执行:
makemake install
接下来配置fpm环境:
//一般服务器默认加载lib下的ini
cp php.ini-production /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/lib/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/lib/php-fpm.d/www.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
启动: /etc/init.d/php-fpm
在新安装扩展后,是需要重新php-fpm的,已使扩展生效。
php-fpm 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm和nginx实现通信,完成整个系统的搭建配置Nginx的PHP FastCGI
配置Nginx的PHP FastCGI
fastcgi_params文件保存于/usr/local/nginx/conf下(Ubuntu可保存于/etc/nginx下)他为我们的FastCGI模块设置了基本的环境变量:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
打开php配置文件找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击,所以此项应该去掉注释并设置为0;这样php-cgi方能正常使用SCRIPT_FILENAME这个变量。
编辑nginx配置文件,具体路径根据实际的nginx.conf配置文件位置编辑,下面主要修改nginx的server {}配置块中的内容,修改location块,追加index.php让nginx服务器默认支持index.php为首页:
location / {
root html;
index index.html index.htm index.php;
}
然后配置.php请求被传送到后端的php-fpm模块,默认情况下php配置块是被注释的,此时去掉注释并修改为以下内容:
location ~* \.php${
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
这里面很多都是默认的,root是配置php程序放置的根目录,主要修改的就是fastcgi_param中的/scripts为$document_root
修改完上面的,回到nginx.conf第一行,默认是#user nobody; 这里要去掉注释改为user www;表示nginx服务器的权限为www用户的权限
修改完这些保存并退出,然后重启nginx:
运行,并查看得目前nginx加载的是位于php/lib/下的php.ini:
经过上诉配置,目前访问80端口的php后缀的文件将会去/var/www/(nginx默认web目录)下寻找匹配php文件, 并通过9000访问fcgi处理并管理php程序。
访问phpinfo.php
—————————————————————————————————————
NOSQL技术:
redis的使用
MQ
cronbin
—————————————————————————————————————
应用场景
前后端分离开发,后端倾注于接口化开发。
JSP、EL、JSTL所带来的便捷性远远赶不上现在前端的复杂性需求
故打算html+js+jq+ajax+json