有时候,我们的业务要求我们直接要用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“123456”;∗∗:定义一个变量‘key` 用于存放密钥。
- **set iskeyfalse;∗∗:初始化‘iskeyfalse;∗∗:初始化‘iskey
变量为
false`,表示尚未验证密钥。 - if (argkey=argkey=key) 和 if (httpkey=httpkey=key): 检查查询字符串 (
$arg_key
) 或 HTTP 请求头 ($http_key
) 中是否存在与$key
相等的密钥。如果存在,则将$iskey
设置为true
。 - **if (iskey=false)∗∗:如果‘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 响应。