志宇-Nginx学习
Nginx
- nginx如何去处理一个请求
- Nginx可用性探测
- Nginx搭建静态资源服务器
- Nginx配置https服务
- Nginx流量统计
- Nginx黑白名单拦截
- 异常兜底返回
- OpenResty的学习
- LVS + KeepLived了解
nginx如何去处理一个请求
How nginx processes a request
首先根据请求的域名向server节点寻找匹配的server_name,找到最匹配的server后,然后在此server节点中根据请求的url寻找一个最匹配的location,然后在location找到对应要访问的upstream,location中设定了可以携带的请求头,带着可以携带的请求头以upstream 中配置的策略访问节点
location中对的url匹配规则(寻找最精准的进行匹配)
nginx中可以使用哪些变量
名称 说明 $arg_name 请求中的name参数 $args 请求中的参数 $content_length HTTP 请求信息里的"Content-Length" $content_type 请求信息里的"Content-Type" $host 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名 $hostname 机器名使用 gethostname系统调用的值 $http_cookie cookie 信息 $http_referer 引用地址 $http_user_agent 客户端代理信息 $http_via 最后一个访问服务器的Ip地址。 $http_x_forwarded_for 相当于网络访问路径 $is_args 如果请求行带有参数,返回“?”,否则返回空字符串 $limit_rate 对连接速率的限制 $nginx_version 当前运行的nginx版本号 $pid worker进程的PID $query_string 与$args相同 $remote_addr 客户端IP地址 $remote_port 客户端端口号 $request 用户请求 $request_method 请求的方法,比如"GET"、"POST"等 $request_uri 请求的URI,带参数 $scheme 所用的协议,比如http或者是https $server_name 请求到达的服务器名 $server_port 请求到达的服务器端口号 $server_protocol 请求的协议版本,"HTTP/1.0"或"HTTP/1.1" $uri 请求的URI,可能和最初的值有不同,比如经过重定向之类的简单使用如下
events { #在linux系统上使用这种模式会提高很大效率use epoll;#连接最大数为(worker_connections * worker_processes)worker_connections 1024; } server{...#5简单防爬配置if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot") {return 403;}location / { # 1 允许代理节点获得请求头中的信息# 用户的真实ip,如果不配置此信息代理节点获得不到用户的ipproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#2 解决跨域配置#允许跨域请求的域,*和$http_origin 代表所有#不然会报No 'Access-Control-Allow-Origin' header is present on #the requested resource. Origin 'null' is therefore not allowed access.add_header 'Access-Control-Allow-Origin' $http_origin;#允许带上cookie请求add_header 'Access-Control-Allow-Credentials' 'true';#允许携带哪些headeradd_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';#允许请求的方法,比如 GET/POST/PUT/DELETEadd_header Access-Control-Allow-Methods 'GET,POST,OPTIONS'; #3 如果预检请求则返回成功,不需要转发到后端,节约资源if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 200;}#4 防盗链设置valid_referers none blocked www.lizhiyu.xyz;if ($invalid_referer) {#或者永久重定向本网站首页return 403;}#valid_referers: 指定资源访问是通过以下几种方式为合法,即白名单。#none:允许缺失的头部访问。#blocked:允许referer没有对应值的请求。#server_names:若referer站点域名与server_name中本机配的域名一样允许访问。} }Nginx可用性探测
Nginx可以配置一些策略,来实现反向代理,如果反向代理的节点不可用,Nginx则在固定间内不会再去访问这个节点
这个固定时间和定义代理节点不可用配置如下
proxy_next_upstream说明
max_fails,fail_timeout,backup, down说明
Nginx搭建静态资源服务器
将1.jpg文件放到/software/img目录下
然后访问https://www.lizhiyu.xyz/img/1.jpg即可下载图片
配置文件如下
Nginx配置https服务
安装依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
刪除安裝过的包,然后重新安装nginx(因为需要安装ssl模块)
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
配置文件如下
Nginx流量统计
access.log 日志记录格式如下
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' $request_time;
access日志记录格式选为为main
access_log logs/access.log main;
查看访问最频繁的前100个IP
awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100
统计访问最多的url 前20名
cat access.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -20 | more
统计耗时接口, 列出传输时间超过 2 秒的接口,显示前5条
cat access.log|awk '($NF > 2){print $7}'|sort -n|uniq -c|sort -nr|head -5
备注:$NF 表示最后一列, awk ‘{print $NF}’
Nginx黑白名单拦截
nginx.conf配置文件中配置如下
全局异常兜底数据返回
nginx.conf和blacklist.conf在同级目录下,blacklist.conf配置如下
{#配置禁止访问的ip(再次访问会返回403状态码)deny 192.168.8.113;deny 106.121.65.84; }配置完成后执行./nginx.conf -s reload命令
执行完这个命令master进程会通知 worker进程执行完当前任务后关闭
master去加载完配置文件再创建新的 worker进程执行任务
异常兜底返回
为了防止后端出现错误返回错误信息,在nginx层面对错误信息进行拦截
配置信息如下
OpenResty的学习
由于Nginx是用c语言编写,想要扩展Nginx就要书写c语言(不易于扩展),使用OpenResty可以对Nginx通过lua脚本进行扩展,例如lua脚本操作redis等
介绍: OpenResty中自带Nginx,同时提供了一些插件
安装
使用
openResty会分为多个阶段按顺序处理每一个请求,主要包括如下阶段
init_by_lua_file 初始化阶段
init_worker_by_lua_file 初始化worker阶段
rewrite_by_lua_file 重定向阶段
access_by_lua_file 访问控制阶段
content_by_lua_file内容生成阶段
简单的使用
停止
./nginx -s stop
启动
./nginx -c /usr/local/openresty/nginx/conf/nginx.conf
重新加载
./nginx -s reload
LVS + KeepLived了解
总结
以上是生活随笔为你收集整理的志宇-Nginx学习的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: openLDAP安装经验分享
- 下一篇: Nginx+tomcat集群