Request time of 60s when denying SSL requests?
Maxim Dounin
mdounin at mdounin.ru
Fri Jan 11 18:17:52 UTC 2013
Hello!
On Fri, Jan 11, 2013 at 07:37:04AM -0800, JB Hobbs wrote:
> Thank you Maxim. I have a few follow up points and questions
> please:
>
> 1. I should have mentioned that I was doing this on Nginx 0.6.x.
> I just tried the same test on Nginx 1.2.6. With 1.2.6 it does
> return the 403 to the browser as expected.
Well, ancient versions may do strange things. :)
> The following applies to my testing on Nginx 1.2.6:
>
> 2. I understand (and verfied by closing the browser sooner) from
> your response that the browser (Chrome in this case) is keeping
> the connection open with Nginx for 60 seconds when it is HTTPS
> (and about 10 seconds with http). However, if a browser makes a
> request to the root, I want to tell Nginx to force the
> connection closed immediately after retuning the 403. This is a
> high volume web service and I do not want browsers keeping
> requests open.
>
> Is there some sort of directive or option I can set within my
> location=/ block to tell nginx to drop the connection
> immediately upon returning the 403? This is highly desirable so
> I hope there is a way to do it.
You may disable keepalive by configuring keepalive_timeout to 0,
see http://nginx.org/r/keepalive_timeout.
It may be configured on a per-location basis, and hence you may
configure nginx to don't use keepalive after 403 by configuring
something like
error_page 403 /403.html;
location = /403.html {
keepalive_timeout 0;
}
Note well: 400 and 408 in your previous message aren't after 403.
They are logged for connections without any single request got by
nginx, and keepalive_timeout do not apply here. To limit the time
nginx will wait for a request you may tune client_header_timeout,
see http://nginx.org/r/client_header_timeout.
> 3. On a related note - as I mentioned nginx is serving as a
> front-end to Jetty. The way our web service makes, a browser
> should only make a single request for one html page and never
> make another request until 24 hours later, when the cache period
> expires. With this in mind, even for the legitimate requests, I
> am wondering if it would be more efficient for the server if I
> turned off keep-alive because there will just be this single
> request. What do you think? Are there any other optimizations I
> can make to this or other settings to use considering nginx will
> be serving just one single request per 24 hour per unique
> browser?
I think you are right, disabling keepalive completely may be
beneficial in such case. (Well, nginx itself doesn't care much,
but it should be less painfull for your OS.)
> 4. I have a access_log directive that points to main.log outside
> of the "location" blocks so it serves as the default location
> for where Nginx should log requests to. Inside my "location=/"
> block I have another access_log directive that points to
> forbidden.log. When the above http and https request are made
> to "/", I do get a log entry in the forbidden.log as desired.
> However I also get this log entry in my main.log file as well.
> What do I need to do so that nginx only logs this to the
> forbidden.log, without (hopefully) removing the main.log entry
> defined outside of the location blocks (since I use this as a
> default from many other location blocks).
I believe you misunderstood what you actually get. Defining
access_log inside the location overrides all access_log's difined
on previous levels, so you'll only get requests logged to
fobidden.log. What you see in your main.log is other connections
opened by the browser.
--
Maxim Dounin
http://nginx.com/support.html
More information about the nginx
mailing list