server {listen 80;server_name www.123.com;location / {proxy_pass http://127.0.0.1:8080;index index.html index.htm index.jsp;}
}
# 添加如下字段即可
stream {upstream austin {server x.x.x.x:1888;}server {listen 8888;proxy_connect_timeout 10s;proxy_timeout 6s;proxy_pass austin;}
}
生成CA
# 自签证书 - 生成CA(ca.key)
openssl genrsa -des3 -out ca.key 2048
# 生成CA证书签名请求(ca.csr)
openssl req -new -key ca.key -out ca.csr
# 生成自签名CA证书(ca.cert)
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
生成server证书
# 生成服务端私钥(server.key)
openssl genrsa -des3 -out server.key 2048
# 生成服务端证书签名请求(server.csr)
openssl req -new -key server.key -out server.csr
# 使用ca证书签署服务端csr以生成服务端证书(server.cert)
openssl ca -days 3650 -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
生成client证书
# 生成客户端私钥(client.key)
openssl genrsa -des3 -out client.key 2048
# 生成客户端证书签名请求(client.csr)
openssl req -new -key client.key -out client.csr
# 使用ca证书签署客户端csr以生成客户端证书(client.cert)
openssl ca -days 3650 -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
openresty配置(这里用的server证书方便测试)
server {listen 443 ssl http2 default_server;server_name www.rsq.com;ssl_certificate /etc/pki/ssl/server.crt;ssl_certificate_key /etc/pki/ssl/server.key;location / {proxy_pass http://192.168.189.128;}
}
需要通过lua脚本实现
location / {set $backend "172.16.100.33:9090/hello-rsq";access_by_lua_block {local redis = require "resty.redis"local red = redis:new()local ok, err = red:connect("172.16.100.1", 6379) # redis地址if not ok thenngx.log(ngx.ERR, "failed to connect to Redis: ", err)return ngx.exit(500)endlocal res, err = red:get("server")if not res thenngx.log(ngx.ERR, "failed to get value from Redis: ", err)return ngx.exit(500)end# 判断redis中server对应的值,根据值的不同的代理到不同的后端if res == "172.16.100.33:9090/hello-rsq" thenngx.var.backend = "172.16.100.33:9090/hello-rsq"elseif res == "172.16.100.33:9090/hello-zk" thenngx.var.backend = "172.16.100.33:9090/hello-zk"endred:set_keepalive(10000, 100)}proxy_pass http://$backend;}
可以使用ngx.req.get_headers()
函数获取请求头部信息。然后可以使用Lua语言的条件判断来判断请求头中的值,并根据判断结果选择要代理的后端地址。
以下是一个示例代码,它检查请求头中的User-Agent
值,并根据不同的值代理到不同的后端地址:
location /api {set $backend "172.16.100.33:9090/hello-rsq";access_by_lua_block {local headers = ngx.req.get_headers()if headers["User-Agent"] == "Android" thenngx.var.backend = "172.16.100.33:9090/hello-zk"elseif headers["User-Agent"] == "iPhone" thenngx.var.backend = "172.16.100.33:9090/hello-rsq"elsengx.var.backend = "172.16.100.33:9090/hello-rsq"end}proxy_pass http://$backend;
}
上一篇:Linux命令学习拾遗
下一篇:Qt 第28课、主窗口中的工具栏