有时候,我们的业务要求我们直接要用nginx实现字符串密钥认证,那么我写了个nginx实现字符串密钥认证教程这个教程教大家直接几个代码来实现认证,需要的来看看吧。
1.打开nginx配置文件,一般是nginx.conf,如果是宝塔面板直接在宝塔软件里面打开nginx然后进入配置文件行了,更方便一点,然后把这个代码加到配置文件里面行了,非常ok。
代码如下:
server {
listen 9999;
server_name localhost;
# 密钥定义
set $key "123456";
set $iskey false;
location /docs {
proxy_pass http://127.0.0.1:8999/docs;
}
location /openapi.json {
proxy_pass http://127.0.0.1:8999/openapi.json;
}
location / {
# 检查查询字符串参数或HTTP头部中的密钥是否正确
if ($arg_key = $key) {
set $iskey true;
} else if ($http_key = $key) {
set $iskey true;
}
# 如果没有有效的密钥,则重定向到/error403
if ($iskey = false) {
rewrite ^ /error403 last;
}
proxy_pass http://127.0.0.1:8999;
}
location = /error403 {
internal;
add_header Content-Type 'application/json';
return 200 '{"error": "密钥错误"}';
}
}
那么代码是啥意思呢?接下来讲解一下,这样也便于大家理解
同时我这里推荐大家如果需要使用一些api接口可以去这里API市场 里面寻找自己需要的接口,然后进行应用
Nginx 配置文件解析
server 块
nginx
深色版本
1server {
2 listen 9999;
3 server_name localhost;- listen: 指定服务器监听的端口。这里监听的是端口
9999。 - server_name: 指定这个虚拟主机服务的域名或IP地址。这里服务名为
localhost,意味着它会响应来自本地的请求。
location 块
每个 location 块定义了如何处理特定URL路径的请求。
/docs 路径
nginx
深色版本
1 location /docs {
2 proxy_pass http://127.0.0.1:8999/docs;
3 }- location /docs: 当请求的路径为
/docs时,执行此块内的配置。 - proxy_pass: 将请求代理到另一个后端服务(这里是
http://127.0.0.1:8999/docs)。
/openapi.json 路径
nginx
深色版本
1 location /openapi.json {
2 proxy_pass http://127.0.0.1:8999/openapi.json;
3 }- location /openapi.json: 当请求的路径为
/openapi.json时,执行此块内的配置。 - proxy_pass: 将请求代理到另一个后端服务(这里是
http://127.0.0.1:8999/openapi.json)。
根路径 /
nginx
深色版本
1 location / {
2 # 设置密钥
3 set $key "123456";
4 set $iskey false;
5
6 # 如果路由参数中的key等于密钥
7 if ($arg_key = $key) {
8 set $iskey true;
9 }
10
11 # 如果请求头参数中的key等于密钥
12 if ($http_key = $key) {
13 set $iskey true;
14 }
15
16 # 如果上方2个条件均未满足
17 if ($iskey = false) {
18 rewrite ^ /error403 last;
19 }
20
21 proxy_pass http://127.0.0.1:8999;
22 }- location /: 当请求的路径为根路径时,执行此块内的配置。
- **set key”123456″;∗∗:定义一个变量‘key` 用于存放密钥。
- **set iskeyfalse;∗∗:初始化‘iskey
变量为false`,表示尚未验证密钥。 - if (argkey=key) 和 if (httpkey=key): 检查查询字符串 (
$arg_key) 或 HTTP 请求头 ($http_key) 中是否存在与$key相等的密钥。如果存在,则将$iskey设置为true。 - **if (iskey=false)∗∗:如果‘iskey
仍为false,则表示密钥验证失败,此时将请求重定向到/error403`。 - proxy_pass http://127.0.0.1:8999;: 如果密钥验证成功,则将请求代理到
http://127.0.0.1:8999。
错误页面 /error403
nginx
深色版本
1 location = /error403 {
2 internal;
3 add_header Content-Type 'application/json';
4 return 200 '{"error": "密钥错误"}';
5 }- location = /error403: 当请求的路径精确匹配
/error403时,执行此块内的配置。 - internal: 标记该位置只能从内部重定向到达,不能直接通过外部请求访问。
- add_header Content-Type ‘application/json’;: 添加
Content-Type响应头,指定返回的数据格式为 JSON。 - return 200 ‘{“error”: “密钥错误”}’;: 返回一个状态码为
200的响应,并附带一个 JSON 字符串,内容为"{"error": "密钥错误"}"。
总结
这段配置主要实现了以下功能:
- 监听端口
9999并响应localhost的请求。 - 对特定路径
/docs和/openapi.json进行直接代理。 - 对根路径
/的请求进行密钥验证,验证通过后进行代理,否则返回一个包含错误信息的 JSON 响应。
© 版权声明
文章全是本幻城写的,尽量别直接复制粘贴
THE END


暂无评论内容