您好,我想以某种方式在 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 的内容是否包含您预期的值