nginx version: nginx/1.26.1nginx: [emerg]unknown directive“secure link" in /www/server/nginx/conf/nginx.conf:89 nginx:configuration file /www/server/nginx/conf/nginx.conf test failed
时间: 2025-06-30 14:19:15 浏览: 7
在测试 Nginx 配置文件时,如果遇到错误提示 `unknown directive "secure_link"`,通常表示当前使用的 Nginx 版本不支持 `secure_link` 模块,或者在编译 Nginx 时未包含该模块。`secure_link` 模块用于生成和验证安全链接,常用于防止资源盗链。
### 解决方法
#### 1. 确认 Nginx 是否支持 `secure_link` 模块
首先需要确认当前安装的 Nginx 是否已经包含了 `secure_link` 模块。可以通过以下命令查看 Nginx 编译时的配置信息:
```bash
nginx -V 2>&1 | grep -- '--add-module'
```
如果输出中没有 `--add-module=../ngx_http_secure_link_module` 或者类似的模块路径,则说明当前版本的 Nginx 没有包含该模块。
#### 2. 下载并重新编译 Nginx
如果确认当前版本缺少 `secure_link` 模块,则需要下载与当前版本一致的 Nginx 源码包,并在编译时添加对该模块的支持。具体步骤如下:
- 下载与当前版本一致的 Nginx 源码包:
```bash
wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar xzvf nginx-1.20.1.tar.gz
cd nginx-1.20.1
```
- 获取当前 Nginx 的编译参数:
```bash
nginx -V
```
- 在原有编译参数的基础上,添加 `--add-module=../ngx_http_secure_link_module` 参数(假设模块源码位于当前目录下的 `../ngx_http_secure_link_module` 路径):
```bash
./configure --prefix=/opt/X_nginx/nginx --with-http_ssl_module --add-module=../ngx_http_secure_link_module
make
sudo make install
```
- 完成编译安装后,使用 `nginx -V` 再次确认是否已成功添加模块。
#### 3. 修改 Nginx 配置文件以启用 `secure_link`
在确认 Nginx 已经支持 `secure_link` 模块后,可以修改配置文件以启用该功能。例如:
```nginx
location /protected/ {
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri secret_string";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
}
```
上述配置中,`secure_link` 用于解析请求中的 MD5 哈希值和过期时间,`secure_link_md5` 用于定义生成哈希值的方式,其中 `$secure_link_expires` 和 `$uri` 是哈希输入的一部分,`secret_string` 是服务器端的密钥。
#### 4. 测试并重新加载 Nginx 配置
完成配置文件修改后,执行以下命令测试配置文件是否正确:
```bash
nginx -t
```
如果测试通过,则重新加载 Nginx 配置:
```bash
nginx -s reload
```
如果一切正常,Nginx 将开始支持 `secure_link` 功能,并且不会再出现 `unknown directive "secure_link"` 错误。
阅读全文
相关推荐












