Hello!
On Tue, Nov 03, 2009 at 07:19:30PM +0300, Artem Danilenko wrote:
> Приветствую!
>
> > >
> > > Понадобилось нескольким сетям закрыть POST!
> > >
> > > location / {
> > > [skip]
> > > limit_except GET {
> > > deny xx.xx.xx.0/20;
> > > deny xy.xy.xy.0/24;
> > > allow all;
> >
> > + proxy_pass http://127.0.0.1/;
> >
> > > } proxy_pass http://127.0.0.1/;
> > > [skip]
> > > }
> > >
> > > location @apache {
> > > proxy_pass http://127.0.0.1/;
> > > [skip]
> > > }
> > >
> > > Когда клиент из deny сетей пытается сделать POST, он получает 403 и это работает правильно, но тогда все остальные при POST, получают 404. В error.log видно, что запросы не идут на прокси, а идут в "root html" который в этом локейшене не определен, т.е. берется тот, что по умолчанию.
> >
> > Директива proxy_pass не наследуется, внутри блока limit_except её надо явно
> > указывать.
>
> Добавил:
> nginx -t
> [emerg]: "proxy_pass" may not have URI part in location given by regular expression, or inside named location, or inside the "if" statement, or inside the "limit_except" block in /etc/nginx/nginx.conf:169
> configuration file /etc/nginx/nginx.conf test failed
Очевидное решение - спилить URI part.
- proxy_pass http://127.0.0.1/;
+ proxy_pass http://127.0.0.1;
Maxim Dounin