Добрый вечер. Есть следующая проблема. На сервере настроен nginx + php-fpm через сокет, php разные сайты слушают 127.0.0.1 на разных портах:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 447/php-fpm: master
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 447/php-fpm: master
...
Один из портов этого сервера проброшен на другой сервер:
/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport (LOCALPRT) -j DNAT --to (REMOTEIP):(REMOTEPORT)
/sbin/iptables -A FORWARD -d (REMOTEIP) -p tcp --dport (REMOTEPORT) -j ACCEPT
Интерфейсы eth0, lo, есть еще tun0 но он сейчас не используется.
Для работы проброса портов необходим
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
Но как только я прописываю это правило - отваливаются все сайты, ошибка 500-какая-то, в логе:
*39 recv() failed (104: Connection reset by peer) while reading response header from upstream
*79 recv() failed (104: Connection reset by peer) while reading response header from upstream
Убираю MASQUERADE - проброс не работает, сайты работают.
Пробовал обойти эту проблему как-то так:
/sbin/iptables -t nat -A POSTROUTING ! -o lo -j MASQUERADE
но это ничего не дало: если правило есть - не работают сайты, если его нет - не работает проброс. Можно конечно все сайты (php-fpm) перевести на unix сокеты, но не хотелось бы. Что посоветуете, как исправить?


