志宇-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安装经验分享
- 下一篇: 志宇-nexus学习