nginx and thttpd + cgi, remote_addr = 127.0.0.1
Кирюшкин Владимир
vk at jasystem.net
Tue Oct 25 21:11:40 UTC 2011
Hello,
i have an issue with getting users' real IP. I am using nginx as frontend with thttpd as backend. I've added such options to my default server in nginx config:
location ~ \.cgi|pl$ {
proxy_pass http://127.0.0.1:8000;
include /etc/nginx/proxy.conf;
}
/etc/nginx/proxy.conf has such options among others:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
and I have patched latest thttpd (http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz) with this patch: http://wiki.nginx.org/ThttpdRealIP
also i had to rename "getline" to "mygetline" in thttpd-2.25b/extras/htpasswd.c because i was getting an error "htpasswd.c:52: error: conflicting types for 'getline'" during compilation.
the whole thttpd config is:
host=127.0.0.1
port=8000
dir=/var/www/default
user=www-data
cgipat=**.cgi|**.pl
vhost
charset=utf-8
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
after installing and starting both webservers I saved this script as index.cgi and opened it in browser(i'm using Opera):
#!/bin/sh
echo "Content-type: text/html; charset=UTF-8";
echo;
echo "i am cgi script<br><br>";
echo "env: <br><br>";
env
when I opened it with Opera Turbo enabled (thus using Opera's proxy server), I see output like this:
. .
GATEWAY_INTERFACE=CGI/1.1 REMOTE_ADDR=127.0.0.1 HTTP_USER_AGENT=Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.51 . . .
and when I open it without Opera Turbo (with my real IP), I'm getting my real IP in the output (a part was hidden):
. .
GATEWAY_INTERFACE=CGI/1.1 REMOTE_ADDR=178.177.***.*** HTTP_USER_AGENT=Opera/9.80 (X11; Linux i686; U; ru) Presto/2.9.168 Version/11.51 . . .
what could I have done wrong with configuration?
//Jef, sorry for CC, but I don't know the cause of this issue, and it still could be thttpd. though i hope it's just my hands :)
Cheers,
Vladimir
More information about the nginx
mailing list