POST not allowed (was Re: Location problems)

Igor Clark igor at pokelondon.com
Mon Apr 7 14:04:38 MSD 2008


Hi Igor, I wonder if you might have a chance to look at this?
Do let me know if there's any further debug output or anything else I  
can provide.
Thanks!

Best,
Igor

On 31 Mar 2008, at 19:14, Igor Clark wrote:

> Hi Igor,
>
> Looking back, it seems I missed the patch you attached to this  
> email! Sorry about that.
>
> I see you integrated this change in 0.6.27:
>
>>   *) Change: now a request method is not changed while redirection  
>> to a
>>      named location via an "error_page" directive.
>
> I've tried to run a similar site on 0.6.29 with the same PHP  
> framework and an almost identical nginx vhost config (attached as  
> nginx.location.conf), using the "location" style you described,  
> including "error_page 404 405 = @...". I haven't converted all the  
> "rewrites" to "locations" yet, but there's no "if (! -f  
> $request_filename" or similar.
>
> I'm getting some strange and intermittent errors, including apparent  
> upstream timeouts, and seemingly random Bad Request errors on what  
> should be simple HREF links. I haven't been able to make a solid set  
> of steps to reproduce the Bad Request error yet, so the main problem  
> is as follows:
>
> POST to /admin/posts/add/
>
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 socket 23
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 epoll add connection: fd: 
>> 23 ev:80000005
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 connect to  
>> 192.168.142.2:9400, fd:23 #12
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 http upstream connect: -2
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 event timer add: 23:  
>> 60000:90483751
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 post event B7E4D10C
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 post event B7E4D0A4
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 delete posted event B7E4D0A4
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 http upstream check  
>> client, write event:1, "/admin/posts/add/"
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 http upstream recv(): -1  
>> (11: Resource temporarily unavailable)
>> 2008/03/31 16:10:33 [debug] 32073#0: *10 delete posted event B7E4D10C
>
> At this point, the browser hangs, and other requests for JS files  
> which the browser apparently sent at the same time (AJAX?) start to  
> fail too:
>
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 http finalize request: 0,  
>> "/scripts/admin/external/jquery/jquery.dimensions.js?"
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 set http keepalive handler
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 http close request
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 http log handler
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 run cleanup: 082D9760
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 file cleanup: fd:25
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 free: 082D9090, unused: 1453
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 event timer add: 22:  
>> 1000:90424947
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 free: 082B2BD0
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 free: 082AB588
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 hc free: 00000000 0
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 hc busy: 00000000 0
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 http keepalive handler
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 malloc: 082AB588:1024
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 recv: fd:22 -1 of 1024
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 recv() not ready (11:  
>> Resource temporarily unavailable)
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 post event B7E82070
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 post event B7E4D070
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 delete posted event B7E4D070
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 http empty handler
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 delete posted event B7E82070
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 http keepalive handler
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 recv: fd:22 855 of 1024
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 malloc: 082B2BD0:636
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 event timer del: 22:  
>> 90424947
>> 2008/03/31 16:10:34 [debug] 32073#0: *13 generic phase: 0
>
>
> When I hit "stop" on the browser I get this:
>
>> 2008/03/31 16:10:56 [info] 32073#0: *13 client closed prematurely  
>> connection, so upstream connection is closed too while sending  
>> request to upstream, client: 82.108.140.18, server: server_name,  
>> request: "GET /scripts/admin/uploader.js HTTP/1.1", upstream:  
>> "fastcgi://192.168.142.2:9400", host: "server_name", referrer: "http://server 
>> _name/admin/posts/add/"
>
>
> The same PHP code works fine using either 0.5.31 or 0.6.29 and the  
> old-style config (with lots of "if (! -f..").
>
> At present I don't really have much idea whether it's a problem with  
> the patch, with my config, or some problem with the PHP server or  
> PHP code which is only appearing under this circumstance, so I'd be  
> very grateful for any thoughts you have on the matter!
>
> Best wishes,
> Igor
>
>
> ===========
> Attachments:
>
> nginx.location.conf - doesn't work, causes problem described.
> nginx.if.conf - works with 0.5.35 and 0.6.29.
> nginx.debug.log - debug output from when I press the button which  
> submits the POST until I press the browser "stop" button.
>
>
> <nginx.location.conf>
>
>
> <nginx.if.conf>
>
>
> <nginx.debug.log>
>
>
> ===========
>
> On 10 Mar 2008, at 10:28, Igor Sysoev wrote:
>
>> On Mon, Mar 10, 2008 at 10:05:17AM +0000, Igor Clark wrote:
>>
>>> Thanks Igor. I just tried this and it allows it through, but it
>>> appears to the upstream as a GET. It needs to be a POST as it has
>>> multipart/form-data. Any thoughts?
>>
>> The patch. It will be included in 0.6.27.
>>
>>>>> […]
>>>>
>>>> You do not need these rewrite's, use location's.
>>>> The configuration is bigger, but it's much clearer and so it's
>>>> scaleable:
>>>> you can easy add new locations without being afraid to break some
>>>> rewrite.
>>>>
>>>> However, you may need to use some rewrite's in these locations if
>>>> you need
>>>> to rewrite URI to pass into "location  ~ \.flv$" with changed URI  
>>>> to
>>>> match
>>>> common root.
>>>>
>>>> 		location = / {
>>>> 			index		index;
>>>> 	 		root		/path/to/public/financethemes;
>>>> 			error_page	404 =	@phpapp;
>>>> 		}
>>>>
>>>>> […]





More information about the nginx mailing list