当前位置:首页 > 教程 > 正文内容

nginx过滤(nginx过滤referer)

2023-05-10 07:20:07教程1

nginx过滤

查看进程列表(条件过滤) Linux没运行一个程序就会产生一个进程,那么可以通过查看Nginx进程来判断它是否运行。

直接查看进程pid 这种直接返回pid的方式比较适合跟其他程序结合使用,

nginx过滤referer

  首先看一个完整代码示例,关于nginx 301 302跳转的。   301跳转设置:   server {   listen 80;   server_name downcc;   rewrite ^/(;   rewrite ^/(.*) /$1 permanent;   }   last – 基本上都用这个Flag。   break – 中止Rewirte,不在继续匹配   redirect – 返回临时重定向的HTTP状态302   permanent – 返回永久重定向的HTTP状态301   Nginx的重定向用到了Nginx的HttpRewriteModule,下面简单解释以下如何使用的方法:   rewrite命令   nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下:   rewrite 正则表达式 替换目标 flag标记   flag标记可以用以下几种格式:   last – 基本上都用这个Flag。   break – 中止Rewirte,不在继续匹配   redirect – 返回临时重定向的HTTP状态302   permanent – 返回永久重定向的HTTP状态301   特别注意:   last和break用来实现URL重写,浏览器地址栏的URL地址不变,但是在服务器端访问的路径发生了变化;   redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址;   例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,$2对应第二个括号(.*)中对应的字符串:   location /download/ {   rewrite ^(/download/.*)/m/(.*)..*$ $1/nginx-rewrite/$2.gz break;   }   nginx重定向的IF条件判断   在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种:   正则表达式   如:   匹配判断   ~ 为区分大小写匹配; !~为区分大小写不匹配   ~* 为不区分大小写匹配;!~为不区分大小写不匹配   例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:   if ($http_user_agent ~ MSIE) {   rewrite ^(.*)$ /nginx-ie/$1 break;   }   文件和目录判断   -f和!-f判断是否存在文件   -d和!-d判断是否存在目录   -e和!-e判断是否存在文件或目录   -x和!-x判断文件是否可执行   例如下面设定nginx在文件和目录不存在的时候重定向:   if (!-e $request_filename) {   proxy_pass 127.0.0.1;   }   return   返回http代码,例如设置nginx防盗链:   location ~* .(gifjpgpngswfflv)$ {   valid_referers none blocked ;   if ($invalid_referer) {   return 404;   }   }

nginx过滤header

获取url参数

在 ngx_lua 中访问 Nginx 内置变量 ngx.var.arg_PARAMETER 即可获得GET参数PARAMETER的内容。

在 nginx配置中,通过$arg_PARAMETER 即可获得GET参数PARAMETER的内容。

获取请求头

在 ngx_lua 中访问 Nginx 内置变量 ngx.var.http_HEADER 即可获得请求头HEADER的内容。

在 nginx配置中,通过$http_HEADER 即可获得请求头HEADER的内容。

通过以下方式进行验证,比如说,通过 http://www.test.com?name=hello&id=123 来验证url的请求参数,能够在nginx中获取到,只需要修改nginx.conf 配置文件如下,就可以在access.log中看到id和name在log中

http {

include mime.types;

default_type application/octet-stream;

log_format main '{ "@timestamp": "$time_iso8601", '

'"servername": "$http_host", '

'"id": "$arg_id",'

'"name": "$arg_name",'

'"remote_addr": "$remote_addr",'

'"referer": "$http_referer",'

'"request": "$request",'

'"request_time": "$request_time",'

'"status": $status,'

'"bytes":$body_bytes_sent,'

'"agent": "$http_user_agent",'

'"x_forwarded": "$http_x_forwarded_for",'

'"upstr_addr": "$upstream_addr",'

'"upstr_host": "$upstream_http_host",'

'"ups_resp_time": "$upstream_response_time" }';

access_log logs/access.log main;

server_names_hash_bucket_size 128;

nginx过滤请求

回答本行业问题

Linux下服务一般是通过shell脚本来启动程序或者服务,在shell脚本启动时,可以使用命令来查询,本服务或程序端口是否被其他程序占用,可以使用netstat命令。

netstat

比如我们查询80端口是否被占用,命令如下:

[root@api ~]# netstat -anp|grep 80

从上面可以看出80端口已经被nginx监听。

netstat具体的参数如下,【-a】显示所有的socket连接,【-n】不使用域名,而使用ip显示,【-p】显示监听此socket的进程名称,【grep】是过滤包含80字符的匹配项。

简单函数封装

我们在写脚本时尽量将经常使用的脚本封装成函数,以便其他程序也可以调用这个函数,如下面的脚本,实现端口的查询函数【入参1=端口】:

我们用几个端口测试一下,可以看出上面我的端口被nginx占用

良好的编写代码习惯

在linux编程写程序时,尽量不要将监听的端口、IP、网卡接口等可能会发生变化的参数,写死到代码中,可以定义一个配置文件,把经常变化的参数写入配置文件,在程序启动或者调用时,加载配置文件来读取参数。

以上回答希望能够帮助到你。

nginx过滤ip地址

要通过公网访问nginx服务器,你需要进行以下步骤:

1. 确认nginx服务器已经具有公网IP地址或者已经进行了外网映射,确保你已经了解NAT、反向代理等相关知识。

2. 确认在公网防火墙上打开该服务器所需的端口。nginx的默认端口为80和443,需要确保这两个端口没有被封闭。

3. 确认在nginx服务器的配置文件中,通过"listen"或“server”指令配置监听端口为公网可见的IP地址。

通过以上步骤,你就能够通过公网访问nginx服务器了。

nginx过滤地区

CentOS定位、查找文件的命令

定位、查找文件的命令

which 从path中找出文件的位置 find 找出所有符合要求的文件

whereis 找出特定程序的路径 locate   从索引中找出文件位置

1.which命令

语法:

which command

说明:

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。在找到第一个符合条件的程序文件时,就立刻停止搜索,省略其余未搜索目录。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

实例:

[root@localhost /]# which ls

alias ls='ls --color=auto'

/bin/ls

[root@localhost /]# which nginx

/usr/bin/nginx

2.whereis命令

语法:

whereis [option] name

说明:

找出特定程序的可执行文件、源代码文件以及manpage的路径。你所提供的name会被先除去前置的路径以及任何.ext形式的扩展名。

whereis 只会在标准的Linux目录中进行搜索。

常用选项

-b

只搜索可执行文件。

-m

只搜索manpage。

-s

只搜索源代码文件。

-B directory

更改或限定搜索可执行的文件的目录。

-M directory

更改或限定搜索manpage的目录。

-S directory

更改或限定搜索源代码文件的目录。

实例:

[root@localhost /]# whereis grep

grep: /bin/grep /usr/share/man/man1p/grep.1p.gz /usr/share/man/man1/grep.1.gz

[root@localhost /]# whereis -b nginx

nginx: /usr/bin/nginx /usr/local/nginx

3.find命令

语法:

find paths expression [action]

说明:

以paths为搜索起点逐层往下找出每一个符合expression条件的文件,并对该文件执行action所代表的动作。expression是搜索条件,它由一个代表匹配项目的选项以及一个代表匹配模式的参数构成。

$ find <指定目录> <指定条件> <指定动作>

  - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

  - <指定条件>: 所要搜索的文件的特征。

  - <指定动作>: 对搜索结果进行特定的处理。

如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

action是处理动作,它有一个代表“处理方式”的选项以及一个操作参数构成。若不指定action,则默认动作是显示出文件名。

常用的搜索条件

-name pattern 

-path pattern  

-lname pattern

找出名称、路径名称或符号链接的目标匹配pattern模式的文件。pattern可以包含shell的文件名通配符,路径是相对于搜索起点的。

常见处理动作

-print

显示出文件的相对路径(相对于搜索起点)。

-exec cmd /;

执行指定的shell命令。若cmd含有任何shell特殊字符,则他们之前都必须加上/符号,以免shell立刻执行他们。在cmd里,可以用”{}”符号(包括双引号)表示find所找出的文件。

1.按照文件名查找

    (1)find / -name httpd.conf  #在根目录下查找文件httpd.conf,表示在整个硬盘查找

    (2)find /etc -name httpd.conf  #在/etc目录下文件httpd.conf

    (3)find /etc -name '*srm*'  #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件

    (4)find . -name 'srm*'   #表示当前目录下查找文件名开头是字符串‘srm’的文件

    2.按照文件特征查找     

    (1)find / -amin -10   # 查找在系统中最后10分钟访问的文件(access time)

    (2)find / -atime -2   # 查找在系统中最后48小时访问的文件

    (3)find / -empty   # 查找在系统中为空的文件或者文件夹

    (4)find / -group cat   # 查找在系统中属于 group为cat的文件

    (5)find / -mmin -5   # 查找在系统中最后5分钟里修改过的文件(modify time)

    (6)find / -mtime -1   #查找在系统中最后24小时里修改过的文件

    (7)find / -user fred   #查找在系统中属于fred这个用户的文件

    (8)find / -size +10000c  #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)

    (9)find / -size -1000k   #查找出小于1000KB的文件

    3.使用混合查找方式查找文件

    参数有: !,-and(-a),-or(-o)。

    (1)find /tmp -size +10000c -and -mtime +2   #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件

         (2)find / -user fred -or -user george   #在/目录下查找用户是fred或者george的文件文件

         (3)find /tmp ! -user panda  #在/tmp目录中查找所有不属于panda用户的文件

实例:

[root@localhost /]# find / -name nginx.conf

/www/server/nginx/conf/nginx.conf

/www/server/nginx/src/conf/nginx.conf

[root@localhost /]# find /www/server/nginx/conf -name nginx.conf

/www/server/nginx/conf/nginx.conf

4.locate命令

语法:locate patterns

说明:

locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

实例:

[root@localhost /]# locate nginx.conf

/www/server/nginx/conf/nginx.conf

/www/server/nginx/conf/nginx.conf.default

/www/server/nginx/src/conf/nginx.conf

5.type命令

说明:

type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。

实例:

[root@localhost /]# type cd

cd is a shell builtin

[root@localhost /]# type ls

ls is aliased to `ls --color=auto'

[root@localhost /]# type grep

grep is /bin/grep

cd是shell的自带命令(build-in)

grep是一个外部命令,并显示该命令的路径。

[root@localhost /]# type -p grep

/bin/grep

加上-p参数后,就相当于which命令。

nginx过滤特殊字符

linux中更改用户权限和用户组可以使用chmod命令。

增加权限给当前用户 chmod +wx filename

chmod -R 777 /upload

用户组 chgrp -R foldname zdz

chown -R 所有者用户名.组名 文件夹名称

例如:chown -R zdz.nginx KooBox

语法:chmod [who] [+ | - | =] [mode] 文件名

命令中各选项的含义为

u 表示“用户(user)”,即文件或目录的所有者。

g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。

o 表示“其他(others)用户”。

a 表示“所有(all)用户”。它是系统默认值。

操作符号可以是:

+ 添加某个权限。

- 取消某个权限。

= 赋予给定权限并取消其他所有权限(如果有的话)。

设置mode所表示的权限可用下述字母的任意组合:

r 可读。

w 可写。

x 可执行。

X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。

s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。

t 保存程序的文本到交换设备上。

u 与文件属主拥有一样的权限。

g 与和文件属主同组的用户拥有一样的权限。

o 与其他用户拥有一样的权限。

实例

修改文件可读写属性的方法

例如:把index.html 文件修改为可写可读可执行:

chmod 777 index.html

要修改目录下所有文件属性可写可读可执行:

chmod 777 *.*

把文件夹名称与后缀名用*来代替就可以了。

比如:修改所有htm文件的属性:

chmod 777 *.htm

修改文件夹属性的方法

把目录 /images/small 修改为可写可读可执行

chmod 777 /images/small

nginx过滤url请求

nginx可以转发内网 url东西。有两种方法:

1、去掉匹配路径转发

匹配规则通常为二级路径,转发的时候过滤掉。

# 转发示例: # 请求:http://somedomain.com/system/path/request # 转发:http://otherdomain.com/path/request # location ^~ /system/ { proxy_pass http://otherdomain.com; }

2、完整路径转发

匹配规则二级路径转发的时候也带上。

# 转发示例 # 请求:http://somedomain.com/system/path/request # 转发:http://otherdomain.com/system/path/request # location ^~ /system { proxy_pass http://otherdomain.com; }

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98829698.html