1. 程式人生 > >Linux下openresty+redis 的許可權控制

Linux下openresty+redis 的許可權控制

前些日子研究了一下nginx,也基於它的原始碼編寫了一些程式,但是發現這種“原始”的做法即使是一個簡單的HelloWorld程式就非常的耗費時間。後來發現了openresty這個東西,它是前人集成了nginx和lua的,nginx的高階版本。lua是一種小巧的,高階的指令碼語言,能夠很方便地在nginx的配置檔案中編寫出自己的業務流程。

業務說明:

傳統的許可權控制,如果是J2EE,都會在spring中新增filter的管控,這在只有一臺伺服器裡面,並沒有什麼問題,但是在叢集的世界裡,這顯然不怎麼合理。我們不希望我們的上游伺服器來處理許可權的問題,而是在許可權資訊到達之前就已經處理好了,上游伺服器只要跑資料,處理業務就行。於是許可權控制這一功能模組,就放在負責分發任務的nginx身上,如果你是用nginx來搭建叢集的話。。。

準備:

作業系統:centos,ubuntu感覺不怎麼好用,因為動不動就會提示容量不足,本人也是不信邪,一次又一次的重灌ubuntu,後來乾脆換centos。

功能軟體,如下圖,這是我的虛擬機器上的版本。


1、openresty-1.11.2.5 安裝方法參照  https://openresty.org/cn/ ,安裝完成後,就已經是nginx+lua了。最好是下載原始碼版,,然後自己編譯一下,還是很爽的。

2、Redis-3.2.10 下載地址 https://redis.io/  解壓壓縮包,然後開啟解壓後的目錄,編譯安裝(網上很多教程)

3、lua-resty-http-0.11 這是個開源的第三方包,用於處理http的,就是訪問地址用的,下載地址是 

https://github.com/pintsized/lua-resty-http/ 雖然openresty本身也有,但是親測之後並不好用

注意上面都是一堆原始碼,真正安裝後可能不是在這個路徑下了

前兩個的安裝過程相對獨立,沒什麼好說的,找找資料就可以,關鍵說一下lua-rety-http的整合過程,開啟資料夾找到下面兩個檔案,拷貝這兩個檔案


然後去到openresty安裝完成後的地址,貼上到這個資料夾下,準備工作到這裡就結束了


openresty實際上也是nginx,我們依然可以在openresty的安裝目錄下,找到nginx的資料夾,這部分是獨立,可以完全可以當作一般nginx那樣啟動,然後是程式碼。

先啟動 redis

  1. [[email protected] sbin]# ./redis-server /home/sword/Downloads/redis-3.2.10/redis.conf  

然後修改nginx.conf

  1. #user  nobody;
  2. worker_processes  1;  
  3. #error_log  logs/error.log;
  4. #error_log  logs/error.log  notice;
  5. #error_log  logs/error.log  info;
  6. #pid        logs/nginx.pid;
  7. events {  
  8.     worker_connections  1024;  
  9. }  
  10. http {  
  11.     include       mime.types;  
  12.     default_type  text/html;  
  13.     lua_package_path "/usr/local/openresty/lualib/?.lua;;"; #使resty.http生效  
  14.     lua_package_cpath "/usr/local/openresty/lualib/?.so;;";  
  15.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  16.     #                  '$status $body_bytes_sent "$http_referer" '
  17.     #                  '"$http_user_agent" "$http_x_forwarded_for"';
  18.     #access_log  logs/access.log  main;
  19.     upstream swordnet.com{  
  20.  server 132.121.164.203:8280;  
  21.      }  
  22.     sendfile        on;  
  23.     #tcp_nopush     on;
  24.     #keepalive_timeout  0;
  25.     keepalive_timeout  65;  
  26.     #gzip  on;
  27. server {  
  28. listen       80;  
  29. server_name  localhost;  
  30. charset utf-8;  
  31. #access_log  logs/host.access.log  main;
  32. location ~ .*/(token/[^/|\?]*).*{#(1)、在客戶端輸入的url,只要是符合 http://localhost/xxx/token/xxx的都會在這裡被捕獲
  33. set $token $1;#(2)、識別(1)中的正則表示式,取出()中的內容,並賦值給$token  
  34. content_by_lua_block {  
  35. local http = require "resty.http";#匯入resty.http和resty.redis包  
  36. local redis = require "resty.redis";  
  37. local httpc = http.new();  
  38. local instance = redis.new();  
  39. local var = ngx.var;#使用nginx自帶的變數池  
  40. local token = var.token;#使用(2)中的$token 這裡是token/swordnet123  
  41. local ok,err = instance:connect("127.0.0.1","6379");#連線redis  
  42. if not ok then    
  43. ngx.print("error!!!");  
  44. end  
  45. instance:set("token/swordnet123","http://127.0.0.1:81/xxx/zzz/showData?entityid=4406041007625");#往redis中新增測試資料  
  46. instance:set("[email protected]$12Gz",1);  
  47. local urlc = instance:get(token);#(3)、取出 http://127.0.0.1:81/xxx/zzz/showData?entityid=4406041007625,觀察這個連線的域,依然是nginx的ip和port
  48. if urlc == ngx.null then  
  49. ngx.print("error");  
  50. else
  51. local res, err = httpc:request_uri(urlc,{ method = "GET",});#發出新的請求  
  52. ngx.print(res.body);  
  53. end;  
  54. }  
  55. }  
  56. }  
  57. server {  
  58. listen       81;  
  59. server_name  localhost;  
  60. charset utf-8;  
  61. #access_log  logs/host.access.log  main;
  62. location /xxx {(3)中發出的新請求會在這裡被捕獲  
  63. proxy_pass http://swordnet.com;
  64. }  
  65. }  
  66.     # another virtual host using mix of IP-, name-, and port-based configuration
  67.     #
  68.     #server {
  69.     #    listen       8000;
  70.     #    listen       somename:8080;
  71.     #    server_name  somename  alias  another.alias;
  72.     #    location / {
  73.     #        root   html;
  74.     #        index  index.html index.htm;
  75.     #    }
  76.     #}
  77.     # HTTPS server
  78.     #
  79.     #server {
  80.     #    listen       443 ssl;
  81.     #    server_name  localhost;
  82.     #    ssl_certificate      cert.pem;
  83.     #    ssl_certificate_key  cert.key;
  84.     #    ssl_session_cache    shared:SSL:1m;
  85.     #    ssl_session_timeout  5m;
  86.     #    ssl_ciphers  HIGH:!aNULL:!MD5;
  87.     #    ssl_prefer_server_ciphers  on;
  88.     #    location / {
  89.     #        root   html;
  90.     #        index  index.html index.htm;
  91.     #    }
  92.     #}
  93. }  


最後啟動nginx,在瀏覽器雖然輸入個什麼http://localhost/tt/token/swordnet123測試一下結果。

相關推薦

Linuxopenresty+redis許可權控制

前些日子研究了一下nginx,也基於它的原始碼編寫了一些程式,但是發現這種“原始”的做法即使是一個簡單的HelloWorld程式就非常的耗費時間。後來發現了openresty這個東西,它是前人集成了nginx和lua的,nginx的高階版本。lua是一種小巧的,高階的指令

Linux的Root許可權控制

Linux是當前比較流行的網路伺服器作業系統,它繼承了UNIX系統安全、穩定、高效等優點。在Linux系統中Root擁有最高許可權,正因如此攻擊者往往以獲取Root許可權為目標。作為管理員如何有效地對Root進行有效管理呢?本文將從許可權控制的角度,提供幾個安全技巧。   

LinuxACL權限控制以及用sudo設置用戶對命令的執行權限

以及 執行 nopasswd 設置 userdel file 指定 tool 必須 ACL權限分配 1.setfacl命令設置文件權限 setfacl -m u:user1:rw root.txt setfacl -m u:user2:rwx root.txt 2.getf

Linux 安裝redis

外網 sport proc 原因分析 because exceptio 修改 mem 一個 記錄一下linux下的安裝步驟,還是比較復雜的 1. 下載redis-2.8.19.tar.gz:   ftp傳到linux01上;   解壓:   tar

linux安裝redis並配置

ext find 客戶 bin extract write sometimes group gin redis官網上給出了安裝步驟,這裏做一下總結。 1、Download, extract and compile Redis with: wget http://downl

linux安裝redis 4.0.2

rediswget http://download.redis.io/releases/redis-4.0.2.tar.gz解壓tar -xvf redis-4.0.2.tar.gz編譯cd redis-4.0.2make mkdir -p /usr/local/redismake PREFIX=/usr/l

linux安裝redis

編譯 roc 項目啟動 cti 沒有 問題 ges 啟動 xid 將redis-2.8.23.tar.gz 包上傳到centos上放在某個目錄上面 執行tar zxvf redis-2.8.23.tar.gz 進行解壓 解壓結束後進入解壓目錄: 進入src 目錄cd

Linux 內網流量控制工具

信息 eth1 match /etc eth sta .com 顯示 inux CentOS-TC(流量控制)單IP限制下載命令:tc qdisc add dev eth1 root handle 1: htb r2q 1tc class add dev eth1 pare

linux搭建svn版本控制軟件

handles kill modules pos epo log svn ret 改密   環境:     版本管理服務器:Linux version 2.6.18-308.el5     客戶端:win7   一、服務器端安裝步驟   1、安裝svn y

linux搭建redis並解決無法連接redis的問題

linu 啟動 str telnet 模式 itl 缺點 oob 2.0 。 首先是搭建redis,這個比較簡單。 1、檢查安裝依賴程序 yum install gcc-c++ yum install -y tcl yum install wg

Linux用root許可權新增使用者,並給使用者或使用者組指定目錄的讀寫許可權(比如:tomcat檔案的讀寫許可權,可以用於新使用者部署專案)

目的: 在linux環境中為了安全起見,不能讓所有專案都用root部署(防止root許可權過大,對重要檔案的誤操作),所以新加使用者或使用者組,對新使用者或使用者組授予部分檔案操作的許可權。 1.建立使用者newuser,並設定密碼(預設連帶建立newuser組) # useradd n

linux安裝redis服務和php擴充套件

一:安裝redis服務 1、wget http://download.redis.io/releases/redis-5.0.0.tar.gz 2、tar xzf redis-5.0.0.tar.gz 3、cd redis-5.0.0 4、yum -y install gcc 5

Redis-Linux安裝redis服務

一、下載 安裝之前我們先下載響應版本的redis。博主下載的是: 二、安裝 2.1、接下來就是使用winscp工具,將下載下來的tar.gz上傳到linux上。然後解壓並重命名,如下: # 解壓 tar -zxvf redis.5.0.0.tar.gz # 重新命名 mv

linux配置ftp許可權使用者

1建立一個ftp使用者   useradd -d /var/ftpfile  ftpuser //增加使用者ftpuser,並制定test使用者的主目錄為/var/ftpfile 2 為ftp使用者設定密碼 passwd ftpuser 3修改使用者的許可權

linux安裝redis及設定

 一、下載、解壓、編譯安裝 wget http://download.redis.io/releases/redis-5.0.0.tar.gz tar -zxvf redis-5.0.0.tar.gz cd redis-5.0.0makemake install 安裝完成,最後一步 m

linux安裝redislinux(centos/ubuntu) install redis

一、檢查是否安裝gcc和tcl,沒有的要安裝: yum install gcc-c++ yum install -y tcl   二、下載redis: wget http://download.redis.io/redis-stable.tar.gz

linuxwget沒有許可權bash: /usr/bin/wget: Permission denied

打算使用wget下載hadoop的壓縮包,結果報下面的錯誤:[[email protected] mnt] wget http: mirror cnop net nagios nagios-plugins-1 4 14 打算使用wget下載hadoop的壓縮包,結果報下面的錯誤:

Linux 安裝Redis步驟

1.在官網上下載redis      redis-4.0.11.tar.gz 2.解壓安裝包     [[email protected] local]#  tar xvfz  redis-4.0.11.tar.gz     [[email pr

linuxredis

安裝redis 1、首先準備一個redis在linux下的安裝包 2、將安裝包解壓到常用的軟體目錄 如: sudo tar -zxvf ~/Desktop/file/redis-4.0.9.tar.gz -C /usr/local/redis 3、進入到解壓的目錄下執

linux安裝redis及其中遇到的問題的解決方法

1.將下載好的壓縮包放到/usr/local目錄下 # tar xzf redis-3.0.2.tar.gz # cd redis-3.0.2 # make 提示錯誤 make: cc: Command not found make: *** [adlist.o] Er