04.Nginx基本配置3

一. URL重写

  • URL重写是指将一个URL请求重新写成网站可以处理的另一个URL的过程。如将http://www.demo.com/product?id=1重写成http://www.demo.com/product/1的样式,以便SEO更好的收录。

1. 指令语法:

server { 
    rewrite 规则 定向路径 重写类型; 
}
  • 规则 :可以使用正则或者字符串来表示相匹配的地址。
  • 定向路径 :表示匹配到规则后要定向的路径,如果规则里有正则,则可以使用$index来表示正则里的捕获分组
  • 重写类型
    • last:停止处理当前的rewrite指令集,而后通过重写后的规则重新发起请求,浏览器地址栏URL地址不变。
    • break:停止处理当前上下文中的其他重写模块指令 (直接生效并停止后续的匹配location)。
    • redirect:如果替换字符串不以“ http://”,“ https://”或“ $scheme” 开头,返回带有302代码的临时重定向,浏览器地址会显示跳转后的URL地址。
    • permanent:返回301代码的永久重定向,浏览器地址栏会显示跳转后的URL地址。

示例:

server {
    # 访问 /last.html 的时候,页面内容重写到 /index.html 中
    rewrite /last.html /index.html last;

    # 访问 /break.html 的时候,页面内容重写到 /index.html 中,并停止后续的匹配
    rewrite /break.html /index.html break;

    # 访问 /redirect.html 的时候,页面直接302定向到 /index.html中
    rewrite /redirect.html /index.html redirect;

    # 访问 /permanent.html 的时候,页面直接301定向到 /index.html中
    rewrite /permanent.html /index.html permanent;

    # 把 /html/*.html => /post/*.html ,301定向
    rewrite ^/html/(.+?).html$ /post/$1.html permanent;

    # 把 /search/key => /search.html?keyword=key
    rewrite ^/search\/([^\/]+?)(\/|$) /search.html?keyword=$1 permanent;
}

2. 条件判断

  • 使用“ =”和“ !=”运算符比较变量和字符串;
  • 正则表达式匹配,*不区分大小写的匹配,!~区分大小写的不匹配

内置的条件判断:

  • -f/!-f用来判断是否存在文件
  • -d/!-d用来判断是否存在目录
  • -e/!-e用来判断是否存在文件或目录
  • -x/!-x用来判断文件是否可执行

内置的全局变量:

  • $args :这个变量等于请求行中的参数,同$query_string
  • $content_length : 请求头中的Content-length字段。
  • $content_type : 请求头中的Content-Type字段。
  • $document_root : 当前请求在root指令中指定的值。
  • $host : 请求主机头字段,否则为服务器名称。
  • $http_user_agent : 客户端agent信息
  • $http_cookie : 客户端cookie信息
  • $limit_rate : 这个变量可以限制连接速率。
  • $request_method : 客户端请求的动作,通常为GET或POST。
  • $remote_addr : 客户端的IP地址。
  • $remote_port : 客户端的端口。
  • $remote_user : 已经经过Auth Basic Module验证的用户名。
  • $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
  • $scheme : HTTP方法(如http,https)。
  • $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
  • $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
  • $server_name : 服务器名称。
  • $server_port : 请求到达服务器的端口号。
  • $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
  • $uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
  • $document_uri : 与$uri相同。

示例:

server {
    # 如果文件不存在则返回400
    if (!-f $request_filename) {
        return 400;
    }

    # 如果host不是xuexb.com,则301到xuexb.com中
    if ( $host != "xuexb.com" ){
        rewrite ^/(.*)$ https://xuexb.com/$1 permanent;
    }

    # 如果请求类型不是POST则返回405
    if ($request_method = POST) {
        return 405;
    }

    # 如果参数中有 a=1 则301到指定域名
    if ($args ~ a=1) {
        rewrite ^ http://example.com/ permanent;
    }

    if ($http_user_agent ~ MSIE) {
        rewrite ^(.*)$ /msie/$1 break;
    }

    if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
        set $id $1;
    }
    
    # 访问 /test.html 时
    location = /test.html {
        # 默认值为xiaowu
        set $name xiaowu;

        # 如果参数中有 name=xx 则使用该值
        if ($args ~* name=(\w+?)(&|$)) {
            set $name $1;
        }

        # 301
        rewrite ^ /$name.html permanent;
    }
}

二. 数据压缩

  • gzip on; #开启gzip压缩输出
  • gzip _min_length 1k; #用于设置允许压缩的页面最小字节数
  • gzip_buffers 4 16k; #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间存贮gzip压缩结果
  • gzip_http_version 1.0; #设置识别http协议版本,默认是1.1
  • gzip_comp_level 2; #gzip压缩比, 1-9等级
  • gzip_types text/plain text/javascript application/x-javascrip t text/css text/xml application/xml application/xml+rss; #压缩类型,就是对哪些网页文档启用压缩功能
  • gzip_vary on; #选项可以让前缀的缓存服务器经过gzip压缩的页面

示例:

gzip on;
gzip_min_length 200;
gzip_buffers 32 4k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/javascript application/css text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
curl -I -H "Accept-Encoding: gzip, deflate" "http://39.108.73.162:8082/vendor.js"

三. 动静分离

在这里插入图片描述

worker_processes       1;

events {
    worker_connections     1024;
}

http {
    server {
        listen                80;
        server_name           www.demo.com;

        #应用程序
        location / {
            root                 /data/www/demo;
            index                index.php index.html index.htm;
            #add_header           'Access-Control-Allow-Origin' '*';
            expires              30d;
        }

        #静态资源
        location ~ .*\.(htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
            proxy_next_upstream  http_502 http_504 error timeout invalid_header;
            proxy_set_header     Host $host;
            proxy_set_header     X-Real-IP $remote_addr;
            proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass           http://www.asset.com;
        }
        error_page            404 /error.html;
    }

    server {
        listen                80;
        server_name           www.asset.com;
        location / {
            root                 /data/www/asset;
        }
        error_page            404 /error.html;
    }
}

index.html

<html>
  <title>动静分离</title>
  <body>
        <img src="http://www.asset.com/images/a.png"/>
  </body>
</html>

参考:
https://blog.csdn.net/qq_33257527/article/details/86446411
https://www.cnblogs.com/jiuyi/archive/2019/04/11/10690456.html
http://www.ruanyifeng.com/blog/2018/03/http2_server_push.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值