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的,就是訪問地址用的,下載地址是
注意上面都是一堆原始碼,真正安裝後可能不是在這個路徑下了
前兩個的安裝過程相對獨立,沒什麼好說的,找找資料就可以,關鍵說一下lua-rety-http的整合過程,開啟資料夾找到下面兩個檔案,拷貝這兩個檔案
然後去到openresty安裝完成後的地址,貼上到這個資料夾下,準備工作到這裡就結束了
openresty實際上也是nginx,我們依然可以在openresty的安裝目錄下,找到nginx的資料夾,這部分是獨立,可以完全可以當作一般nginx那樣啟動,然後是程式碼。
先啟動 redis
- [[email protected] sbin]# ./redis-server /home/sword/Downloads/redis-3.2.10/redis.conf
然後修改nginx.conf
- #user nobody;
- worker_processes 1;
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #pid logs/nginx.pid;
- events {
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type text/html;
- lua_package_path "/usr/local/openresty/lualib/?.lua;;"; #使resty.http生效
- lua_package_cpath "/usr/local/openresty/lualib/?.so;;";
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- #access_log logs/access.log main;
- upstream swordnet.com{
- server 132.121.164.203:8280;
- }
- sendfile on;
- #tcp_nopush on;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- #gzip on;
- server {
- listen 80;
- server_name localhost;
- charset utf-8;
- #access_log logs/host.access.log main;
- location ~ .*/(token/[^/|\?]*).*{#(1)、在客戶端輸入的url,只要是符合 http://localhost/xxx/token/xxx的都會在這裡被捕獲
- set $token $1;#(2)、識別(1)中的正則表示式,取出()中的內容,並賦值給$token
- content_by_lua_block {
- local http = require "resty.http";#匯入resty.http和resty.redis包
- local redis = require "resty.redis";
- local httpc = http.new();
- local instance = redis.new();
- local var = ngx.var;#使用nginx自帶的變數池
- local token = var.token;#使用(2)中的$token 這裡是token/swordnet123
- local ok,err = instance:connect("127.0.0.1","6379");#連線redis
- if not ok then
- ngx.print("error!!!");
- end
- instance:set("token/swordnet123","http://127.0.0.1:81/xxx/zzz/showData?entityid=4406041007625");#往redis中新增測試資料
- instance:set("[email protected]$12Gz",1);
- local urlc = instance:get(token);#(3)、取出 http://127.0.0.1:81/xxx/zzz/showData?entityid=4406041007625,觀察這個連線的域,依然是nginx的ip和port
- if urlc == ngx.null then
- ngx.print("error");
- else
- local res, err = httpc:request_uri(urlc,{ method = "GET",});#發出新的請求
- ngx.print(res.body);
- end;
- }
- }
- }
- server {
- listen 81;
- server_name localhost;
- charset utf-8;
- #access_log logs/host.access.log main;
- location /xxx {(3)中發出的新請求會在這裡被捕獲
- proxy_pass http://swordnet.com;
- }
- }
- # another virtual host using mix of IP-, name-, and port-based configuration
- #
- #server {
- # listen 8000;
- # listen somename:8080;
- # server_name somename alias another.alias;
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
- # HTTPS server
- #
- #server {
- # listen 443 ssl;
- # server_name localhost;
- # ssl_certificate cert.pem;
- # ssl_certificate_key cert.key;
- # ssl_session_cache shared:SSL:1m;
- # ssl_session_timeout 5m;
- # ssl_ciphers HIGH:!aNULL:!MD5;
- # ssl_prefer_server_ciphers on;
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
- }
最後啟動nginx,在瀏覽器雖然輸入個什麼http://localhost/tt/token/swordnet123測試一下結果。
相關推薦
Linux下openresty+redis 的許可權控制
前些日子研究了一下nginx,也基於它的原始碼編寫了一些程式,但是發現這種“原始”的做法即使是一個簡單的HelloWorld程式就非常的耗費時間。後來發現了openresty這個東西,它是前人集成了nginx和lua的,nginx的高階版本。lua是一種小巧的,高階的指令
Linux下的Root許可權控制
Linux是當前比較流行的網路伺服器作業系統,它繼承了UNIX系統安全、穩定、高效等優點。在Linux系統中Root擁有最高許可權,正因如此攻擊者往往以獲取Root許可權為目標。作為管理員如何有效地對Root進行有效管理呢?本文將從許可權控制的角度,提供幾個安全技巧。
Linux下ACL權限控制以及用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下安裝redis(linux(centos/ubuntu) install redis)
一、檢查是否安裝gcc和tcl,沒有的要安裝: yum install gcc-c++ yum install -y tcl 二、下載redis: wget http://download.redis.io/redis-stable.tar.gz
linux下wget沒有許可權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
linux下的redis
安裝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