1 案例1:部署LNMP环境 1.1 问题 安装部署Nginx、MariaDB、PHP环境 安装部署Nginx、MariaDB、PHP、PHP-FPM; 启动Nginx、MariaDB、FPM服务; 并测试LNMP是否工作正常。 1.2 方案 在RHEL7系统中,源码安装Nginx,使用RPM包安装MariaDB、PHP、PHP-FPM软件。 操作过程中需要安装的软件列表如下: nginx 【源码】(web服务器,接收用户请求) mariadb(客户端软件mysql)、mariadb-server(服务)、mariadb-devel (依赖包) php、php-fpm、php-mysql (php解释器,解释基本语法格式,但不支持连接mysql。php-mysql扩展包是用来连接mysql。php-fpm是php服务,可启动php服务。先看后台有什么服务再决定安装什么包。) 修改配置文件,把它们串连在一起,正常工作 1.3 步骤 LNMP动态网站 Nginx静态网站 静态网站:用户访问的任何页面,服务器直接将文件给用户。服务器不管客户端有没有相应软件,直接给客户端网页(傻瓜式),没有就得下载 动态网站:代码需要在服务上执行,将执行结果给用户。使用相应解释器在服务器本身运行一次,结果传给客户端 nginx+PHP【实现动静分离】 用户发送请求到nginx:80 nginx要分析用户的请求,看是请求静态还是动态,如果是静态,则nginx找root网站根,【成功,404】如果是动态,则转发给9000端口。

PHP:网站(对于java来说性能差一些) Java:网站,软件,软件(最难) Python:网站,软件,游戏(对于java来说性能差一些) 步骤一:安装软件 1)使用yum安装基础依赖包 1.[root@svr5 ~]# yum -y install gcc openssl-devel pcre-devel l 2... .. 2)源码安装Nginx 1.[root@svr5 ~]# useradd –s /sbin/nologin nginx 2.[root@svr5 ~]# tar -zxvf nginx-1.8.0.tar.gz 3.[root@svr5 ~]# cd nginx-1.8.0 4.[root@svr5 nginx-1.8.0]# ./configure
5.> --prefix=/usr/local/nginx
6.> --user=nginx --group=nginx
7.> --with-http_ssl_module 8.[root@svr5 ~]# make && make install 9... .. 3)安装MariaDB Mariadb在新版RHEL7光盘中包含有该软件,配置yum源后可以直接使用yum安装: 1.[root@svr5 ~]# yum –y install mariadb mariadb-server mariadb-devel 4)php和php-fpm 1.[root@svr5 ~]# yum –y install php php-mysql 2.[root@svr5 ~]# tar –xf lnmp_soft-2017-03-28.tar.gz 3.[root@svr5 ~]# cd lnmp_soft 4.[root@svr5 ~]# yum –y php-fpm-5.4.16-36.el7_1.x86_64.rpm

安装操作:  yum -y install mariadb mariadb-server  yum -y install mariadb-devel  yum -y install php php-mysql 解释器  cd lnmp_soft/  rpm -ivh php-fpm-5.4.16-36.el7_1.x86_64.rpm php是一个解释器,不是服务,只能靠rpm安装php-fpm来启动。 步骤二:启动服务 1)启动Nginx服务 这里需要注意的是,如果服务器上已经启动了其他监听80端口的服务软件(如httpd),则需要先关闭该服务,否则会出现冲突。 1.[root@svr5 ~]# systemctl stop httpd                //如果该服务存在则关闭该服务 2.[root@svr5 ~]# systemctl disable httpd                //关闭httpd的开机启动功能 3.[root@svr5 ~]# /usr/local/nginx/sbin/nginx             //启动Nginx服务 4.[root@svr5 ~]# netstat -utnlp | grep :80 5.tcp    0    0 0.0.0.0:80        0.0.0.0:*        LISTEN        32428/nginx
2)启动MySQL服务 1.[root@svr5 ~]# systemctl start mariadb 2.[root@svr5 ~]# systemctl status mariadb 3.[root@svr5 ~]# systemctl enable mariadb 3)启动PHP-FPM服务 1.[root@svr5 ~]# systemctl start php-fpm 2.[root@svr5 ~]# systemctl status php-fpm 3.[root@svr5 ~]# systemctl enable php-fpm 2 案例2:构建LNMP平台 2.2 方案 使用2台RHEL7虚拟机,其中一台作为LNMP服务器(192.168.4.5)、另外一台作为测试用的Linux客户机(192.168.4.100),如图-1所示。

图-1 Nginx结合FastCGI技术即可支持PHP页面架构,因此本案例,需要延续练习一的实验内容,通过修改Nginx及php-fpm配置文件实现对PHP页面的支持。 php-fpm需要修改的常见配置如下: listen = 127.0.0.1:9000 //PHP端口号 pm.max_children = 32 //最大进程数量 pm.start_servers = 15 //最小进程数量 pm.min_spare_servers = 5 //最少需要几个空闲着的进程 pm.max_spare_servers = 32 //最多允许几个进程处于空闲状态

Nginx ---PHP(动静分离) Nginx判断用户访问的是静态还是动态 如果是静态,则在root对应的目录中找到页面直接给用户 如果是动态,则nginx将请求转发给9000端口

location / {allow all} 默认值是允许所有 location /a {deny all} location /b {allow 1.1.1.1} location /c {deny 1.1.1.1} http://192.168.4.5/ 没有任何匹配的时候,只能默认匹配根。默认值是允许所有 http://192.168.4.5/a 所有人都打不开 http://192.168.4.5/b 只允许1.1.1.1访问 http://192.168.4.5/c 仅不允许1.1.1.1访问 Location 匹配用户的地址栏(支持正则)

有多少Location相当于有多少if Server { Listen 80; Server_name localhost; Location / { Root html;(静态)和上一节的集群调度器相反。 } Location

修改nginx的配置文件 Location ~ .php$ { (动态交给9000端口) Root html; Fastcgi_pass 127.0.0.1:9000; (交给9000端口) Fastcgi_index index.php; #Fastcgi_param........name; Include fastcgi.conf; (读到最后一行加载一下配置文件) } 1.vim /etc/php-fpm.d/www.conf 2.[www] 3.listen = 127.0.0.1:9000 4.listen.allowed_clients = 127.0.0.1 5.user = apache 6.group = apache 7.pm = dynamic 8.pm.max_children = 50 9.pm.start_servers = 5 10.pm.min_spare_servers = 5 11.pm.max_spare_servers = 35 FastCGI 工作原理:

动态:客户端发送请求给nginx,nginx转发给PHP,PHP多个进程共同操作(并发量大,但是占用内存大),操作结果源路返回给nginx,nginx发送给客户端。 常见错误: 没有页面(权限):关闭selinux:setenforce 0;rwx;acl error:查error日志:连接被拒绝(upstream后台失败):服务器没有启动 Php报错:语法错误,注意分号 端口80和9000要开启,关闭squid Location 下载页面:注释没打开 Nginx报错:mariadb 要开启,路径在conf下面(绝对路径),配置文件deny注释掉 Php是多进程的服务,启动多个php,都交给9000端口 多个进程:同时开不同界面,连不同服务器 Php-CGI解释器运行很占内存 网上有数据库模板

2.3 步骤 步骤一:创建并修改php-fpm配置文件 1)查看php-fpm配置文件 1.[root@svr5 etc]# vim /etc/php-fpm.d/www.conf 2.[www] 3.listen = 127.0.0.1:9000 4.listen.allowed_clients = 127.0.0.1 5.user = apache 6.group = apache 7.pm = dynamic 8.pm.max_children = 50 最多启50个 9.pm.start_servers = 5 一开始启5个 10.pm.min_spare_servers = 5 11.pm.max_spare_servers = 35 2)确认php-fpm服务已经启动 1.[root@svr5 ~]# systemctl restart php-fpm 2.[root@svr5 ~]# systemctl status php-fpm 步骤二:修改Nginx配置文件并启动服务 1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf (给php部分去掉#) 2.location / { 3. root html; 4. index index.php index.html index.htm; 5. } 6. location ~ .php$ { 7. root html; 8. fastcgi_pass 127.0.0.1:9000; 9. fastcgi_index index.php; 10. #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; (老版本使用,去掉) 11. include fastcgi.conf; 修改这里 12. } 13.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload 步骤三:创建PHP页面,测试LNMP架构能否解析PHP页面 在nginx的网页写好网页内容才能访问到内容:/usr/local/nginx/html/ 1)创建PHP测试页面1: 1.[root@svr5 ~]# vim /usr/local/nginx/html/test1.php 2.<?php 3.$i="This is a test Page"; 4.echo $i; 5.?> 2)创建PHP测试页面,连接MariaDB数据库:

  1. [root@svr5 ~]# vim /usr/local/nginx/html/test2.php 2.<?php 3.$links=mysql_connect("localhost","root","密码");         4.//注意:root为mysql账户名称,密码需要修改为实际mysql密码,无密码则留空即可 5.if($links){
  2.    echo "link db ok!!!";
    

7.} 8.else{ 9. echo "link db no!!!"; 10.} 11.?> 3)创建PHP测试页面,连接并查询MariaDB数据库: 1.[root@svr5 ~]# vim /usr/local/nginx/html/test3.php 2.<?php 3.$mysqli = new mysqli('localhost','root','','mysql'); 4.if (mysqli_connect_errno()){ 5.    die('Unable to connect!'). mysqli_connect_error(); 6.} 7.$sql = "select * from user"; 从数据库中提取数据 8.$result = $mysqli->query($sql); 9.while($row = $result->fetch_array()){ 10.    printf("Host:%s",$row[0]); 11.    printf("</br>"); 12.    printf("Name:%s",$row[1]); 13.    printf("</br>"); 14.} 15.?> 4)客户端使用浏览器访问服务器PHP首页文档,检验是否成功:(导出数据库的内容到网页) 1.[root@client ~]# firefox http://192.168.4.5/test1.php 2.[root@client ~]# firefox http://192.168.4.5/test2.php 3.[root@client ~]# firefox http://192.168.4.5/test3.php 3 案例3:地址重写 3.1 问题 nginx支持地址重写(地址栏重新改写) www.baidu.com/a----->www.baidu.com/b Rewrite 旧地址 新地址 【选项】 Rewrite /a.html /b.html redirect Rewrite 支持正则 http://192.168.4.5/achtml 成功 http://192.168.4.5/a.html 成功 http://192.168.4.5/acchtml 不成功

沿用练习一,通过调整Nginx服务端配置,实现以下目标: 1.所有访问a.html的请求,重定向到b.html; 2.所有访问192.168.4.5的请求重定向至www.tmooc.cn;(替换为www.it211.com.cn) 3.所有访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面; 4.实现curl访问不同的页面。 步骤一:修改配置文件(访问a.html重定向到b.html) 1)修改Nginx服务配置: cd /usr/local/nginx/html/ [root@proxy html]# ls 50x.html a.php index.html mysql.php [root@proxy html]# vim /usr/local/nginx/conf/nginx.conf [root@proxy html]# /usr/local/nginx/sbin/nginx -s reload [root@proxy html]# echo "BBB" > b.html 1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf 2... .. 3.server { 4. listen 80; 5. server_name localhost; 6.location / { 7.    root html; 8.index index.html index.htm; 9.rewrite /a.html /b.html;         (添加这一行)   (可后加一个redirect,添加就会使客户端看到自己的网站改了) 10.} 11.} 2)重新加载配置文件 1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload 3)客户端测试 1.[root@client ~]# firefox http://192.168.4.5/a.html 步骤二:修改配置文件(访问192.168.4.5的请求重定向至www.tmooc.cn)

  1. 修改Nginx服务配置 1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf 2... .. 3.server {
  1.    listen       80;
    
  2.    server_name  localhost;
    

6.rewrite ^/ http://www.tmooc.cn/; (^/ 正则模糊匹配,访问192.168.4.5的请求重定向至www.tmooc.cn) 放到location外面 7.location / { 8.    root html; 9.index index.html index.htm; 默认主页 10.} 11.} 2)重新加载配置文件 1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload 3)客户端测试 1.[root@client ~]# firefox http://192.168.4.5 步骤三:修改配置文件(访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面) purl 版正则,\变为$

  1. 修改Nginx服务配置 1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf

3... .. 4.server { 5. listen 80; 6. server_name localhost; 12.rewrite ^/(.) http://www.tmooc.cn/$1; (^/支持正则,从http://192.168.4.5/开始,/后的都跳转到http://www.tmooc/cn上)(rewrite ^//(.) http://www.tmooc.cn/$1) $和\一样代表粘贴,()代表复制保留。客户端需要什么就跳转到相应页面。访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面 7. 8.location / { 9.    root html; 10.index index.html index.htm; 11.} 12.} 2)重新加载配置文件 1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload 3)客户端测试 1.[root@client ~]# firefox http://192.168.4.5

步骤4:不同浏览器访问相同页面,结果不同。(实现curl和火狐访问相同连接返回的页面不同) /usr/local/nginx/html/[一套正常页面] /usr/local/nginx/html/uc/[一套窄屏页面] server{ listen 80; server_name localhost; root html; if (如果你是uc){ rewrite /(.*) /uc/$1; }
准备两套页面: ie http://192.168.4.1/a AAA uc http://192.168.4.1/a BBB

curl:没有图形的命令行版火狐

  1. 修改Nginx服务配置 Location 前加if ($http_user_agent ~* curl){ (正则匹配看agent 有没有curl这个关键词) rewrite ^/(.*) /curl/$1; } 1... .. 2.server {
  1.    listen       80;
    
  2.    server_name  localhost;
    

5.location / { 6.    root html; 7.index index.html index.htm; 8.} 9.if ($http_user_agent ~* curl) {                    //识别客户端curl浏览器(不区分大小写) 10.rewrite ^(.)$ /curl/$1 break; 11.} 12.} 2)创建网页目录以及对应的页面文件: 1.[root@svr5 ~]# echo "I am Normal page" > /usr/local/nginx/html/test.html 2. 3.[root@svr5 ~]# mkdir -p /usr/local/nginx/html/curl/ 4.[root@svr5 ~]# echo "I am is curl page" > /usr/local/nginx/html/curl/test.html 2)重新加载配置文件 1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s reload Location 前加if ($http_user_agent ~* curl){ (正则匹配看agent 有没有curl这个关键词) rewrite ^/(.*) /curl/$1; } Grep “curl” 4)客户端测试 。相同地址下不同浏览器对应不同内容,结果不一样 1.[root@client ~]# firefox http://192.168.4.5/test.html 2.[root@client ~]# curl http://192.168.4.5/test.html 3.firefox http://192.168.4.5/curl/test.html 4.[root@client ~]# curl http://192.168.4.5/test.jsp

使用ie访问是宽屏页面 使用Uc访问是窄屏页面 /usr/local/nginx/html/ 正常页面test.html /usr/local/nginx/html/uc 内容一样test.html charset utf-8 可以在网页输出中文 user_agent 识别客户端的浏览器 UC--设置--浏览器设置--UA标识(电脑,手机)即user_agent,可手机伪装成电脑,宽屏 Curl -A(可以伪装成任何人) “AA” http://fdgfgsf

rewrite 旧地址 新地址 选项 last 不再读其他rewrite,只执行一个rewrite break 不读其他语句,访问结束。不再执行其他冲突语句 redirect【地址变】临时重定向(蜘蛛会看,对此敏感。百度,360,google) permanent【地址变】永久重定向(潜在提示以后直接访问跳转的页面即可)(蜘蛛会看,对此敏感) 蜘蛛(网络爬虫)喜欢路径短的文件。可以rewrite 短路径 长路经(跳转) 蜘蛛喜欢更新的原创内容

总结: LNMP nginx mariadb mariadb-server mariadb-devel php php-mysql php-fpm nginx 80 systemctl start mariadb 3306 systemctl start php-fpm 9000 vim nginx.conf location / { root html;} location .php$ { root html; fastcgi_pass 127.0.0.1:9000; }写代码[连接数据库] PHP--(数据库) 地址重写[a-b;4.5--tmooc;4.5/a--tmooc/a识别浏览器]$http_user_agent

进入vi/vim编辑器,按CTRL+V进入可视化模式(VISUAL BLOCK) vi/vim如何添加或删除多行注释 移动光标上移或者下移,选中多行的开头,如下图所示 vi/vim如何添加或删除多行注释 选择完毕后,按大写的的I键,此时下方会提示进入“insert”模式,输入你要插入的注释符,例如#, vi/vim如何添加或删除多行注释 最后按ESC键,你就会发现多行代码已经被注释了 vi/vim如何添加或删除多行注释 删除多行注释的方法,同样 Ctrl+v 进入列选择模式,移到光标把注释符选中,按下d,注释就被删除了。 ps aux | grep nginx 查看nginx进程 有几个CPU核心就有几个进程数