亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

nginx可以給html自定義嗎?

2024-08-30 12:23:40
字體:
來源:轉載
供稿:網友
  Lua是一個可以嵌入到Nginx配置文件中的動態腳本語言,從而可以在Nginx請求處理的任何階段執行各種Lua代碼。剛開始我們只是用Lua 把請求路由到后端服務器,但是它對我們架構的作用超出了我們的預期。下面就講講我們所做的工作。
  強制搜索引擎只索引mixlr.com:
  Google把子域名當作完全獨立的網站,我們不希望爬蟲抓取子域名的頁面,降低我們的Page rank。
  location /{
  header_filter_by_lua '
  if ngx.var.query_string and ngx.re.match( ngx.var.query_string, "^([0-9]{10})$" ) then
  ngx.header["Expires"] = ngx.http_time( ngx.time() + 31536000 );
  ngx.header["Cache-Control"] = "max-age=31536000";
  end
  ';
  如果對robots.txt的請求不是mixlr.com域名的話,則內部重寫到robots_diallow.txt,雖然標準的重寫指令也可以實現這個需求,但是 Lua的實現更容易理解和維護。
  根據程序邏輯設置響應頭:
  Lua提供了比Nginx默認配置規則更加靈活的設置方式。 在下面的例子中,我們要保證正確設置響應頭,這樣瀏覽器如果發送了指定請求頭后,就可以 無限期緩存靜態文件,是的用戶只需下載一次即可。 這個重寫規則使得任何靜態文件,如果請求參數中包含時間戳值,那么就設置相應的Expires和Cache-Control響應頭。
  location /{
  header_filter_by_lua '
  if ngx.var.query_string and ngx.re.match( ngx.var.query_string, "^([0-9]{10})$" ) then
  ngx.header["Expires"] = ngx.http_time( ngx.time() + 31536000 );
  ngx.header["Cache-Control"] = "max-age=31536000";
  end
  ';
  try_files $uri @dynamic;}
  刪除jQuery JSONP請求的時間戳參數:
  很多外部客戶端請求JSONP接口時,都會包含一個時間戳類似的參數,從而導致Nginx proxy緩存無法命中(因為無法忽略指定的HTTP參數)。下面的 規則刪除了時間戳參數,使得Nginx可以緩存upstream server的響應內容,減輕后端服務器的負載。
  location /{
  rewrite_by_lua '
  if ngx.var.args ——= nil then
  -- /some_request?_=1346491660 becomes /some_request
  local fixed_args, count = ngx.re.sub( ngx.var.args, "&?_=[0-9]+", "" );
  if count > 0 then
  return ngx.exec(ngx.var.uri, fixed_args);
  end
  end
  ';}
  把后端的慢請求日志記錄到Nginx的錯誤日志:
  如果后端請求響應很慢,可以把它記錄到Nginx的錯誤日志,以備后續追查。
  location /{
  log_by_lua '
  if tonumber(ngx.var.upstream_response_time) >= 1 then
  ngx.log(ngx.WARN, "[SLOW] Ngx upstream response time: " .. ngx.var.upstream_response_time .. "s from " .. ngx.var.upstream_addr);
  end
  ';}
  基于Redis的實時IP封禁:
  某些情況下,需要阻止流氓爬蟲的抓取,這可以通過專門的封禁設備去做,但是通過Lua,也可以實現簡單版本的封禁。
  lua_shared_dict banned_ips 1m;
  location /{
  access_by_lua '
  local banned_ips = ngx.shared.banned_ips;
  local updated_at = banned_ips:get("updated_at");
  -- only update banned_ips from Redis once every ten seconds:
  if updated_at == nil or updated_at < ( ngx.now() - 10 ) then
  local redis = require "resty.redis";
  local red = redis:new();
  red:set_timeout(200);
  local ok, err = red:connect("your-redis-hostname", 6379);
  if not ok then
  ngx.log(ngx.WARN, "Redis connection error retrieving banned_ips: " .. err);
  else
  local updated_banned_ips, err = red:smembers("banned_ips");
  if err then
  ngx.log(ngx.WARN, "Redis read error retrieving banned_ips: " .. err);
  else
  -- replace the locally stored banned_ips with the updated values:
  banned_ips:flush_all();
  for index, banned_ip in ipairs(updated_banned_ips) do
  banned_ips:set(banned_ip, true);
  end
  banned_ips:set("updated_at", ngx.now());
  end
  end
  end
  if banned_ips:get(ngx.var.remote_addr) then
  ngx.log(ngx.WARN, "Banned IP detected and refused access: " .. ngx.var.remote_addr);
  return ngx.exit(ngx.HTTP_FORBIDDEN);
  end
  ';}
  現在就可以阻止特定IP的訪問:
  ruby> $redis.sadd("banned_ips","200.1.35.4")
  Nginx進程每隔10秒從Redis獲取一次最新的禁止IP名單。需要注意的是,如果架構中使用了Haproxy這樣類似的負載均衡服務器時, 需要把$remote_addr設置為正確的遠端IP地址。
  這個方法還可以用于HTTP User-Agent字段的檢查,要求滿足指定條件。
  使用Nginx輸出CSRF(form_authenticity_token)
  Mixlr大量使用頁面緩存,由此引入的一個問題是如何給每個頁面輸出會話級別的CSRF token。我們通過Nginx的子請求,從upstream web server 獲取token,然后利用Nginx的SSI(server-side include)功能輸出到頁面中。這樣既解決了CSRF攻擊問題,也保證了cache能被正常利用。
  location /csrf_token_endpoint {internal;
  include /opt/nginx/conf/proxy.conf;
  proxy_pass "http://upstream";}
  location @dynamic{
  ssi on;set $csrf_token '';
  rewrite_by_lua '
  -- Using a subrequest, we our upstream servers for the CSRF token for this session:
  local csrf_capture = ngx.location.capture("/csrf_token_endpoint");
  if csrf_capture.status == 200 then
  ngx.var.csrf_token = csrf_capture.body;
  -- if this is a new session, ensure it sticks by passing through the new session_id
  -- to both the subsequent upstream request, and the response:
  if not ngx.var.cookie_session then
  local match = ngx.re.match(csrf_capture.header["Set-Cookie"], "session=([a-zA-Z0-9_+=/+]+);");
  if match then
  ngx.req.set_header("Cookie", "session=" .. match[1]);
  ngx.header["Set-Cookie"] = csrf_capture.header["Set-Cookie"];
  end
  end
  else
  ngx.log(ngx.WARN, "No CSRF token returned from upstream, ignoring.");
  end
  ';
  try_files /maintenance.html /rails_cache$uri @thin;}
  CSRF token生成 app/metal/csrf_token_endpoint.rb:
  classCsrfTokenEndpointdefself.call(env)if env["PATH_INFO"]=——/^//csrf_token_endpoint/
  session = env["rack.session"]||{}
  token = session[:_csrf_token]if token.nil?
  token =SecureRandom.base64(32)
  session[:_csrf_token]= token
  end[200,{"Content-Type"=>"text/plain"},[ token ]]else[404,{"Content-Type"=>"text/html"},["Not Found"]]end
  endend
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
这里只有精品视频| 成人看片人aa| 国产一区二区三区毛片| 欧美高清在线观看| 亚洲精品国产拍免费91在线| 日韩高清电影免费观看完整版| 亚洲成人xxx| 国产精品盗摄久久久| 日韩在线观看你懂的| 久久久久久亚洲精品| 亚洲成人1234| 国产丝袜一区视频在线观看| 日韩国产激情在线| 亚洲欧美国产高清va在线播| 亚洲国产日韩欧美在线99| 影音先锋日韩有码| 日本精品久久电影| 欧美一级黑人aaaaaaa做受| 中文字幕日韩专区| 国内揄拍国内精品少妇国语| 国外成人性视频| 国产亚洲欧洲高清| 亚洲男人第一av网站| 亚洲成人国产精品| 久久精品这里热有精品| 精品在线观看国产| 亚洲一区制服诱惑| 欧美人在线视频| 国产精品成人品| 亚洲人成自拍网站| 欧美激情在线观看视频| 国内精品久久久久| 欧美性猛交xxxx乱大交极品| 久久久久久成人| 久久天天躁狠狠躁夜夜av| 国产精品黄色影片导航在线观看| 精品在线观看国产| 成人免费高清完整版在线观看| 日韩av在线网页| 日本免费久久高清视频| 久久91亚洲人成电影网站| 国产99久久精品一区二区 夜夜躁日日躁| 7777免费精品视频| 欧美野外猛男的大粗鳮| 亚洲天堂网站在线观看视频| 操91在线视频| 国产69久久精品成人| 性欧美xxxx交| 国产精品久久久久99| 亚洲一区二区三区乱码aⅴ| 国产精品视频大全| 亚洲999一在线观看www| 久久久久久久影院| 欧美极品少妇xxxxⅹ喷水| 日韩视频免费大全中文字幕| 在线播放日韩av| 中文字幕亚洲欧美一区二区三区| 久久精品视频va| 亚洲精品国产精品国自产观看浪潮| 26uuu亚洲伊人春色| 欧美福利在线观看| 久久久综合av| 国产精品日韩一区| 欧美黑人一区二区三区| 2019国产精品自在线拍国产不卡| 中文国产亚洲喷潮| 性欧美xxxx视频在线观看| 欧美成人高清视频| 欧美人交a欧美精品| 搡老女人一区二区三区视频tv| 久久久久久国产精品美女| 成人观看高清在线观看免费| 成人久久18免费网站图片| 欧美精品激情blacked18| 亚洲精品电影网站| 成人免费淫片aa视频免费| 欧美性猛交xxxx富婆| 久久久最新网址| 国产亚洲美女精品久久久| 国产女同一区二区| 色综合久久88| 欧美激情视频网址| 81精品国产乱码久久久久久| 韩国国内大量揄拍精品视频| 97免费视频在线| 国产精品免费一区二区三区都可以| 久久精品99国产精品酒店日本| 日本sm极度另类视频| 中文亚洲视频在线| 欧美日韩加勒比精品一区| 亚洲色图激情小说| 久久影院在线观看| 久久久噜久噜久久综合| 日本国产一区二区三区| 久久久久久高潮国产精品视| 一本色道久久综合狠狠躁篇怎么玩| 欧美福利在线观看| 热re99久久精品国产66热| 国产不卡av在线| 亚洲午夜未删减在线观看| 91色p视频在线| 欧美高清视频免费观看| 欧美成人精品一区| 亚洲国产欧美一区二区三区久久| 久久久久久中文字幕| 精品高清一区二区三区| 日韩国产精品视频| 成人激情电影一区二区| 国产欧美一区二区白浆黑人| 久久亚洲精品一区| 欧美成人精品一区| 亚洲国产精品99| 色小说视频一区| 久久精品一偷一偷国产| 另类美女黄大片| 国产精品美乳一区二区免费| 2019中文在线观看| 日韩欧美成人精品| 亚洲激情视频在线| 91免费的视频在线播放| 亚州国产精品久久久| 久久影院资源站| 日韩精品视频在线观看网址| 98精品国产高清在线xxxx天堂| 亚洲精品自拍第一页| 日本精品中文字幕| 97在线视频免费| 国产精品永久免费观看| 国产精品成人国产乱一区| 伊人久久久久久久久久久| 91久久久久久| 久久久精品一区二区| 欧美理论在线观看| 亚洲国产精品久久精品怡红院| 国产成人精品最新| 中文字幕v亚洲ⅴv天堂| 91久久在线观看| 91亚洲一区精品| 欧美性生交xxxxxdddd| 欧美日韩激情视频8区| 日韩中文有码在线视频| 久久69精品久久久久久久电影好| 亚洲天堂av电影| 欧美性xxxxhd| 国产一区二区成人| 日本不卡免费高清视频| 亚洲国产精品小视频| 久久福利视频网| 国产精品99久久99久久久二8| 国产午夜精品免费一区二区三区| 亚洲字幕在线观看| 91精品久久久久久久久久久| 日本不卡高字幕在线2019| 中文字幕欧美在线| 国产精品综合不卡av| 亚洲人成伊人成综合网久久久| 亚洲一区二区中文| 国产美女直播视频一区| 国产精品免费视频xxxx| 久久九九全国免费精品观看| 91亚洲精品久久久| 日韩av在线天堂网| 精品亚洲aⅴ在线观看| 亚洲女人被黑人巨大进入|