• Nginx使用


    一、第三方模块使用

    nginx本身官方没有的功能,可以通过加载第三方模块的方式,使用新的功能
    第三方模块网址:https://www.nginx.com/resources/wiki/modules
    编译安装第三方模块:
    ①上传第三方模块压缩包,并解压
    ngx-fancyindex-v0.4.3.tar.gz
    ②编译升级安装,并升级
    shell > tar zxvf ngx-fancyindex-v0.4.3.tar.gz
    shell > tar xvf echo-nginx-module-0.61.tar.gz
    shell > cd /root/soft/nginx-1.16.0
    shell > ./configure  --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --add-
    module=/root/soft/ngx-fancyindex-0.4.3/ --add-module=/root/soft/echo-nginx-module-0.61
    shell > make && make install && make upgrade
    1、fancy-index模块
    使用第三方模块插件,美化列表显示效果
    https://www.nginx.com/resources/wiki/modules/fancy_index/
    https://github.com/aperezdc/ngx-fancyindex
    第三方模块列表显示效果

    实现操作步骤:
    ①重新编译安装加载第三方模块
    安装完成之后

    ②配置实现

    ③测试查看效果
    测试配置文件,进行重载配置[如果是新编译的软件,就需要重启,因为旧的版本里没有加入新的第三方模块]。如果模块安装完成,配置成功,就可以看到之前图片的效果了

    2、echo模块
    作用:echo模块常用来进行调试用,比如输出打印Nginx默认系统变量
    测试使用echo模块
    ①修改配置文件

    ②重载配置查看输出信息

    二、发行版本
    1、Nginx社区免费版
    https://nginx.org/
    2、NGINX+商业版
    https://www.nginx.com/
    3、淘宝的tengine
    http://tengine.taobao.org/
    tengine是alibaba公司,在nginx的基础上,开发定制,更加服务自己业务的服务器软件。后来进行了开源。
    shell > tar xvf tengine-2.2.2.tar.gz
    shell > cd tengine-2.2.2
    shell > ./configure --prefix=/usr/local/tengine
    shell > make && make install
    查看软件参数和加载的模块

    4、OpenResty
    openresty 在nginx的基础上,结合lua脚本实现高并发等web平台。
    WAF nginx+lua+redis 实现应用型防火墙
    学习网址:http://openresty.org/cn/
    安装步骤:
    shell > tar xvf openresty-1.13.6.2.tar.gz
    shell > cd openresty-1.13.6.2
    shell > ./configure --prefix=/usr/local/openresty
    shell > make && make install
    openresty实际还是指向nginx,做了一个软连接

    查看版本号和默认编译参数

    测试使用一下模块功能
    使用lua模块输出一个页面文字信息

    三、URL匹配之location
    Location 配置语法
    http://nginx.org/en/docs/http/ngx_http_core_module.html#location
    1、location [ = | ~ | ~* | ^~ ] uri { ... }
    前缀+uri(字符串/正则表达式)
    前缀的含义:
    = :精确匹配(必须全部相等)
    ~ :大小写敏感
    ~* :忽略大小写
    ^~ :只需匹配uri部分
    @ :内部服务跳转


    ① = 精确匹配
    location = / {
      #规则
    }
    则匹配到 http://www.example.com/ 这种请求
    ② ~ 大小写敏感
    location ~ /Example/ {
      #规则
    }
    请求示例 http://www.example.com/Example/ [成功] http://www.example.com/example/ [失败]
    ③ ~* 大小写忽略
    location ~* /Example/ {
      #规则
    }
    请求示例 http://www.example.com/Example/ [成功] http://www.example.com/example/ [成功]
    ④ ^~ 只匹配以 uri 开头
    location ^~ /img/ {
      #规则
    }
    请求实例 以 /img/ 开头的请求,都会匹配上 http://www.example.com/img/a.jpg [成功]
    http://www.example.com/img/b.mp4 [成功]
    http://www.example.com/bimg/b.mp4 [失败]
    http://www.example.com/Img/b.mp4 [失败]
    2、location @name { ... } @+name @,nginx内部跳转
    location /img/ {
      error_page 404 = @img_err;
    }  
    location @img_err {  
      # 规则
      return  503;
    }

    以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上 location匹配优先级
    如果路径是资源文件是存在的,会优先获取资源文件
    (location =) > (location 完整路径) > (location ^~ 路径) > (location , * 正则顺序) > (location 部分起始路径) >
    (/)
    四、URL重写
    ngx_http_rewrite_module模块用于使用PCRE正则表达式更改请求URI,返回重定向,以及有条件地选择配置
    1、return
    return 语法
    返回服务器的状态码
    语法:
    return 服务器状态值
    该指令用于结束规则的执行并返回状态码给客户端.
    403 Forbidden.服务器已经理解请求,但是拒绝执行它
    404 Not Found.请求失败,请求所希望得到的资源未在服务器上发现.404这个状态码被⼴泛应⽤于当服务器不
    想揭示为何请求被拒绝,或者没有其他适合的响应可⽤的情况下.
    500 Internal Server Error.服务器遇到⼀个未曾预料的状况,导致它无法完成对请求的处理.⼀般来说,这个问题
    都会在服务器的程序码出错时出现.
    502 Bad Gateway.作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应.
    503 Service Unavailable.由于临时的服务器维护或过载,服务器当前无法处理请求.这个状况是临时的,并且将
    在一段时间以后恢复.503状态码的存在并不意味着服务器在过载的时候必须使⽤它.某些服务器只不过是希望
    拒绝客户端的连接.
    504 Gateway Timeout作为网关或代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服
    务器,例如HTTP,FTP,LDAP)或辅助服务器(例如DNS)收到响应。
    请求状态码:
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
    2、rewrite
    rewrite语法 匹配到,替换为其他内容
    语法 rewrite 匹配内容 替代内容 标记
    官方文档地址:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
    flag标记说明:
    last #本条规则匹配完成后,继续向下匹配新的location URI规则
    break #本条规则匹配完成即终止,不再匹配后面的任何规则
    上面两个flag,客户端URL地址不会改变
    下面两个flag,客户端的URL地址会发生改变
    redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
    permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址多条rewrite,从上到下匹配,匹配到之后就不在匹配其他rewrite规则。
    五、URL相关案例实现
    1、案例:资源重定向实现
    需求:
    访问index.html,实际访问到index.php,实现伪静态
    ①修改配置
    vim /usr/local/nginx/conf/nginx.conf

    ③重载配置测试访问
    默认配置是转发,index.html不存在

     

    配置之后效果

     

    总结:实际不存在的文件,通过重写URI规则,定向到一个存在的文件。
    这个在实际工作中,常常用来seo优化的伪静态的使用。实际是要把真实的后端的页面,伪装为静态html页面。
    2、案例:域名重定向实现
    需求:
    把旧域名的来源,重定向到新的域名。

    shop.devops.com升级域名到www.shop.com 需要用户之后记住新域名,并使用。使用重定向实现,并且url也要跳转显示。

    3、案例:防盗链原理和实现
    需求:
    web1服务器上资源文件
    web2服务器经常链接显示web1服务器图片
    用户经常访问web2服务器的图片,以为是web2自己的,结果web1每次耗费很多流量。
    实际web1没有从中获得效益
    解决方案:
    ①图片加水印
    ②通过判断referer来源,确定是否返回对应的资源文件
    referer 本次请求的上次连接是什么 上次的来源
    语法:
    valid_referers none blocked servername
    none blocked 没有referfer的情况,直接访问资源的情况
    if ($invalid_referer) {}
    通过IP访问的server 页面中引入了shop域名的资源文件
    配置shop的server端,判断来源,如果来源和shop的域名不一致,就不返回资源

    六、安全
    1、反向代理
    实现隐藏真实服务的操作,起到一定安全作用
    2、隐藏版本号
    ①在http段加入server_tokens off

    ②重载配置测试访问

    3、CA https
    ssh 公钥 和 私钥 8个步骤
    https 是http的一个加密协议,基于ssl套接字,把传输的信息进行加密。默认端口443
    CA 证书 部署https的时候,需要购买申请(还有一些免费)
    慢是因为,每次进行访问的时候,需要校验证书的有效性。连接国外的机构校验。网慢
    https://www.cnblogs.com/tv151579/p/8268356.html
    https://my.oschina.net/zijian1315/blog/207311
    腾讯云免费证书申请和使用:
    https://cloud.tencent.com/product/ssl/getting-started
    https://cloud.tencent.com/document/product/400/4143

  • 相关阅读:
    挂载nfs网络共享目录到本地目录报错
    ubuntu18.04,centos7.7下安装nfs详细步骤
    linux的fstab配置文件
    nginx整合php后,浏览器访问.php文件报错
    centos中安装php7.3.13(目前最新版)
    skills_nginx
    problems_ubuntu
    problems_nginx
    docker中部署halo
    数论学习
  • 原文地址:https://www.cnblogs.com/golinux/p/10933256.html
Copyright © 2020-2023  润新知