This commit is contained in:
Fedor
2026-02-16 18:18:13 +03:00
commit eb458d687b
8 changed files with 225 additions and 0 deletions

9
proxy/Dockerfile Normal file
View File

@@ -0,0 +1,9 @@
FROM alpine:3.19
RUN apk add --no-cache squid \
&& mkdir -p /var/log/squid /var/cache/squid /var/run/squid \
&& chown -R squid:squid /var/log/squid /var/cache/squid /var/run/squid
COPY squid.conf /etc/squid/squid.conf
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 3128
ENTRYPOINT ["/entrypoint.sh"]

15
proxy/entrypoint.sh Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
set -e
mkdir -p /etc/squid/conf.d
# Родительский прокси: host и port из .env (генерируем одну строку конфига)
if [ -n "$EXTERNAL_PROXY_HOST" ] && [ -n "$EXTERNAL_PROXY_PORT" ]; then
_auth=""
if [ -n "$EXTERNAL_PROXY_USER" ] && [ -n "$EXTERNAL_PROXY_PASS" ]; then
_auth=" login=${EXTERNAL_PROXY_USER}:${EXTERNAL_PROXY_PASS}"
fi
echo "cache_peer ${EXTERNAL_PROXY_HOST} parent ${EXTERNAL_PROXY_PORT} 0 no-query default name=parent${_auth}" > /etc/squid/conf.d/parent.conf
else
echo "# Внешний прокси не задан (EXTERNAL_PROXY_HOST/PORT). Заполни .env и перезапусти." > /etc/squid/conf.d/parent.conf
echo "cache_peer no-proxy.invalid parent 1 0 no-query default name=parent" >> /etc/squid/conf.d/parent.conf
fi
exec squid -f /etc/squid/squid.conf -N

39
proxy/squid.conf Normal file
View File

@@ -0,0 +1,39 @@
# Локальный прокси для n8n: часть доменов — через внешний прокси, остальное — напрямую
# Внешний прокси задаётся в .env: EXTERNAL_PROXY_HOST, EXTERNAL_PROXY_PORT
# Домены для внешнего прокси — список ниже (acl to_parent_proxy)
http_port 3128
# Доступ только из Docker-сети (n8n)
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl SSL_ports port 443
acl Safe_ports port 80 443
acl CONNECT method CONNECT
# Подключаем сгенерированный конфиг с cache_peer (host/port из env)
include /etc/squid/conf.d/parent.conf
# Домены, которые идут через внешний прокси (остальные — напрямую)
acl to_parent_proxy dstdomain .openai.com
acl to_parent_proxy dstdomain .anthropic.com
acl to_parent_proxy dstdomain .googleapis.com
# Добавь при необходимости: .azure.com, .aws.amazon.com и т.д.
# Родительский прокси только для этих доменов
cache_peer_access parent allow to_parent_proxy
cache_peer_access parent deny all
# Важно: CONNECT (HTTPS) по умолчанию Squid может слать напрямую, а не в parent.
# Запрещаем прямой доступ для этих доменов — только через parent.
never_direct allow to_parent_proxy
# Таймауты при работе через родительский прокси (увеличить при медленном прокси)
connect_timeout 30 seconds
read_timeout 60 seconds
# Разрешаем запросы из нашей сети
http_access allow localnet
http_access deny all