FreeTDS PHP mssql_connect() 503 при обновлении
Недавно мы установили FreeTDS с php56-mssql на один из наших серверов RHEL7. Кажется, все работает правильно, за исключением этой странной проблемы. При первой загрузке страницы php, которая использует функцию mssql_connect(), страница обращается к экземпляру sql server 2012, получает данные и отображает страницу, как и ожидалось. Однако если мы обновим страницу один раз, страница будет отображаться, но без каких-либо данных из базы данных. Если мы обновим второй раз, мы получим следующее сообщение 503:
Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Если мы продолжим обновление в третий раз, страница отобразится со всеми данными, как и ожидалось. Также во время устранения неполадок я заметил, что если мы загрузим страницу, подождем ~15 секунд, а затем обновим, страница загрузится, как ожидалось.
При исследовании error_log мы видим следующие сообщения:
[Fri Oct 21 12:37:44.971872 2016] [proxy_fcgi:error] [pid 14052:tid 140504888997632] [client xx.xxx.xx.xx:xxxxx] AH01071: Got error 'PHP message: PHP Warning: mssql_select_db(): 2 is not a valid MS SQL-Link resource in /var/www/vhosts/example.com/e0/conn.php on line 6\nPHP message: PHP Warning: mssql_init(): 2 is not a valid MS SQL-Link resource in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 16\nPHP message: PHP Warning: mssql_bind() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 17\nPHP message: PHP Warning: mssql_bind() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 18\nPHP message: PHP Warning: mssql_execute() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 19\nPHP message: PHP Warning: mssql_free_statement() expects parameter 1 to be resource, boolean given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 20\nPHP message: PHP Warning: mssql_fetch_array() expects parameter 1 to be resource, null given in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 23\nPHP message: PHP Notice: Undefined offset: 0 in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 53\nPHP message: PHP Notice: Undefined offset: 0 in /var/www/vhosts/example.com/httpdocs/e1/search.php on line 60\n', referer: http://example.com/contacts/
[Fri Oct 21 12:37:45.347450 2016] [proxy_fcgi:error] [pid 14109:tid 140504956139264] (104)Connection reset by peer: [client xx.xxx.xx.xx:xxxxx] AH01075: Error dispatching request to :, referer: http://example.com/e1/
[Fri Oct 21 12:37:45.347625 2016] [include:warn] [pid 14109:tid 140504956139264] [client xx.xxx.xx.xx:xxxxx] AH01374: mod_include: Options +Includes (or IncludesNoExec) wasn't set, INCLUDES filter removed: /error_docs/maintenance.html, referer: http://example.com/e1/
Какие-либо предложения? Я в недоумении, почему это происходит так, как это происходит!?
ОБНОВИТЬ
Протестировал другую страницу, используя это соединение. Он загружается нормально с первого раза, но если вы запросите его еще раз до истечения 15 секунд, он не сможет подключиться:
AH01071: Got error 'PHP message: PHP Warning: mssql_connect(): Unable to connect to server: theServerName
1 ответ
Проблема в этом случае заключалась в том, что наш новый сервер был настроен для запуска этого приложения в качестве "приложения FPM, обслуживаемого Apache", где, как и следовало ожидать, настройка этого приложения выполнялась как "приложение FastCGI, обслуживаемое Apache".