Как мешать WSGI подвесить апача

Ваш вопрос "Использует некоторое время блок, чтобы ничего не сделать плохая вещь?" может также быть отвечен с точки зрения траты циклов ЦП. В этом случае ответ является "Нет", с тех пор, процесс будет спать, в то время как это ожидает пользователя для ввода символа.

процесс проснется только после того, как символ вводится. Тогда тест произойдет и если тест передаст, т.е. c == '', то процесс заснет снова до вводится следующий символ. Это повторяется, пока непробел не вводится.

9
задан Paul Tarjan 3 August 2009 в 18:38
поделиться

2 ответа

It is not 'deadlock-timeout' you want as specified by another, that is for a very special purpose which will not help in this case.

As far as trying to use mod_wsgi features, you instead want the 'inactivity-timeout' option for WSGIDaemonProcess directive.

Even then, this is not a complete solution. This is because the 'inactivity-timeout' option is specifically to detect whether all request processing by a daemon process has ceased, it is not a per request timeout. It only equates to a per request timeout if daemon processes are single threaded. As well as help to unstick a process, the option will also have side effect of restarting daemon process if no requests arrive at all in that time.

In short, there is no way at mod_wsgi level to have per request timeouts, this is because there is no real way of interrupting a request, or thread, in Python.

What you really need to implement is a timeout on the HTTP request in your application code. Am not sure where it is up to and whether available already, but do a Google search for 'urllib2 socket timeout'.

13
ответ дан 4 December 2019 в 13:04
поделиться

Если я хорошо понимаю вопрос, вы хотите защитить apache от блокировки при запуске некоторых случайных скриптов от людей. Что ж, если вы используете ненадежный код, я думаю, у вас есть другие вещи, о которых нужно беспокоиться, хуже, чем apache.

Тем не менее, вы можете использовать некоторые директивы конфигурации для настройки более безопасной среды. Эти два, приведенные ниже, очень полезны:

  • WSGIApplicationGroup - Устанавливает, к какой группе приложений принадлежит приложение WSGI. Это позволяет разделить настройки для каждого пользователя - все приложения WSGI в одной группе приложений будут выполняться в контексте одного и того же субинтерпретатора Python процесса, обрабатывающего запрос.

  • WSGIDaemonProcess - Настраивает отдельный процесс демона для запуска Приложения. Процессы демона могут запускаться от имени пользователя, отличного от того, от имени которого обычно запускаются дочерние процессы Apache. Эта директива принимает множество полезных опций, я перечислю некоторые из них:

    • user = name | user = # uid , group = name | group = # gid :

      Определяет имя пользователя UNIX и имя группы или числовой uid или групповой gid пользователя / группы, от имени которой должны запускаться процессы демона.

    • stack-size = nnn

      Объем виртуальной памяти в байтах, выделяемой для стека, соответствующего каждому потоку, созданному mod_wsgi в процессе демона.

    • deadlock-timeout = sss

      Определяет максимальное количество секунд, которое может пройти, прежде чем процесс демона будет остановлен и перезапущен после обнаружения потенциальной взаимоблокировки Python GIL. По умолчанию 300 секунд.

3
ответ дан 4 December 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: