志宇-Nginx学习
Nginx
- nginx如何去處理一個(gè)請(qǐng)求
- Nginx可用性探測(cè)
- Nginx搭建靜態(tài)資源服務(wù)器
- Nginx配置https服務(wù)
- Nginx流量統(tǒng)計(jì)
- Nginx黑白名單攔截
- 異常兜底返回
- OpenResty的學(xué)習(xí)
- LVS + KeepLived了解
nginx如何去處理一個(gè)請(qǐng)求
How nginx processes a request
首先根據(jù)請(qǐng)求的域名向server節(jié)點(diǎn)尋找匹配的server_name,找到最匹配的server后,然后在此server節(jié)點(diǎn)中根據(jù)請(qǐng)求的url尋找一個(gè)最匹配的location,然后在location找到對(duì)應(yīng)要訪問(wèn)的upstream,location中設(shè)定了可以攜帶的請(qǐng)求頭,帶著可以攜帶的請(qǐng)求頭以u(píng)pstream 中配置的策略訪問(wèn)節(jié)點(diǎn)
location中對(duì)的url匹配規(guī)則(尋找最精準(zhǔn)的進(jìn)行匹配)
nginx中可以使用哪些變量
名稱 說(shuō)明 $arg_name 請(qǐng)求中的name參數(shù) $args 請(qǐng)求中的參數(shù) $content_length HTTP 請(qǐng)求信息里的"Content-Length" $content_type 請(qǐng)求信息里的"Content-Type" $host 請(qǐng)求信息中的"Host",如果請(qǐng)求中沒(méi)有Host行,則等于設(shè)置的服務(wù)器名 $hostname 機(jī)器名使用 gethostname系統(tǒng)調(diào)用的值 $http_cookie cookie 信息 $http_referer 引用地址 $http_user_agent 客戶端代理信息 $http_via 最后一個(gè)訪問(wèn)服務(wù)器的Ip地址。 $http_x_forwarded_for 相當(dāng)于網(wǎng)絡(luò)訪問(wèn)路徑 $is_args 如果請(qǐng)求行帶有參數(shù),返回“?”,否則返回空字符串 $limit_rate 對(duì)連接速率的限制 $nginx_version 當(dāng)前運(yùn)行的nginx版本號(hào) $pid worker進(jìn)程的PID $query_string 與$args相同 $remote_addr 客戶端IP地址 $remote_port 客戶端端口號(hào) $request 用戶請(qǐng)求 $request_method 請(qǐng)求的方法,比如"GET"、"POST"等 $request_uri 請(qǐng)求的URI,帶參數(shù) $scheme 所用的協(xié)議,比如http或者是https $server_name 請(qǐng)求到達(dá)的服務(wù)器名 $server_port 請(qǐng)求到達(dá)的服務(wù)器端口號(hào) $server_protocol 請(qǐng)求的協(xié)議版本,"HTTP/1.0"或"HTTP/1.1" $uri 請(qǐng)求的URI,可能和最初的值有不同,比如經(jīng)過(guò)重定向之類的簡(jiǎn)單使用如下
events { #在linux系統(tǒng)上使用這種模式會(huì)提高很大效率use epoll;#連接最大數(shù)為(worker_connections * worker_processes)worker_connections 1024; } ? server{...#5簡(jiǎn)單防爬配置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 允許代理節(jié)點(diǎn)獲得請(qǐng)求頭中的信息# 用戶的真實(shí)ip,如果不配置此信息代理節(jié)點(diǎn)獲得不到用戶的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 解決跨域配置#允許跨域請(qǐng)求的域,*和$http_origin 代表所有#不然會(huì)報(bào)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請(qǐng)求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';#允許請(qǐng)求的方法,比如 GET/POST/PUT/DELETEadd_header Access-Control-Allow-Methods 'GET,POST,OPTIONS'; ?#3 如果預(yù)檢請(qǐng)求則返回成功,不需要轉(zhuǎn)發(fā)到后端,節(jié)約資源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 防盜鏈設(shè)置valid_referers none blocked www.lizhiyu.xyz;if ($invalid_referer) {#或者永久重定向本網(wǎng)站首頁(yè)return 403;}#valid_referers: 指定資源訪問(wèn)是通過(guò)以下幾種方式為合法,即白名單。#none:允許缺失的頭部訪問(wèn)。#blocked:允許referer沒(méi)有對(duì)應(yīng)值的請(qǐng)求。#server_names:若referer站點(diǎn)域名與server_name中本機(jī)配的域名一樣允許訪問(wèn)。} }Nginx可用性探測(cè)
Nginx可以配置一些策略,來(lái)實(shí)現(xiàn)反向代理,如果反向代理的節(jié)點(diǎn)不可用,Nginx則在固定間內(nèi)不會(huì)再去訪問(wèn)這個(gè)節(jié)點(diǎn)
這個(gè)固定時(shí)間和定義代理節(jié)點(diǎn)不可用配置如下
proxy_next_upstream說(shuō)明
max_fails,fail_timeout,backup, down說(shuō)明
Nginx搭建靜態(tài)資源服務(wù)器
將1.jpg文件放到/software/img目錄下
然后訪問(wèn)https://www.lizhiyu.xyz/img/1.jpg即可下載圖片
配置文件如下
Nginx配置https服務(wù)
安裝依賴
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
刪除安裝過(guò)的包,然后重新安裝nginx(因?yàn)樾枰惭bssl模塊)
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
配置文件如下
Nginx流量統(tǒng)計(jì)
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;
查看訪問(wèn)最頻繁的前100個(gè)IP
awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100
統(tǒng)計(jì)訪問(wèn)最多的url 前20名
cat access.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -20 | more
統(tǒng)計(jì)耗時(shí)接口, 列出傳輸時(shí)間超過(guò) 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配置文件中配置如下
全局異常兜底數(shù)據(jù)返回
nginx.conf和blacklist.conf在同級(jí)目錄下,blacklist.conf配置如下
{#配置禁止訪問(wèn)的ip(再次訪問(wèn)會(huì)返回403狀態(tài)碼)deny 192.168.8.113;deny 106.121.65.84; }配置完成后執(zhí)行./nginx.conf -s reload命令
執(zhí)行完這個(gè)命令master進(jìn)程會(huì)通知 worker進(jìn)程執(zhí)行完當(dāng)前任務(wù)后關(guān)閉
master去加載完配置文件再創(chuàng)建新的 worker進(jìn)程執(zhí)行任務(wù)
異常兜底返回
為了防止后端出現(xiàn)錯(cuò)誤返回錯(cuò)誤信息,在nginx層面對(duì)錯(cuò)誤信息進(jìn)行攔截
配置信息如下
OpenResty的學(xué)習(xí)
由于Nginx是用c語(yǔ)言編寫,想要擴(kuò)展Nginx就要書寫c語(yǔ)言(不易于擴(kuò)展),使用OpenResty可以對(duì)Nginx通過(guò)lua腳本進(jìn)行擴(kuò)展,例如lua腳本操作redis等
介紹: OpenResty中自帶Nginx,同時(shí)提供了一些插件
安裝
使用
openResty會(huì)分為多個(gè)階段按順序處理每一個(gè)請(qǐng)求,主要包括如下階段
init_by_lua_file 初始化階段
init_worker_by_lua_file 初始化worker階段
rewrite_by_lua_file 重定向階段
access_by_lua_file 訪問(wèn)控制階段
content_by_lua_file內(nèi)容生成階段
簡(jiǎn)單的使用
停止
./nginx -s stop
啟動(dòng)
./nginx -c /usr/local/openresty/nginx/conf/nginx.conf
重新加載
./nginx -s reload
LVS + KeepLived了解
總結(jié)
以上是生活随笔為你收集整理的志宇-Nginx学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: openLDAP安装经验分享
- 下一篇: Nginx+tomcat集群