设为首页 收藏本站
查看: 445|回复: 0

[经验分享] LNMP部署、Nginx+FastCGI、Nginx高级技术

[复制链接]

尚未签到

发表于 2018-11-8 12:38:10 | 显示全部楼层 |阅读模式
  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 / {

  • root   html;
  • index  index.php  index.html   index.htm;
  • }
  • location  ~  .php$  {
  • root           html;
  • fastcgi_pass   127.0.0.1:9000;
  • fastcgi_index  index.php;
  • #fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;  (老版本使用,去掉)
  • include        fastcgi.conf; 修改这里
  • }
      13.[root@svr5 ~]# /usr/local/nginx/sbin/nginx -s>  步骤三:创建PHP页面,测试LNMP架构能否解析PHP页面
      在nginx的网页写好网页内容才能访问到内容:/usr/local/nginx/html/
      1)创建PHP测试页面1:
      1.[root@svr5 ~]# vim /usr/local/nginx/html/test1.php
      2.
      2)创建PHP测试页面,连接MariaDB数据库:
  • [root@svr5 ~]# vim /usr/local/nginx/html/test2.php  2.
      3)创建PHP测试页面,连接并查询MariaDB数据库:
      1.[root@svr5 ~]# vim /usr/local/nginx/html/test3.php
      2.
      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>  [root@proxy html]# echo "BBB" > b.html
  1.[root@svr5 ~]# vim /usr/local/nginx/conf/nginx.conf
  2... ..
  3.server {

  • listen       80;
  • 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 >  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 {
  • listen       80;
  • 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 >  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 {
  • listen       80;
  • 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/下相同的页面
  •   8.location / {
      9.    root   html;
      10.index  index.html index.htm;
      11.}
      12.}
      2)重新加载配置文件

      1.[root@svr5 ~]# /usr/local/nginx/sbin/nginx  -s >  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 {

  • listen       80;
  • 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
  •   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 >  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核心就有几个进程数


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-632426-1-1.html 上篇帖子: Nginx报错nginx: [emerg] unknown log format "main" 下篇帖子: 剖析Nginx 高级用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表