вторник, 6 сентября 2016 г.

Socat as proxy tcp server

В качестве примера, возьмём случай когда нам необходимо изнутри docker-контейнера с сетью в режиме bridge достучаться до mysql-сервера, слушающего локальный порт на docker-хоста. Как оказалось это не так уж и просто, из коробки такого варианта нет. Использовать сеть хоста не предлагать, итак уже костыль. Про производительность тоже говорить не надо. Про проброс внутрь контейнера сокета mysql - тоже, не все приложения умеют его использовать >_<

Конфиг upstart, /etc/init/mysql-proxy.conf:

start on start on started docker

console output
exec /usr/bin/socat TCP-LISTEN:3306,bind=172.17.0.1,fork TCP:127.0.0.1:3306

172.17.0.1 - IP-адрес вашего бриджа, например, docker0

Юнит для systemd - домашнее задание

PHP on apache and nginx ssl termination

Боль, печаль: https://github.com/joomla/joomla-cms/issues/8970

Если php-приложение интерпретируется apache’ом, находится за реверс-прокси, терминирующим SSL (nging/haproxy), и не может нормально работать (генерировать нормальные url’ы) из-за того что опирается на переменную $_SERVER['HTTPS'], то это можно попробовать исправить выставлением соответствующей переменной окружения. На самом деле беда может быть не только с php-приложением ;)

Кусочек конфига apache, в зависимости от конфигурации и разрешений, можно добавить в .htaccess или конфиг хоста/apache:

LoadModule setenvif_module modules/mod_setenvif.so
<IfModule setenvif_module>
    SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>

Кусок конфига nginx, поместить в секцию с proxy_pass:

proxy_set_header X-Forwarded-Proto $scheme;

Кусок конфига haproxy (не тестировался, на основе документации, ssl_fc):

http-request set-header X-Forwarded-Proto https if { ssl_fc }

Судя по документации, у haproxy есть несколько методов управлять заголовками: