Активированный сокетом SystemD uWSGI для https - PullRequest
0 голосов
/ 28 августа 2018

uWSGI поддерживает активацию через сокет (из systemd), но я смог заставить его работать только для http, а не для соединений https.

  • https без сокет-активации работает с
    • shared-socket =: 443
    • https-socket = = 0, / etc / ssl / certs / mycert_chained-certificate.crt, / etc / ssl / private / mycert_privatekey.pem
  • Похоже, что сокет, предоставленный systemd, используется как http-сокет, не как shared-socket. Таким образом, https-socket = = 0 не имеет никакого отношения к.
  • Поскольку файловый дескриптор из systemd всегда равен 3, я попытался форсировать shared-socket to 3. Следующая команда в модуле systemd работает, когда не активирован через сокет, но все еще пытается привязаться к http-сокету, когда активирован через сокет

ExecStart = / bin / bash -c '/ usr / bin / uwsgi_psgi --shared-socket $ (/ usr / bin / test -n "$ LISTEN_FDS" && / bin / echo "fd: // 3" | | / bin / echo "0.0.0.0:443") --ini /etc/uwsgi.ini'

  • Глядя на исходный код uwsgi, я обнаружил в core / setup_utils.c , что код, который привязывается к сокету systemd, окружен символом char * listen_pid = getenv ("LISTEN_PID"); if (listen_pid) {...}. Таким образом, я попытался сбросить LISTEN_PID, чтобы uWSGI не связывал http-сокет с файловым дескриптором 3. Но теперь uWSGI связывает shared-сокет со случайным номером порта (и не работает).

ExecStart = / bin / bash -c 'LISTEN_PID = / usr / bin / uwsgi_psgi --shared-socket $ (/ usr / bin / test -n "$ LISTEN_FDS" && / bin / echo "fd: // 3 "|| / bin / echo" 0.0.0.0:443 ") --ini /etc/uwsgi.ini'

Кто-нибудь еще идеи? Любая подсказка очень ценится.

...