|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
Доброго дня всем! Возникла следующая проблема. Использую web-сервер Apache и БД MySQL на ОС Windows 2012. Настроил на запуск скрипт cgi, который выполняет запрос из БД. Скрипт отрабатывает локально (при запуске через командный файл) и на других web-серверах, но вот Apache не даёт подключиться к БД при запуске скрипта CGI (index.cgi). Помогите настроить Apache для корректного запуска файла index.cgi. Файл cgi отрабатывает корректно, т.е. сам Apache настроен на обработку скриптов, но вылетает именно на моменте, когда идёт открытие соединения к БД mySQL. Этот же скрипт пробовал запускать на другом веб-сервера - отрабатывает корректно! Что не так? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 23:38 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserITApache не даёт подключиться к БДКак не дает... Это ну совсем не апачево дело. В логах что? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 00:14 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkle, В логах следующее: [Tue Dec 18 09:58:30.049595 2018] [cgi:error] [pid 2688:tid 964] [client *.*.*.*:58632] End of script output before headers: index.cgi Такой момент обратил сейчас ещё. В логах mySQL при УСПЕШНОМ обращении к базе из моего скрипта (если не через браузер) вот такой лог выдаётся: "User@localhost on mybd using SSL/TLS" <...> А когда через браузер идёт обращение к скрипту в логах mySQL ничего не пишется... И это понятно,т.к. соединение обрубается на момент открытия. Также от ошибки в логах Apache типа: " End of script output before headers..." - я избавляюсь, если полный скрипт браузеру подсовываю, где все заголовки страницы есть, а вот само подключение так и отваливается. Уже либо совсем без записей в лог Apache либо с ошибкой, что скрипт отработался с ошибкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 10:29 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserIT, Получается, апач вполне нормально обращается к скрипту, запускает его, но не дожидается корректного ответа от скрипта. Скорее всего, cgi-скрипт аварийно завершает работу. В принципе, родитель (в данном случае, вебсервер) может убить запущенный процесс, однако, он написал бы об этом в логе, скорее всего. Связано ли это непосредственно с выполнением подключения к СУБД (открытие сокета, авторизация) или происходит раньше (например, при загрузке какой-то библиотеки, модуля и т.п.) - это не понятно. Наверно, только отладка скрипта прольет какой-то свет. Что скрипт работает на другой машине - это, скорее всего, вполне можно объяснить различными версиями используемого ПО (могут быть какие-то зависимости с версиями библиотек, например) и/или различным окружением, правами доступа. Есть смысл попробовать сравнить. Возможно, для отладки проще написать тестовый скрипт. Кроме того, на сервере могут быть настроены какие-то ограничения, например, по использованияю памяти или времени выполнения процесса - такие действия в системном логе должны быть отмечены. UserITФайл cgi отрабатывает корректноЭто утверждение на чем основано, и речь идет о запуске на другом сервере или на проблемном? Если на проблемном - то запуск производится в тех же условиях (пользователь, окружение), что и при запуске от вебсервера или в иных? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 11:38 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkle, На одной и той же машине ставил и Apache, потом его отключал, запускал другой веб-сервер (Tiny). C Apache результат отрицательный, а с Tiny скрипт отработал. Скрипт для отладки упростил до самого просто (открыть БД и запросить одну запись). На моменте ADOConnection.Open - скрипт отваливается. Драйвера тоже пытался настроить по-разному и для 32бит и для 64 бит. В пуле пользовательских и системных настроек (я про odbc), даже сделал и там и там один и тот же источник с одинаковым именем - не помогает. Я копал ещё в скрипте, как открывается подключение... Т.е. доходит до обращение к драйверу и тут отваливается, как будто его просто нет в системе... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 11:52 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
Так и есть, скрипт аварийно завершает свою работу :) На строке ADOConnection.Open. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 11:53 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkleUserIT, UserITФайл cgi отрабатывает корректноЭто утверждение на чем основано, и речь идет о запуске на другом сервере или на проблемном? Если на проблемном - то запуск производится в тех же условиях (пользователь, окружение), что и при запуске от вебсервера или в иных? Права и окружение тоже самое: на том же диске и на той же машине. От Tiny запуск прошёл корректно, и с локального браузера и с удалённого. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 11:58 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
Может быть есть какой-то дебагер, который покажет, как происходило обращение к mySQL драйверу и на чём он отказался работать. Это же стандартная api-функция windows: "ADOConnection.Open". Т.е. почему именно на Apache отключается - загадки, возможно идёт какой-то конфликт. Сниферы портов все уже перепробовал: стандартные обращения по http... но доп. информации никакой не получил. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 12:04 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserITПрава и окружение тоже самое: на том же диске и на той же машине. От Tiny запуск прошёл корректноОкружение посмотрите внимательно, сравните все переменные. Вебсерверы таки разные. UserITНа строке ADOConnection.Open.UserITТ.е. доходит до обращение к драйверу и тут отваливается, как будто его просто нет в системе...Не в разрядности ли проблема? На винде для 32 и для 64 разные драйверы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 12:13 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkle, Я пробовал разные драйвера 32- и 64бит, могу ещё раз для чистоты эксперимента настроить разные драйвера... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 13:36 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkle, Сейчас ещё раз попробовал разные драйверы. По идее мой скрипт должен работать с 32бит, но корректно отрабатывает, как с 32- так и с 64-бит, если запустить вне браузера. Через браузер ни так и ни сяк. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 13:49 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserITСкрипт отрабатывает локально (при запуске через командный файл) и на других web-серверах, но вот Apache не даёт подключиться к БД при запуске скрипта CGI (index.cgi). Я бы для начала в качестве CGI скрипта попробовал использовать shell скрипт. Потому что кто ж знает, что там за интерпретатор у твоего index.cgi... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 14:56 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, CGI на Delphi - консольное приложение. у меня Windows... Если мне делать какой-то скрипт, тогда надо чтобы не требовало доп.установок... для эксперимента устанавливать на сервер доп.ПО не очень хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 16:44 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserITCGI на Delphi - консольное приложение.Эх... Исходники то есть, хоть какая-то отладка возможна? UserITу меня Windows...Это ещё ничего, это ещё жить можно. Вот на работе коллега говорит "у меня лапки" - вот тут уже всё. UserITЕсли мне делать какой-то скрипт, тогда надо чтобы не требовало доп.установок... для эксперимента устанавливать на сервер доп.ПО не очень хочется.Ну дык худо-бедно в винде есть свой командный интерпретатор cmd.exe. Есть ещё вполне себе ничего VSH. О, для особых ценителей - почти штатный PowerShell. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 19:35 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
Вот, вроде и не спросонок, а ляпнул не ту букву. Конечно, про WSH думал ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2018, 19:37 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkleЭх... Исходники то есть, хоть какая-то отладка возможна? Конечно есть! ) я же говорю, что именно при открытии соединения к БД и появляется ошибка :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 00:13 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
Господа! Написал cgi на vbs. Всё тоже самое. Только теперь Apache выдаёт ещё одну ошибку: ADODB.Connection: \x8d\xa5 \xe3\xa4\xa0\xa5\xe2\xe1\xef \xad\xa0\xa9\xe2\xa8 \xe3\xaa\xa0\xa7\xa0\xad\xad\xeb\xa9 \xaf\xae\xe1\xe2\xa0\xa2\xe9\xa8\xaa. \x82\xa5\xe0\xae\xef\xe2\xad\xae, \xae\xad \xe3\xe1\xe2\xa0\xad\xae\xa2\xab\xa5\xad \xad\xa5\xaf\xe0\xa0\xa2\xa8\xab\xec\xad\xae. Или что в перекодировании означает: ADODB.Connection: Не удается найти указанный поставщик. Вероятно, он установлен неправильно. (!) Вот... т.е. изначально эта ошибка и выдавалась в моём оригинале, видимо. Но локально (запуская скрипт руками из этой же папки) скрипт отрабатывает верно... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 11:50 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserIT, Ожидаемо. Вот и смотрите внимательно окружение и права. При запуске ручками от имени рядового пользователя (включая администратора) оно одно получаются, при запуске из-под вебсервера (служба, да?) - другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 12:19 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkle, Все эти факторы максимально проверил: 1. Запускал Apache как службу, 2. Запускал Apache от вошедшего пользователя, 3. Запускал Apache от имени администратора, 4. Запускал Apache как службу от имени пользователя, 5. Настраивал ODBC для 32- и 64-разрядных систем... Результата нет... Где ещё копать даже не представляю :) Какие ещё варианты посмотреть можно, есть идеи? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 14:20 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserITКакие ещё варианты посмотреть можно, есть идеи? :) Прекратить пляски с бубном и прочитать документацию Апача. Учётка и права с которыми он запускается, не имеет ничего общего с окружением и правами с которыми он запускает CGI. А из-за последнего пункта - ещё и букварь по функционированию компьютеров. Разрядность бибилиотек жёстко определяется разрядностью приложения. Ну, заодно можно просветиться на предмет различий между User DSN и System DSN. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 14:58 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНу, заодно можно просветиться на предмет различий между User DSN и System DSN. Настройки User DSN и System DSN проверил в самом начале возникновения проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 15:13 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserITКакие ещё варианты посмотреть можно, есть идеи? :)Посмотрите http://httpd.apache.org/docs/2.4/mod/mod_suexec.html По крайней мере, если требуется лишь сменить пользователя. Ну и то, от чего Вы всё время увильнуть пытаетесь, тоже можно настроить: http://httpd.apache.org/docs/2.4/mod/mod_env.html ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 15:26 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkle, Спасибо за ссылки! Но я это всё видел на других сайтах, но посмотрю ещё раз. Сделал скрипт для просмотра переменных и окружения вебсервера. Поможете разобраться, где что подкрутить? :) Вот переменные CGI: QUERY_STRING = REQUEST_METHOD = GET GATEWAY_INTERFACE = CGI/1.1 REMOTE_ADDR = *.*.196.31 REMOTE_PORT = 59849 REMOTE_HOST = SERVER_NAME = *.*.196.31 SERVER_PORT = 80 SERVER_ADDR = *.*.*.* SERVER_PROTOCOL = HTTP/1.1 SERVER_SOFTWARE = Apache/2.4.37 (Win32) SCRIPT_NAME = /cgi-bin/index.cgi SCRIPT_FILENAME = C:/www/root/html/cgi-bin/index.cgi PATH_INFO = PATH_TRANSLATED = CONTENT_TYPE = CONTENT_LENGTH = AUTH_TYPE = REMOTE_USER = DOCUMENT_ROOT = C:/www/root/html/ SERVER_ADMIN = admin@example.com SERVER_SIGNATURE = HTTP_CONNECTION = keep-alive HTTP_ACCEPT_LANGUAGE = ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 HTTP_HOST = *.*.196.31 HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 HTTP_ACCEPT_LANGUAGE = ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7 HTTP_ACCEPT_ENCODING = gzip, deflate HTTP_ACCEPT_CHARSET = HTTP_CONNECTION = keep-alive HTTP_REFERER = HTTP_X_FORWARDED_FOR = QUERY_STRING_UNESCAPED = REQUEST_URI = /cgi-bin/index.cgi DOCUMENT_NAME = DOCUMENT_URI = LAST_MODIFIED = DATE_LOCAL = DATE_GMT = SERVER_PROTOCOL = HTTP/1.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 22:39 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
UserIT, Я дико извиняюсь за проблемы с моим зрением, но в этом списке никак не могу разглядеть виндовые переменные окружения, такие как %TMP%, %PATH%, ну и и ещё с десяток примерно стандартных, которые могут понадобятся консольному приложению для работы. Или они гарантировано не понадобятся приложению и поэтому Вы их не приводите? Или их просто нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 22:56 |
|
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
|
|||
---|---|---|---|
#18+
vkleЯ дико извиняюсь за проблемы с моим зрением, но в этом списке никак не могу разглядеть виндовые переменные окружения, такие как %TMP%, %PATH%, ну и и ещё с десяток примерно стандартных, которые могут понадобятся консольному приложению для работы. Или они гарантировано не понадобятся приложению и поэтому Вы их не приводите? Или их просто нет? При запуске скрипта из браузера эти переменные выводятся в основном пустыми: APPDATA = COMMONPROGRAMFILES = COMPUTERNAME = COMSPEC = C:\Windows\system32\cmd.exe HOMEDRIVE = HOMEPATH = LOGONSERVER = NUMBER_OF_PROCESSORS = 2 OS = PATH = PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC PROCESSOR_ARCHITECTURE = PROCESSOR_IDENTIFIER = PROCESSOR_LEVEL = PROCESSOR_REVISION = PROGRAMFILES = SESSIONNAME = SYSTEMDRIVE = SYSTEMROOT = C:\Windows TEMP = TMP = USERDOMAIN = USERNAME = USERPROFILE = а вот если запустить консольное приложение тогда получаю примерно так: TEMP = C:\Users\Alex\AppData\Local\Temp\2 TMP = C:\Users\Alex\AppData\Local\Temp\2 PATH = C:\Users\Alex\AppData\Local\Temp\2 ALLUSERSPROFILE = C:\ProgramData APPDATA = C:\Users\Alex\AppData\Roaming COMMONPROGRAMFILES = C:\Program Files (x86)\Common Files COMPUTERNAME = Example COMSPEC = C:\Windows\system32\cmd.exe HOMEDRIVE = C: HOMEPATH = \Users\Alex LOGONSERVER = \\Example NUMBER_OF_PROCESSORS = 2 OS = Windows_NT PATH = Windows_NT PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC PROGRAMFILES = C:\Program Files (x86) SESSIONNAME = RDP-Tcp#32 SYSTEMDRIVE = C: SYSTEMROOT = C:\Windows TEMP = C:\Users\Alex\AppData\Local\Temp\2 TMP = C:\Users\Alex\AppData\Local\Temp\2 USERDOMAIN = Example USERNAME = Alex USERPROFILE = C:\Users\Alex ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2018, 00:48 |
|
|
start [/forum/search_topic.php?author=Ann_no&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 725ms |
total: | 972ms |
0 / 0 |