Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: connect() failed (1: Operation not permitted) while connecting to upstream
On 28.07.2008, at 0:58, Maxim Dounin wrote:
Hello!
On Sun, Jul 27, 2008 at 03:39:52PM +0300, andrey@xxxxxxxxxxxxxxxxxxxxxxxxx
wrote:
Проблема временно решилась использование юникс-сокета.
pf -vsi показал при кратковременном включении проксирования через
tcp.
state-mismatch 16733 109.4/s
О чем это может говорить?
Это говорит о том что надо *выключить* keep state между nginx'ом и
бекендами.
Происхождение указанных state-mismatch вероятнее всего - из-за
коллизий src-портов новых соединений со старыми соединениями,
находящимися в TIME_WAIT.
Если в отсутствие pf-а ядро такие коннекции нормально обрабатывает
(удалив старые в TIME_WAIT), то pf обнаружив у себя соответствующий
state - считает что случился state mismatch и возвращает EPERM.
Боротся - в первую очередь отключением keep state для коннекций
между nginx'ом и бекендом. Если по каким-то причинам отключить keep
state нельзя - то в первую очередь отключить рандомизацию src-
портов, а во вторую - растянуть portrange. Как то так:
sysctl net.inet.ip.portrange.randomized=0
sysctl net.inet.ip.portrange.first=1024
Есть ещё ручки в pf'е, но на память я их не помню. В любом случае -
в первую очередь добиться чтобы для соответствующих коннекций
state'ы не создавались вообще. Если не получается написать грамотно
правила - имеет смысл попробовать банальный "set skip on lo0" в
конфиге pf'а.
эта "банальность" обязательна, если не хочется иметь проблем с
локальными коннектами. например - невозможность их установить вообще.
Maxim Dounin
Вы писали Sunday, July 27, 2008, 1:57:56 PM:
no state работает с 7.0 (у меня 6.3)
За 4 часа без pf не было ошибок, после минуты работы -- есть.
Может надо что-то потюнить?
nginx/0.6.31
# uname -a
FreeBSD flybb.ru 6.3-RELEASE-p1 FreeBSD 6.3-RELEASE-p1 #0: Wed Feb
13 02:56:56 UTC 2008 root@xxxxxxxxxxxxxxxxxxxxxxxxxxxx:/usr/obj/
usr/src/sys/SMP i386
Вы писали Sunday, July 27, 2008, 9:26:45 AM:
On Sun, Jul 27, 2008 at 09:19:52AM +0300,
andrey@xxxxxxxxxxxxxxxxxxxxxxxxx wrote:
Актуальный конфиг pf. Проблема воспроизводится.
pass in proto tcp from any to any port 80 keep state
pass in proto tcp from 127.0.0.1 to port 9000
pass out proto tcp from 127.0.0.1 to port 9000
pass in proto tcp from 127.0.0.1 to port 25 keep state
pass in proto tcp from 127.0.0.1 to port 3306 keep state
pass in proto icmp from 213.186.114.123 to any keep state
pass in proto {tcp, udp} from **** to any port 22 keep state
pass in proto {tcp, udp} from **** to any port 22 keep state
pass out all keep state
В pf из OpenBSD 4.1, keep state делается по умолчанию.
Соответственно, нужно либо явно выключать его - "no state", либо
увеличивать число states - set limit { states XXXXX }.
Для 127.0.0.1 я бы без сомнений выключил:
pass in proto tcp from 127.0.0.1 to port 9000 no state
pass out proto tcp from 127.0.0.1 to port 9000 no state
Вы писали Friday, May 16, 2008, 3:56:20 PM:
> On Fri, May 16, 2008 at 03:05:33PM +0300, Vladimir Rekshta
wrote:
>> используется pf с такими правилами:
>> >> pass in quick on $ext_if proto tcp from < > to { } port
{ } flags S/SA
>> modulate state
> Нужно убрать modulate и keepstate между nginx'ом и бэкендами.
--
С уважением,
Andrey mailto:andrey@xxxxxxxxxxxxxxxxxxxxxxxxx
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
|