您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

都快2021了,还不来了解下nginx吗?

时间:2020-12-11 15:05:57  来源:  作者:
都快2021了,还不来了解下nginx吗?

 

--Nginx全局变量、rewrite实战、nginx的location配置

 

一、nginx全局变量

nginx 主配置文件中的log_format,常用全局变量:

https://github.com/aminglinux/nginx/blob/master/rewrite/variable.md

都快2021了,还不来了解下nginx吗?

 

变量

说明

$args

请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2

$body_bytes_sent

服务器发送给客户端的响应body字节数

$content_length

HTTP请求信息里的"Content-Length"

$conten_type

HTTP请求信息里的"Content-Type"

$document_root

nginx虚拟主机配置文件中的root参数对应的值

$document_uri

当前请求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的$document_uri就是1.php,不包含后面的参数

$http_referer

记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置

$host

主机头,也就是域名

$http_user_agent

客户端的详细信息,也就是浏览器的标识,用curl -A可以指定

$http_cookie

客户端的cookie信息

$http_x_forwarded_for

当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置

$limit_rate

如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0

$remote_addr

客户端的公网ip

$remote_port

客户端的port

$remote_user

如果nginx有配置认证,该变量代表客户端认证的用户名

$request

请求的URI和HTTP协议,如“GET /article-10000.html HTTP/1.1”

$request_body_file

做反向代理时发给后端服务器的本地资源的名称

$request_method

请求资源的方式,GET/PUT/DELETE等

$request_filename

当前请求的资源文件的路径名称,相当于是$document_root/$document_uri的组合

$request_uri

请求的链接,包括$document_uri和$args

$scheme

请求的协议,如ftp,http,https

$server_protocol

客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等

$server_addr

服务器IP地址

$server_name

服务器的主机名

$server_port

服务器的端口号

$status

http状态码,记录请求返回的状态码,例如:200、301、404等

$uri

和$document_uri相同

$http_referer

客户端请求时的referer,通俗讲就是该请求是通过哪个链接跳过来的,用curl -e可以指定

$time_local

记录访问时间与时区,如18/Jul/2014:17:00:01 +0800

二、rewrite实战

域名跳转(域名重定向)

示例1(不带条件的):

server{
    listen 80;
    server_name www.a.com;
    root /data/wwwroot/www.a.com;
    index index.html;
    rewrite /(.*) http://www.b.com/$1 permanent;
}

访问a.com跳转到b.com

都快2021了,还不来了解下nginx吗?

 

示例2(带条件的):

server{
    listen 80;
    server_name www.a.com a.com;
    root /data/wwwroot/www.a.com;
    index index.html;
    if ($host != 'www.a.com')
    {
        rewrite /(.*) http://www.a.com/$1 permanent;
    }
}

通过判断条件,如果$host不等于www.a.com的,跳转到www.a.com

都快2021了,还不来了解下nginx吗?

 

示例3(http跳转到https):

server{
    listen 80;
    server_name www.a.com;
    root /data/wwwroot/www.a.com;
    index index.html;
    rewrite /(.*) https://www.a.com/$1 permanent;
}
都快2021了,还不来了解下nginx吗?

 

示例4(域名访问二级目录)

server{
    listen 80;
    server_name blog.a.com;
    index index.html;
    rewrite /(.*) http://www.a.com/blog/$1 permanent;
}
都快2021了,还不来了解下nginx吗?

 

示例5(静态请求分离)

server{
    listen 80;
    server_name www.a.com;
    location ~* ^.+.(jpg|jpeg|gif|css|png|js)$
    {
        rewrite /(.*) http://img.a.com/$1 permanent;
    }
    
}

或者:
server{
    listen 80;
    server_name www.a.com;
    index index.html;
    if ( $uri ~* 'jpg|jpeg|gif|css|png|js$')
    {
        rewrite /(.*) http://img.a.com/$1 permanent;
    }
}
都快2021了,还不来了解下nginx吗?

 

防盗链

示例6

server{
    listen 80;
    server_name www.a.com;
    location ~* ^.+.(jpg|jpeg|gif|css|png|js|rar|zip|flv)$
    {
        valid_referers none blocked server_names *.a.com a.com *.tobe.com tobe.com;
        if ($invalid_referer)
        {
            rewrite /(.*) http://img.a.com/images/forbidden.png;
        }
    }

    .......
    
}

说明:这里是通配,跟正则里面的不是一个意思,valid_referers定义白名单,none指的是referer不存在、为空的情况(curl -e 测试),
blocked指的是referer头部的值被防火墙或者代理服务器删除或者伪装的情况,
该情况下,referer头部的值不以http://或者https://开头(curl -e 后面跟的referer不以http://或者https://开头)。
或者:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|rar|zip|flv)$
    {
        valid_referers none blocked server_names *.a.com *.tobe.com a.com tobe.com;
        if ($invalid_referer)
        {
            return 403;
        }
    }

伪静态

示例7(discuz伪静态):

location /  {
    rewrite ^([^.]*)/topic-(.+).html$ $1/portal.php?mod=topic&topic=$2 last;
    rewrite ^([^.]*)/forum-(w+)-([0-9]+).html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
    rewrite ^([^.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
    rewrite ^([^.]*)/group-([0-9]+)-([0-9]+).html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
    rewrite ^([^.]*)/space-(username|uid)-(.+).html$ $1/home.php?mod=space&$2=$3 last;
    rewrite ^([^.]*)/(fid|tid)-([0-9]+).html$ $1/index.php?action=$2&value=$3 last;
}

rewrite多个条件的并且

示例8:

location /{
    set $rule 0;  #值为0
    if ($document_uri !~ '^/abc')  #!~不匹配以abc开头的
    {
        set $rule "${rule}1";  #01
    }
    if ($http_user_agent ~* 'ie6|firefox')
    {
       set $rule "${rule}2";  #012
    }
    if ($rule = "012")
    {
        rewrite /(.*) /abc/$1 redirect;
    }
}

当满足两个条件不以abc开头,并且http_user_agent为ie6或firefox时,跳转到http://www.a.com/aaa/,不满足其中的一个条件时,返回了404

都快2021了,还不来了解下nginx吗?

 

三、nginx的location配置

安装第三方模块echo-nginx-module

cd /usr/local/src/
git clone https://github.com/openresty/echo-nginx-module.git

nginx编译安装后的操作:

cd /usr/local/src/nginx-1.16.1

重新编译

./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/echo-nginx-module

make && make install

/usr/local/nginx/sbin/nginx -V

测试中使用,可以在虚拟主机配置文件中直接使用,如:echo 123;

都快2021了,还不来了解下nginx吗?

 

location语法:

nginx location语法规则:location [=|~|~*|^~] /uri/ { … }
nginx的location匹配的变量是$uri

符号说明=表示精确匹配^~表示uri以指定字符或字符串开头~表示区分大小写的正则匹配~*表示不区分大小写的正则匹配/通用匹配,任何请求都会匹配到

规则优先级:

=  高于  ^~  高于  ~* 等于 ~  高于  /

规则示例:

location = "/12.jpg" { ... }
如:
www.a.com/12.jpg 匹配
www.a.com/abc/12.jpg 不匹配

location ^~ "/abc/" { ... }
如:
www.a.com/abc/123.html 匹配
www.a.com/a/abc/123.jpg 不匹配

location ~ "png" { ... }
如:
www.a.com/aaa/bbb/ccc/123.png 匹配
www.a.com/aaa/png/123.html 匹配

location ~* "png" { ... }
如:
www.a.com/aaa/bbb/ccc/123.PNG 匹配
www.a.com/aaa/png/123.html 匹配

location /admin/ { ... }
如:
www.a.com/admin/aaa/1.php 匹配
www.a.com/123/admin/1.php 不匹配

小常识:

有些资料上介绍location支持不匹配 !~,
如: location !~ 'png'{ ... }
这是错误的,location不支持 !~

如果有这样的需求,可以通过if来实现,
如: if ($uri !~ 'png') { ... }

注意:location优先级小于if


Tags:nginx   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  Tags: nginx  点击:(7)  评论:(0)  加入收藏
前言Nginx是前后端开发工程师必须掌握的神器。该神器有很多使用场景,比如反向代理、负载均衡、动静分离、跨域等等。把 Nginx下载下来,打开conf文件夹的nginx.conf文件,Nginx服...【详细内容】
2021-12-08  Tags: nginx  点击:(18)  评论:(0)  加入收藏
最近客户有个新需求,就是想查看网站的访问情况,由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的页...【详细内容】
2021-10-09  Tags: nginx  点击:(48)  评论:(0)  加入收藏
安全服务器是只允许所需数量的服务器。理想情况下,我们将通过单独启用其他功能来基于最小系统构建服务器。进行最少的配置也有助于调试。如果该错误在最小系统中不可用,则分别...【详细内容】
2021-09-26  Tags: nginx  点击:(60)  评论:(0)  加入收藏
在今年的NGINX Sprint 2.0虚拟大会上,NGINX(来自流行的开源web服务器/负载均衡器和反向代理背后的公司F5),发布了NGINX现代应用参考架构(MARA)。该公司在一篇博客文章中说,这将帮...【详细内容】
2021-09-26  Tags: nginx  点击:(60)  评论:(0)  加入收藏
Ubuntu下安装Nginx一、系统基本信息查看1、查看Ubuntu版本信息:使用命令:cat /proc/version 查看~$ cat /proc/versionLinux version 4.15.0-106-generic (buildd@lcy01-amd6...【详细内容】
2021-09-16  Tags: nginx  点击:(60)  评论:(0)  加入收藏
出于安全审查或者对于系统安全性的要求,都要求我们生产环境部署的系统需要做一定的权限控制。那么如何简单快速地部署满足安全要求的权限系统呢?其实可以通过nginx的相关功能...【详细内容】
2021-09-07  Tags: nginx  点击:(69)  评论:(0)  加入收藏
什么是NginxNginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,高并发特点强。1、处理静态文件,索引文件以及自动检索打开文件描述符缓冲2、无缓冲的反向代理加速...【详细内容】
2021-09-02  Tags: nginx  点击:(70)  评论:(0)  加入收藏
本文适用于 php7.4+NGINX环境,适用于运行 wordpress 环境一、更新服务器sudo apt update二、命令快捷缩写设置通过ssh登录服务器,在用户目录下执行以下命令sudo nano .bashrca...【详细内容】
2021-08-31  Tags: nginx  点击:(87)  评论:(0)  加入收藏
一、nginx正向代理介绍及配置(需要在客户端配置代理服务器进行指定网站访问)#模块 ngx_http_proxy_module: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy...【详细内容】
2021-08-16  Tags: nginx  点击:(75)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(8)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条