The proxy attempt should get a 444, but right now
redirects to our home page. We want to use 444
to conserve CPU and bandwidth. We use ^http
but it fails:
if ($request_uri ~* (^http.*|.proxy.) ) {
return 444;
}
Thank you, but I believe the answers were given too fast.
(0) We already considered default servers
(1) $request_uri is not the actual, full, HTTP request line
(2) nginx has NO way to match ^http after GET (that we found)
(3) I suggest a new variable,
$full_request_line =
FULL TRUE HTTP REQUEST LINE
INCLUDING GET/PUT/POST/HEAD VERB
INCLUDING SCHEME
REGARDLESS OF SERVER BLOCK
That would be fully general.
We require that raw IP address reach our working server.
So http://1.2.3.4/ must work like http://goodhostname.com/
and can’t go to a “_” 444 block as you suggest.
We already thought of that and tried it a long time ago.
But proxy attempts use http://1.2.3.4 too, so they can only be
defeated with regular expressions. In nginx, this matching is
nearly impossible, because of hidden assumptions in the
software.
Please consider $full_request_line for future improvement,
thank you. Nginx is excellent and we appreciate your work.
On Sat, Sep 19, 2009 at 07:17:15PM -0700, Wohbah wrote:
$full_request_line =
and can’t go to a “_” 444 block as you suggest.
We already thought of that and tried it a long time ago.
But proxy attempts use http://1.2.3.4 too, so they can only be
defeated with regular expressions. In nginx, this matching is
nearly impossible, because of hidden assumptions in the
software.
Please consider $full_request_line for future improvement,
thank you. Nginx is excellent and we appreciate your work.
Sorry, I mistaked: $request_uri is just URI part.
The required variable aleady exists: $request and it’s usually used
in access_log.