一、LNMP动态网站架构
一、动态网站架构:
index.php 开源的php Windows/Linux+nginx+php+mysql
index.py 开源的python Windows/Linux+apache+python+mysql
index.jsp 商业JAVA windows/Linux+tomcat+JDK+Oracle
index.asp 商业C# Windows+iis+asp.net+sql-server/oracle/mogodb
二、LNMP动态网站环境部署
准备环境:
# systemctl stop firewalld
# setenforce 0
# yum clean all
# yum makecache
1.Linux部署 :
# systemctl stop firewalld
# setenforce 0
2.Nginx部署
# yum -y install nginx
3.php-fpm部署
部署有两种方法源码部署和RPM部署,这里选择一个RPM部署方法:
# yum install -y php-fpm php-mysql php-gd
# php-fpm:php接收动态请求的程序
# php-mysql:php链接mysql的程序
# php-gd:图形库程序(GD库可以处理图片,或者生成图片)
下载完成,启动php-fpm
# systemctl restart php-fpm 开机自启: # systemctl enable php-fpm
启动后,查看服务端口
netstat -anpt | grep 9000
然后,测试php页面:
# vim /usr/share/nginx/html/index.php
测试语句:
# <?php
# phpinfo();
# ?>
在nginx配置文件里面添加php主页名称: # vim /etc/nginx/conf.d/defalut.conf
# server {
# location / {
# ...
# index index.php index.html;
# ...
# }
# }
然后,重启nginx服务
# systemctl restart nginx
测试页面:测试结果:
4.mysql部署
安装mysql服务器程序和客户机程序
# yum -y install mariadb-server mariadb
开机自启动mysql服务器
systemctl start mysql
systemctl enable mysql
修改mysql的密码为‘wangmouren’
# mysqladmin password ‘wangmouren’
进入到数据库里面
#mysql -uroot -p ‘wangmouren’
创建数据库,存放页面
# create database wangmouren;
授权wangning用户管理bbs库
# grant all on wangmouren.* to wangning@'192.168.182.142' indentified by '123456';
刷新权限
# flush privileges;
配置php页面
# vim /usr/share/nginx/html/index.php
# <?php
# $link=mysql_connect('192.168.182.142','phptest','123456');
# if ($link)
# echo "Successfuly";
# else
# echo "Faile";
# mysql_close();
# ?>
测试的时候如果发现为faile,则检查数据库授权结果
5.业务上线
购买服务器/云主机
购买域名&ip
上传APP
产品交付:回复工单
三、php-fpm配置
1.了解php-fpm相关配置文件
核心配置文件:
# vim /etc/php.ini
# date.timezone=PRC #设置PHP的时区
# open_basedir #设置php脚本允许访问的目录
全局配置文件:
# vim /etc/php-fpm.conf
# pid = /run/php-fpm/php-fpm.pid # 设置pid文件的位置
# error_log = log/php-fpm.log # 记录错误日志的文件
# log_level = notice # 记录日志的等级 alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
# process.max = 3 # process.max: 控制子进程最大数的全局变量, 后边的设置子进程数量的指令受到这个值的限制, 0表示无限制
# daemonize = yes # 将fpm转至后台运行
扩展配置文件
# vim /etc/php-fpm.d/www.conf
# user = nginx # 设置用户和用户组
# listen.allowed_clients = 127.0.0.1 ##允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接
# listen = 127.0.0.1:9000 # fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port'
# slowlog = /var/log/php-fpm/$pool-slow.log # 开启慢日志
# pm = dynamic # 动态模式进程管理开启
# start_servers=5 # 最初开启多少进程
# min_spare_server =5 # 最小的多余进程数。最少空闲。用户访问会消耗掉进程。然后为了满足后续游湖随时随地开启进程保持空闲数为5。
# max_children = 50 # 最大进程数:max_children是PHP-FPM Pool 最大的子进程数,他数值取决于你的服务器内存。 假设你打算给10G内存给当前配置的PHP-FPM Pool,一般一个PHP请求占用内存10M-40M,我们按站点每个PHP请求占用内存25M,这样max_children = 10G/25M = 409。所以,这个值可以根据情况算出来
# max_spare_servers=10 # 最大的多余进程
# max_requests = 500 # 每个子进程能响应的请求数量,到达此数字,该PHP进程就被释放掉了。
2.初始化php-fpm
初始化前先观察php存在的进程
# ps aux | grep php
进入全局配置文件设置生产环境下常用数值
# vim /etc/php-fpm.d/www.conf
# pm = dynamic
# pm.start_servers = 32
# pm.max_children = 512
# pm.min_spare_servers = 32
# pm.max_spare_servers = 64
# pm.max_requests = 1500
# dynamic:启动动态管理模式
# start_servers:初始启动32个进程
# max_children:最大进程数。(子进程数会在最大和最小数范围中变化)512个进程数是在大于16G内存的前提下。
# min_spare:随着用户访问的增加,保持32个空闲进程。
# max_spare:随着用户离去。杀死大量空闲进程来节约资源。
max_requests:是每个子进程重生之前处理的请求数, 默认值为unlimited(为1024)
重启php-fpm
# systemctl restart php-fpm
启动php状态监控页面功能
启动测试页功能:
# vim /etc/php-fpm.d/www.conf
# pm.status_path = /php_status
nginx配置页面转发
# vim /etc/nginx/conf.d/default.conf
# location = /php_status {
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_param SCRIPT_FILENAME
# $fastcgi_script_name;
# include fastcgi_params;
# }
启动浏览器,访问测试页:
四、Nginx Rewrite
什么是Rewrite?
1. URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如
http://www.123.com/news/index.php?id=123 使用URLRewrite 转换后可以显示为 http://www.123
.com/news/123.html对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。
理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分一般要高于动态页面。所
以,UrlRewrite可以让我们网站的网页更容易被搜索引擎所收录。
2. 从安全角度上讲,如果在URL中暴露太多的参数,无疑会造成一定量的信息泄漏,可能会被一些黑客
利用,对你的系统造成一定的破坏,所以静态化的URL地址可以给我们带来更高的安全性。
3. 实现网站地址跳转,例如用户访问360buy.com,将其跳转到jd.com。例如当用户访问tianyun.com的
80端口时,将其跳转到443端口。
Rewrite参考示例
一、需求:当用户访问http://192.168.182.142/abc/a/1.html 地址时,通过redirect 重定向至http://192.168.182.142/ccc/bbb/2.html 做这个示例的话其实不需要/abc/a/1.html存在了,因为不管有没有他都会重定向到/ccc/bbb/2.html这里面,但是为了实验起见 还是要创建一下这个目录,因为生产环境中必然也会有这个,首先创建目录与文件:
然后,就是修改配置文件,在server框架里面再添加location:
# vim /etc/nginx/conf.d/default.conf
# location /abc {
# rewrite .* /ccc/bbb/2.html permanent;
# }
然后重启服务并测试页面:
# systemctl restart nginx
在浏览器里输入原url:http://192.168.182.142/abc/a/1.html 然后会发现已经转发到/ccc/bbb/2.html 这上面去了:
二、需求:location { rewrite } 只能替换url中的目录路径,使用if (){rewrite}可以替换协议主机目录全部能容。将 http://www.wangmouren.com换http://jd.com
首先,先给虚拟机与真实机做解析,注释掉上面的实验,完成之后修改配置文件:
# vim /etc/nginx/conf.d/default.conf
在location里面添加:
# if ( $host ~* wangmouren.com ) {
# rewrite .* http://jd.com permanent;
# }
然后,重启服务,测试页面:
# systemctl restart nginx
在浏览器中输入http://wangmouren.com就会自动跳转到京东页面了:
三、需求:有时候网站被黑客攻击,他有可能给机器传上一个脚本文件,但是运行不了(账号只有写的权限),他可以通过浏览器 网页来运行这个文件,我们可以把浏览器当遇到这个文件的时候,直接给他重写成403,给他扔掉.
首先,在/usr/share/nginx/html/里面创建一个1.sh文件
进入配置文件在server里面加上
# location ~* \.sh$ { #~* \.sh : 像是以*.sh结尾的文件 \ :转义.
# return 403; #return和rewrite的结果是一样的
# }
然后重启服务,访问页面http://wangmouren.com/1.sh 会发现已经把这个文件重写成403了:
若有问题咨询欢迎大家联系我:
邮箱:Wangmouren1997@163.com
QQ:1586787265