szs 发表于 2018-11-8 12:38:10

LNMP部署、Nginx+FastCGI、Nginx高级技术

  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.# yum -y install gcc openssl-devel pcre-devel l
  2... ..
  2)源码安装Nginx
  1.# useradd –s /sbin/nologinnginx
  2.# tar -zxvf nginx-1.8.0.tar.gz
  3.# cd nginx-1.8.0
  4.# ./configure   \
  5.> --prefix=/usr/local/nginx    \
  6.> --user=nginx   --group=nginx \
  7.> --with-http_ssl_module
  8.# make && make install
  9... ..
  3)安装MariaDB
  Mariadb在新版RHEL7光盘中包含有该软件,配置yum源后可以直接使用yum安装:
  1.# yum –y install   mariadb   mariadb-server   mariadb-devel
  4)php和php-fpm
  1.# yum –yinstallphp   php-mysql
  2.# tar–xflnmp_soft-2017-03-28.tar.gz
  3.# cdlnmp_soft
  4.# 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.# systemctl stop httpd                //如果该服务存在则关闭该服务
  2.# systemctl disable httpd                //关闭httpd的开机启动功能
  3.# /usr/local/nginx/sbin/nginx             //启动Nginx服务
  4.# netstat -utnlp | grep :80
  5.tcp    0    0 0.0.0.0:80        0.0.0.0:*        LISTEN        32428/nginx
  2)启动MySQL服务
  1.# systemctl start mariadb
  2.# systemctl status mariadb
  3.# systemctl enable mariadb
  3)启动PHP-FPM服务
  1.# systemctl start php-fpm
  2.# systemctl status php-fpm
  3.# 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 {
  Listen80;
  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;
  Includefastcgi.conf;   (读到最后一行加载一下配置文件)
  }
  1.vim /etc/php-fpm.d/www.conf
  2.
  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.# vim /etc/php-fpm.d/www.conf
  2.
  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.# systemctl restart php-fpm
  2.# systemctl status php-fpm
  步骤二:修改Nginx配置文件并启动服务
  1.# vim /usr/local/nginx/conf/nginx.conf (给php部分去掉#)
  2.location / {

[*]root   html;
[*]indexindex.phpindex.html   index.htm;
[*]}
[*]location~.php${
[*]root         html;
[*]fastcgi_pass   127.0.0.1:9000;
[*]fastcgi_indexindex.php;
[*]#fastcgi_param   SCRIPT_FILENAME$document_root$fastcgi_script_name;(老版本使用,去掉)
[*]include      fastcgi.conf; 修改这里
[*]}
  13.# /usr/local/nginx/sbin/nginx -s>  步骤三:创建PHP页面,测试LNMP架构能否解析PHP页面
  在nginx的网页写好网页内容才能访问到内容:/usr/local/nginx/html/
  1)创建PHP测试页面1:
  1.# vim /usr/local/nginx/html/test1.php
  2.
  2)创建PHP测试页面,连接MariaDB数据库:
[*]# vim /usr/local/nginx/html/test2.php  2.
  3)创建PHP测试页面,连接并查询MariaDB数据库:
  1.# vim /usr/local/nginx/html/test3.php
  2.
  4)客户端使用浏览器访问服务器PHP首页文档,检验是否成功:(导出数据库的内容到网页)
  1.# firefox http://192.168.4.5/test1.php
  2.# firefox http://192.168.4.5/test2.php
  3.# 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/
  # ls
  50x.htmla.phpindex.htmlmysql.php
  # vim /usr/local/nginx/conf/nginx.conf

  # /usr/local/nginx/sbin/nginx -s>  # echo "BBB" > b.html
  1.# vim /usr/local/nginx/conf/nginx.conf
  2... ..
  3.server {

[*]listen       80;
[*]server_namelocalhost;  6.location / {
  7.    root   html;
  8.indexindex.html index.htm;
  9.rewrite /a.html/b.html;         (添加这一行)   (可后加一个redirect,添加就会使客户端看到自己的网站改了)
  10.}
  11.}
  2)重新加载配置文件

  1.# /usr/local/nginx/sbin/nginx-s >  3)客户端测试
  1.# firefoxhttp://192.168.4.5/a.html
  步骤二:修改配置文件(访问192.168.4.5的请求重定向至www.tmooc.cn)
  1) 修改Nginx服务配置
  1.# vim /usr/local/nginx/conf/nginx.conf
  2... ..
  3.server {
[*]listen       80;
[*]server_namelocalhost;  6.rewrite ^/http://www.tmooc.cn/; (^/ 正则模糊匹配,访问192.168.4.5的请求重定向至www.tmooc.cn) 放到location外面
  7.location / {
  8.    root   html;
  9.indexindex.html index.htm;默认主页
  10.}
  11.}
  2)重新加载配置文件

  1.# /usr/local/nginx/sbin/nginx-s >  3)客户端测试
  1.# firefoxhttp://192.168.4.5
  步骤三:修改配置文件(访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面) purl 版正则,\变为$
  1) 修改Nginx服务配置
  1.# vim /usr/local/nginx/conf/nginx.conf
[*]  3... ..
  4.server {
[*]listen       80;
[*]server_namelocalhost;  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/下相同的页面
[*]  8.location / {
  9.    root   html;
  10.indexindex.html index.htm;
  11.}
  12.}
  2)重新加载配置文件

  1.# /usr/local/nginx/sbin/nginx-s >  3)客户端测试
  1.# firefoxhttp://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/aAAA
  uc http://192.168.4.1/aBBB
  curl:没有图形的命令行版火狐
  1) 修改Nginx服务配置
  Location 前加if ($http_user_agent ~ curl){   (正则匹配看agent 有没有curl这个关键词)
  rewrite ^/(.) /curl/$1;
  }
  1... ..
  2.server {

[*]listen       80;
[*]server_namelocalhost;  5.location / {
  6.    root   html;
  7.indexindex.html index.htm;
  8.}
  9.if ($http_user_agent ~ curl) {                    //识别客户端curl浏览器(不区分大小写)
  10.rewrite ^(.*)$ /curl/$1 break;
  11.}
  12.}
  2)创建网页目录以及对应的页面文件:
  1.# echo "I am Normal page" > /usr/local/nginx/html/test.html
[*]  3.# mkdir-p/usr/local/nginx/html/curl/
  4.# echo "I am is curl page" > /usr/local/nginx/html/curl/test.html
  2)重新加载配置文件

  1.# /usr/local/nginx/sbin/nginx-s >  Location 前加if ($http_user_agent ~ curl){   (正则匹配看agent 有没有curl这个关键词)
  rewrite ^/(.) /curl/$1;
  }
  Grep “curl”
  4)客户端测试 。相同地址下不同浏览器对应不同内容,结果不一样
  1.# firefoxhttp://192.168.4.5/test.html
  2.# curl   http://192.168.4.5/test.html
  3.firefox http://192.168.4.5/curl/test.html
  4.# 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
  phpphp-mysqlphp-fpm
  nginx   80
  systemctl start mariadb3306
  systemctl start php-fpm9000
  vim nginx.conf
  location / { root html;}
  location .php$ {
  root html;
  fastcgi_pass 127.0.0.1:9000;
  }写代码[连接数据库] PHP--(数据库)
  地址重写$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核心就有几个进程数

页: [1]
查看完整版本: LNMP部署、Nginx+FastCGI、Nginx高级技术