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

测试语句:

 #  <?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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容