Configuring nginx as mail proxy
Laurent Bonetto
lbonetto at kenzanmedia.com
Wed Oct 24 21:38:29 UTC 2012
Hi Maxim,
Thank you for sticking with me on this. I appreciate very much.
I did understand you meant to change the number of worker_connections. The only reason why I had lowered it was that I got a warning:
nginx: [warn] 1024 worker_connections exceed open file resource limit: 256
After pointing my mail client to localhost, I was finally able to see nginx hit my mock for an authentication request so there is definitely some progress! Unfortunately, the proxying is still not working. More precisely:
nginx hits my authenticate mock server with:
Host: localhost
Auth-User: <my user name>
Auth-Pass: <my password>
Auth-Protocol: pop3
Auth-Login-Attempt: 1
Client-IP: 192.168.1.104
- If my mock responds with
< HTTP/1.1 200 OK
< Content-Type: text/html
< Auth-Status: Invalid login or password
< Auth-Wait: 3
< Content-Length: 0
Then my mail client tells me that I have the incorrect username or password, as expected.
- However, if my mock responds with:
< Auth-Status: OK
< Auth-Server: <my mail server>
< Auth-Port: 110
The the mail client responds with an internal server error.
I added the Auth-Pass (which should not be needed anyway) in the response and that didn't help.
Since I didn't see any error in the error.log from nginx I used wireshark to monitor traffic. I filtered on tcp.port eq 110 and compared side by side the traffic coming from an account using a direct connection to my mail server, and an account going through the nginx proxy. In the second case (through proxy), I do not see any traffic going out to my mail server, suggesting it does not get the info it was expecting from my authentication service.
- Can you think of something I am missing?
- How do I even go about debugging what's happening here apart from what I am already doing (using wireshark)?
Again, for info, here is my current config:
worker_processes 1;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
mail {
# I assume server_name comes from Auth-Server so I tried commenting out. Same behavior.
server_name <my mail server>;
auth_http localhost:8080/authorize;
pop3_auth plain;
pop3_capabilities "TOP" "USER" "UIDL";
smtp_auth login plain cram-md5;
smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN;
xclient off;
server {
listen 2525;
protocol smtp;
}
server {
listen 110;
protocol pop3;
proxy on;
proxy_pass_error_message on;
}
}
On Oct 24, 2012, at 12:26 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> Hello!
>
> On Wed, Oct 24, 2012 at 11:49:43AM -0400, Laurent Bonetto wrote:
>
>> Thanks. That was indeed my first issue. I did sudo port edit
>> nginx, added --with-mail to the config options, reinstalled, and
>> now I am passed that error.
>>
>> I then got an error that no events was present so I just added
>> events {
>> worker_connections 1;
>> }
>
> This isn't going to work. With such a low number of worker
> connections nginx won't be able to start worker processes properly
> (unless you have no listening sockets configured).
>
> Try looking into error log, you should see something like:
>
> 2012/10/24 20:17:53 [alert] 58202#0: 1 worker_connections are not enough
> 2012/10/24 20:17:53 [notice] 58201#0: signal 20 (SIGCHLD) received
> 2012/10/24 20:17:53 [notice] 58201#0: worker process 58202 exited with code 2
> 2012/10/24 20:17:53 [alert] 58201#0: worker process 58202 exited with fatal code 2 and cannot be respawned
>
> You have to set worker_processes to something reasonable.
> Something like 512 as by default is usually a good choice for a
> small test server.
>
>> Now nginx is starting but I never see any hit to my mock service
>> despite it being specified in auth_http
>> auth_http http://localhost:8080/authorize;
>> No errors reported in the error log.
>>
>> When is nginx expected to hit the url specified in nginx? When
>> it gets launched? When an event occurs on the ports 110 and 2525
>> with the protocols I specified?
>
> The auth service is requested when nginx needs to authenticate a
> client and to find out a backend server address to proxy the
> client to.
>
> --
> Maxim Dounin
> http://nginx.com/support.html
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20121024/e9bdafbf/attachment.html>
More information about the nginx
mailing list