nginx2-网站服务部署

老男孩教育61期--week15--网站web服务

  1. 课程介绍部分:

    1. 网站web服务扩展应用说明
      a 网站状态模块配置说明
      b 网站日志信息详细说明
      d 网站location配置说明
      e 网站服务跳转功能配置
      f 网站服务如何安全访问 HTTPS
      2)网站LNMP架构
      a LNMP架构搭建配置
      b LNMP架构代码上线 jenkins

    负载均衡/高可用

  2. 知识重点回顾:

    1. nginx网站服务概念介绍
      a 高并发消耗资源少
      b 功能丰富
    2. nginx网站服务部署安装
      yum安装 (官方源安装 非官方源安装)
      编译安装 (源码包 依赖软件 配置参数)
    3. nginx网站服务目录结构
      /etc/nginx /var/log/nginx /html /usr/bin/
    4. nginx网站服务配置文件 (默认信息)
      多参见官方网站资料
    5. nginx网站服务应用配置
      a 实现部署多个网站页面
      b 实现不同方式访问网站
      c 实现网站服务目录索引
      d 实现网站安全访问功能
      根据地址控制 根据认证控制(401)
  1. nginx网站服务企业应用
    1)nginx服务监控状态页部署
    第一个历程:创建一个新的server虚拟主机
    vim conf.d/state.conf
    server {
    listen 80;
    server_name state.oldboy.com;
    location / {
    stub_status;
    }
    }
    第二个历程:创建域名解析
    state.oldboy.com 10.0.0.7

    监控状态页面信息:
    Active connections: 2
    server accepts handled requests
    2 2 1
    Reading: 0 Writing: 1 Waiting: 1

    Active connections: 激活的连接数(总的并发连接数)
    server accepts: 已经接收的客户端访问服务端总的链接数量
    handled: 已经处理的客户端访问服务端总的链接数量
    requests: 接收到用户请求报文的总数量

    Reading: 目前读取用户访问请求头数量
    Writing: 目前响应用户访问响应头数量
    waiting: 目前在内存/队列中未处理请求报文数量
    http://nginx.org/en/docs/http/ngx_http_stub_status_module.html

    2)nginx服务日志信息
    access 访问日志: /var/log/nginx/access.log
    log_format main 'remote_addr -remote_user [time_local] "request" '
    'statusbody_bytes_sent "http_referer" ' '"http_user_agent" "http_x_forwarded_for"'; 说明:以上信息定义日志格式 access_log /var/log/nginx/access.log main; http://nginx.org/en/docs/http/ngx_http_log_module.html#access_logremote_addr 10.0.0.1 用户访问源地址信息
    remote_user 认证用户名 认证访问网站用户信息 [time_local] [20/Jul/2019:10:31:52 +0800] 用户访问网站时间信息
    request GET /favicon.ico HTTP/1.1 HTTP请求行信息status 404 显示状态码信息
    body_bytes_sent 555 响应报文主体尺寸 (尺寸过大需要考虑是否有盗链情况)http_referer ???
    http_user_agent Chrome/74.0.3729.131 用户使用什么客户端软件访问网站http_x_forwarded_for

    error 错误日志:/var/log/nginx/access.log
    配置方法:
    error_log /var/log/nginx/error.log warn;
    http://nginx.org/en/docs/ngx_core_module.html#error_log
    2019/07/20 10:31:52 [error] 11763#11763: *6 open() "/html/www/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: www.oldboy.com, request: "GET /favicon.ico HTTP/1.1", host: "www.oldboy.com", referrer: "http://www.oldboy.com/"

3) 网站服务location配置
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
location [ = | ~ | ~* | ^~ ] uri { ... }
location: 局部配置
server:   全局配置

location = / {
    return 301;
}

location / {
    return 302;
}

location /documents/ {
    return 401;
}

location ^~ /images/ {
    return 402;
}

location ~* \.(gif|jpg|jpeg)$ {
    return 501;
}

=:     精确匹配  = /oldboy                www.oldboy.com/oldboy              最优先
^~:    优先匹配  ^~ /images               www.oldboy.com/images/oldboy.jpg   优先
~:     模糊匹配  ~ /oldboy                www.oldboy.com/oldboy/oldboy.html  区分大小写
~*:    模糊匹配  ~* /oldboy               www.oldboy.com/oldboy/oldboy.html  不区分大小写
                 ~* \.(gif|jpg|jpeg)$     www.oldboy.com/images/oldboy.jpg
/目录  路径匹配  /oldboy                  www.oldboy.com/oldboy/oldboy.html  区分大小写
/      默认匹配  /                        www.oldboy.com/oldgirl

异常问题: 
第一步: www.oldboy.com/            ---> location /           --> www.oldboy.com/oldboy.jpg
第二步: www.oldboy.com/oldboy.jpg  ---> location = /oldboy           --> www.oldboy.com/oldboy.jpg


4) 网站服务页面跳转功能
    什么是页面跳转:
    1. 将url信息做改变
    2. 将uri信息做改变
    3. 完成伪静态配置    动态页面地址--看到的静态页面???

    如何实现页面跳转:
    方法一:rewrite
    Syntax: rewrite regex                replacement      [flag];
                    匹配需要跳转的信息   跳转成什么地址    标记
    Default:    —
    Context:    server, location, if
    http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
    跳转的标记信息:
    last:
    break:
    redirect:  临时跳转  302  
    permanent: 永久跳转  301
    301跳转:
    客户端(浏览器)                   ---->                       京东网站服务器(.100)
    www.360buy.com          HTTP请求:host-www.360buy.com
    10.0.0.100                         <----
                            HTTP响应:跳转告知 www.jx.com 301
                                      告知浏览器记录跳转
                                       ---->
                            HTTP请求:host-www.jd.com
                                       <----
                            HTTP响应:页面信息进行响应    200
                            
                                       --->                        京东网站服务器(.100)
    www.360buy.com          HTTP请求:host-www.360buy.com
                            HTTP请求:host-www.jd.com
                                       <---
                            HTTP响应:页面信息进行响应    200
    
    302跳转
    客户端(浏览器)                   ---->                       京东网站服务器(.100)
    www.360buy.com          HTTP请求:host-www.360buy.com
    10.0.0.100                         <----
                            HTTP响应:跳转告知 www.jd.com 302
                                       ---->
                            HTTP请求:host-www.jd.com
                                       <----
                            HTTP响应:页面信息进行响应    200

                                       --->                        京东网站服务器(.100)
    www.360buy.com          HTTP请求:host-www.360buy.com
                                       <----
                            HTTP响应:跳转告知 www.jd.com 302            
                                       ---->
                            HTTP请求:host-www.jd.com
                                       <----
                            HTTP响应:页面信息进行响应    200
    
    方法二:return  配置简单方便
    Syntax:     return code URL;
    Default:    —
    Context:    server, location, if
    www.jd.com/oldboy.html   --- return  301   www.jx.com/oldboy.html 
    
    页面跳转实践操作:
    01. 跳转配置中last与break区别对比示例
    server {
       listen            80;
       server_name       rewrite.oldboy.com;
       root              /html;
       index             index.html;
       location  ~ ^/break/ {
           rewrite  ^/break/  /test/  break;  --- 有跳转目录吗  有首页文件
       }
       location  ~ ^/last/  {
           rewrite  ^/last/  /test/  last;    --- 不需要必须有跳转目录吗  不需要有首页文件
       }
       location   /test/ {
           default_type   application/json;
           return 200 'ok';
       }
    }

    break:一旦跳转完毕,默认停止后续操作(没有相应信息)  不会再地址栏显示跳转页面地址
    last: 一旦跳转完毕,会继续访问页面配置信息


    03. 常见跳转示例情况测试说明
    例1: 用户访问/abc/1.html实际上真实访问是/ccc/bbb/2.html
    #http://rewrite.oldboy.com/abc/1.html ==> http://rewrite.oldboy.com/ccc/bbb/2.html
    实现uri信息跳转
    
    /html/abc/1.html   收藏夹
    
    
    第一里程:准备真实的访问路径
    [root@web03 ~]# mkdir /html/ccc/bbb -p
    [root@web03 ~]# echo "ccc_bbb_2" > /html/ccc/bbb/2.html
    
    第二个里程:Nginx跳转配置
    [root@web03 conf.d]# cat ccbb.conf 
    server {
        listen 80;
        
        location / {
            root /html;
            index index.html;
        }
        location /abc {
            rewrite (.*) /ccc/bbb/2.html redirect;
            #return 302 /ccc/bbb/2.html;
        }
    }
    
    第三个里程:重启Nginx服务
    [root@web03 ~]# systemctl restart nginx

    例2:用户访问/2014/ccc/bbb/2.html实际上真实访问是/2018/ccc/bbb/2.html
    #http://rewrite.oldboy.com/2014/ccc/bbb/2.html ==> http://rewrite.oldboy.com/2018/ccc/bbb/2.html
    
    第一个里程:准备真实的访问路径
    [root@web03 ~]# mkdir /html/2018/ccc/bbb -p
    [root@web03 ~]# echo "2018_ccc_bbb_2" > /html/2018/ccc/bbb/2.html
    
    第二个里程:Nginx跳转配置
    [root@web03 conf.d]# cat ccbb.conf 
    server {
        listen 80;
        location / {
            root /code;
            index index.html;
        }
        location /2014 {
            rewrite ^/2014/(.*)$ /2018/$1 redirect;
            #return 302 /2018/ccc/bbb/2.html;
        }
    }

   第三个里程:重启Nginx服务
   [root@web03 ~]# systemctl restart nginx

   例3:用户访问/test目录下任何内容, 实际上真实访问是http://www.oldboy.com
   准备环境:
   mkdir /html/test/     oldboy.jpg

   配置
   location /test {
       rewrite (.*) http://rewrite.oldboy.com redirect;
   }
   location / {
       root /html;
       index oldboy.jpg index.html;
   }


   例4:用户访问course-11-22-33.html实际上真实访问是/course/11/22/33/course_33.html
   #http://www.oldboy.com/course-11-22-33.html ==> http://www.oldboy.com/course/11/22/33/course_33.html  
   跳转目的,不要让用户得知企业站点目录结构
   
   第一个里程 准备真实的访问路径
   [root@web03 ~]# mkdir /html/course/11/22/33/ -p
   [root@web03 ~]# echo "Curl docs.etiantian.org" > /html/course/11/22/33/course_33.html

   第二个里程 Nginx跳转配置
   [root@web03 conf.d]# cat ccbb.conf 
   server {
           listen 80;
           root /code;
           index index.html;
           location / {
               #灵活rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html redirect;
               #固定rewrite ^/course-(.*)  /course/11/22/33/course_33.html redirect;
           }
       
   第三个里程 重启Nginx服务
   [root@web03 ~]# systemctl restart nginx
   说明: last break 做跳转不会显示跳转的地址信息
   
   例5:将http请求,跳转至https
   如何部署HTTPS网站:
   第一个历程:环境准备工作
   安装nginx程序时,需要开启ssl模块功能() --with-http_ssl_module
   
   第二个历程:配置文件中加载ssl配置信息
   http://nginx.org/en/docs/http/ngx_http_ssl_module.html
   server {
      listen              443 ssl;
      server_name         rewrite.oldboy.com;
      ssl_certificate     /etc/nginx/server.crt;    公钥
      ssl_certificate_key /etc/nginx/server.key;    私钥
   }
   
   解释说明:
   为什么HTTPS访问需要有公钥和私钥:
   www.jd.com(真)  ---- 公钥 --- 浏览器(公钥--www.jd.com)
        私钥(真)                     公钥(真)         
   www.jd.com(假)
        私钥(假)                     公钥(真)
   
   
   www.jd.com(真)               浏览器(公钥--www.jd.com)
        私钥(真)                     公钥(真)         
   www.jd.com(假)
        私钥(假)                     公钥(真)
   
                     CA 证书颁发机构
   
   第三个历程: 创建私钥和证书
   先有私钥:
   openssl genrsa -idea -out server.key 2048
   私钥密码
   
   创建证书:
   openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
   -days 36500     --- 设置证书时效
   -x509           --- 设置证书文件信息格式
   -sha256         --- 证书数据加密方式
   -nodes -newkey  --- 去掉密码信息
   rsa:2048        --- 识别私钥加密信息
   -keyout         --- 读取私钥文件
   -out            --- 输出一个证书
   
   第四个历程:重启nginx服务,进行测试
   
   第五个历程:实现http跳转为HTTPs
   server {
           listen 80;
           server_name rewrite.oldboy.com;
           rewrite ^(.*) https://$server_name$1 redirect;
           #return 302 https://$server_name$request_uri;    ???
   }
   
   rewrite.oldboy.com/oldboy.jpg          ---> https://rewrite.oldboy.com/oldboy.jpg
   
   rewrite ^(.*) $scheme://rewrite.oldboyedu.com$request_uri redirect;
   https://rewrite.oldboy.com/oldboy.jpg  ---> https://rewrite.oldboyedu.com/oldboy.jpg
   
   server {
       listen 443 ssl;
       server_name rewrite.oldboy.com;
       ssl_certificate     /etc/nginx/server.crt;    公钥
       ssl_certificate_key /etc/nginx/server.key;    私钥;
   }

   Rewrite常用内置变量,在匹配过程中可以引用一些Nginx的全局变量
   $server_name       当前用户请求的域名
   $request_filename  当前请求的文件路径名(带网站的主目录/html/images/test.jpg)
   $request_uri       当前请求的文件路径名(不带网站的主目录/images/test.jpg)
   $scheme            用的协议,比如http或者https

   实际配置:
   [root@web01 nginx]# cat /etc/nginx/conf.d/rewrite.conf 
   server {
      listen 80;
      server_name rewrite.oldboy.com;
      rewrite ^(.*) https://$server_name$1 redirect;
      #return 302 https://$server_name$request_uri;
          }
   server {
      listen            443 ssl;
      server_name       rewrite.oldboy.com;
      ssl_certificate     /etc/nginx/server.crt;
      ssl_certificate_key /etc/nginx/server.key;
      location / {
          root   /html;
          index  index.html index.htm;
      }
   }
   以上都是实现uri信息跳转
   
   实现url信息跳转:rewrite.oldboy.com  ---  www.jd.com
   第一个历程:配置好解析信息
   10.0.0.7  rewrite.oldboy.com rewrite.oldboyedu.com
   第二个历程:编写配置文件
   编写方法一:
   [root@web01 conf.d]# cat rewrite.conf 
   server {
      listen            80;
      server_name       rewrite.oldboy.com;
      rewrite  ^/(.*)    http://www.jd.com/$1  permanent;  
   }
   server {
      listen            80;
      server_name       www.jd.com;
      location / {
          root   /html;
          index  index.html index.htm;
      }
   }
   编写方法二:
   location / {
       root   /html;
       index  index.html index.htm;
       if ($http_host ~* ^rewrite.oldboy.com) {
           rewrite  ^/(.*)    http://www.jd.com/$1  permanent;
       }
   }  
  1. nginx网站服务阶段总结:

    1. 软件部署安装过程

    2. 软件配置文件编写
      http://nginx.org/en/docs/

    3. 软件企业应用配置
      a. 实现多个页面配置
      b. 实现不同访问方式
      c. 实现目录索引功能
      d. 实现网站安全访问
      e. 实现状态信息监控
      f. 服务程序日志功能 日志切割处理(logrotate 切割日志脚本)

      !/bin/bash

      log_path="/var/log/nginx/"
      access_info="access_log"
      error_info="error_log"
      access_info_date="access_(date +%F).log" error_info_date="error_(date +%F).log"

      mv log_pathaccess_info log_pathaccess_info_date
      mv log_patherror_info log_patherror_info_date
      systemctl restart nginx
      编写定时任务
      g. 服务程序location匹配uri信息功能
      h. 服务程序rewrite(return)实现网站页面跳转功能

    4. 网站服务实现HTTPs访问

  2. 网站LNMP架构
    web01: 处理静态请求 nginx
    架构组成部分
    L: linux (selinux没关 防火墙关闭 /tmp 1777)
    n: nginx web服务功能
    p: php
    M: mysql(mariadb) 数据库

    LNMT:
    n: nginx 负载均衡功能
    t: tomcat
    LNMP:
    p: python
    架构功能原理:
    用户访问网站(静态) --- nginx
    用户访问网站(动态) --- nginx --- php --- mariadb(查/写)

  3. 网站LNMP搭建过程:
    第一个历程: 软件安装部署 OK

    mariadb: 安装部署
    yum install -y mariadb-server mariadb

    PHP: 安装部署
    yum remove php-mysql php php-fpm php-common
    rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb

    第二个历程: 软件配置 测试过程
    nginx + php 建立关系
    php + mysql 建立关系 (代码信息)
    第三个历程: 手动代码上线
    代码使用开源代码:
    blog 博客: wordpress
    www 网站: dedecms
    bbs 论坛: discuz
    zhihu 知乎: wecenter

    云主机: 1台 域名:(备份) ssl证书: 免费 高并发: CDN
    nginx-不能yum安装(编译安装)

    第四个历程: 数据库迁移过程
    第五个历程: 实现数据共享存储

作业:

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

推荐阅读更多精彩内容