Nginx 邮件代理:我可以在 auth_http 选项上传递额外的标头来验证代理吗

Nginx 邮件代理:我可以在 auth_http 选项上传递额外的标头来验证代理吗

您好,我想以某种方式在 nginx 用于验证电子邮件地址的自定义脚本上传递一些额外的标头,以便以某种方式验证邮件代理本身,因此除了授权的邮件代理之外,其他任何邮件代理都不会得到响应。

您知道我如何将自己的标头传递给我想要回答的脚本吗?例如,我有以下设置:

mail {
    server_name mail.example.com;
    auth_http   192.16.45.126:9000/cgi-bin/nginxauth.cgi;

    proxy_pass_error_message on;

    ssl                 on;
    ssl_certificate     /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/certs/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    server {
        listen     25;
        protocol   smtp;
        smtp_auth  login plain cram-md5;
    }

    server {
        listen    110;
        protocol  pop3;
        pop3_auth plain apop cram-md5;
}

     server {
        listen   143;
        protocol imap;
    }
}

因此,假设位于的脚本192.16.45.126:9000/cgi-bin/nginxauth.cgi需要这些额外的身份验证标头:

proxy_user :我在这里设置代理的用户名

proxy_pass :我在这里设置代理的密码

因此,代理和复制请求需要先使用提供的用户名和密码进行身份验证,然后再处理用户的身份验证请求。因此,除了来自授权代理的请求外,其他请求都不会得到进一步处理。

你知道这是否可行以及我如何配置 nginx 来实现这一点?

答案1

我认为你可以使用 auth_http_header,来自nginx 文档

语法:auth_http_header header value; 默认值:— 上下文:mail, server 将指定的标头附加到发送到身份验证服务器的请求。此标头可用作共享密钥来验证请求来自 nginx。例如:

auth_http_header X-Auth-Key "secret_string";

然后,在脚本中,您可以检查标头 X-Auth-Key 的内容是否包含您预期的值

相关内容