На моем сервере я использую mailcow: dockerized решение на сервере Debian, и я хочу использовать nginx не только как обратный прокси-сервер http, но и как SMTP imap и pop3, как показано на https://www.nginx.com/resources/admin-guide/mail-proxy/
Но чем дальше я читаю ссылку, тем сложнее становится понять, как это будет сделано. В http очевидно, как это будет сделано:
server {
listen 80;
server_name mail.example.tk;
location /.well-known {
proxy_pass http://127.0.0.1:8080/.well-known ;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100m;
}
location / {
rewrite ^(.*) https://$server_name$1 permanent;
}
}
server {
listen 443 ssl;
server_name mail.example.tk;
ssl_certificate /opt/docker-mailcow/data/assets/ssl/cert.pem;
ssl_certificate_key /opt/docker-mailcow/data/assets/ssl/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100m;
}
}
Но как это сделать с помощью smtp, pop3 и imap? Пожалуйста, имейте в виду, что образы докеров запускаются на одном сервере с nginx, а именно:
827c20cee898 mailcow/dovecot:1.0 "/docker-entrypoin..." 50 minutes ago Up 50 minutes 24/tcp, 10001/tcp, 0.0.0.0:2110->110/tcp, 0.
76a977a8064e mailcow/postfix:1.0 "/bin/sh -c 'exec ..." 50 minutes ago Up 50 minutes 588/tcp, 0.0.0.0:2525->25/tcp, 0.0.0.0:2465-
Любые идеи?
Судя по комментариям, похоже, что вопрос касается HTTP-сервера аутентификации для почтового прокси. Об этом говорится в части руководства:
Каждый запрос POP3 / IMAP / SMTP от клиента сначала аутентифицируется на внешнем сервере аутентификации HTTP или с помощью сценария аутентификации. Наличие сервера аутентификации обязательно для прокси почтового сервера NGINX. Сервер можно создать самостоятельно в соответствии с протоколом аутентификации NGINX, который основан на протоколе HTTP.
Он ссылается на http://nginx.org/en/docs/mail/ngx_mail_auth_http_module.html#protocol который идет дальше в том, как должны выглядеть запрос и ответ. Он дает это как пример запроса:
GET /auth HTTP/1.0
Host: localhost
Auth-Method: plain # plain/apop/cram-md5/external
Auth-User: user
Auth-Pass: password
Auth-Protocol: imap # imap/pop3/smtp
Auth-Login-Attempt: 1
Client-IP: 192.0.2.42
Client-Host: client.example.org
Это то, что твое auth_http
сервер получит. Тогда ваш auth_http
серверу нужно будет ответить примерно так:
HTTP/1.0 200 OK
Auth-Status: OK
Auth-Server: 198.51.100.1
Auth-Port: 143
Ответ вашего сервера содержит IP-адрес сервера и порт, на который будет проксироваться запрос.
К сожалению, они не приводят ни одного примера HTTP-сервера или кода для запуска. Однако я нашел другую статью, в которой в качестве примера приводится сценарий сервера PHP на https://www.nginx.com/resources/wiki/start/topics/examples/imapauthenticatewithapachephpscript/.