Nginx实战架构篇

一、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

测试语句:

 #  

 #   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

#

#   $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了:

若有问题咨询欢迎大家联系我:

邮箱:[email protected]

QQ:1586787265

你可能感兴趣的:(Nginx实战架构篇)