Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI / 25 сообщений из 34, страница 1 из 2
17.12.2018, 23:38
    #39749193
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Доброго дня всем! Возникла следующая проблема.
Использую web-сервер Apache и БД MySQL на ОС Windows 2012.
Настроил на запуск скрипт cgi, который выполняет запрос из БД.
Скрипт отрабатывает локально (при запуске через командный файл) и на других web-серверах, но вот Apache не даёт подключиться к БД при запуске скрипта CGI (index.cgi).
Помогите настроить Apache для корректного запуска файла index.cgi.
Файл cgi отрабатывает корректно, т.е. сам Apache настроен на обработку скриптов, но вылетает именно на моменте, когда идёт открытие соединения к БД mySQL.
Этот же скрипт пробовал запускать на другом веб-сервера - отрабатывает корректно!
Что не так? )
...
Рейтинг: 0 / 0
18.12.2018, 00:14
    #39749198
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserITApache не даёт подключиться к БДКак не дает... Это ну совсем не апачево дело. В логах что?
...
Рейтинг: 0 / 0
18.12.2018, 10:29
    #39749287
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
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 либо с ошибкой, что скрипт отработался с ошибкой.
...
Рейтинг: 0 / 0
18.12.2018, 11:38
    #39749330
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserIT,

Получается, апач вполне нормально обращается к скрипту, запускает его, но не дожидается корректного ответа от скрипта. Скорее всего, cgi-скрипт аварийно завершает работу.
В принципе, родитель (в данном случае, вебсервер) может убить запущенный процесс, однако, он написал бы об этом в логе, скорее всего.
Связано ли это непосредственно с выполнением подключения к СУБД (открытие сокета, авторизация) или происходит раньше (например, при загрузке какой-то библиотеки, модуля и т.п.) - это не понятно. Наверно, только отладка скрипта прольет какой-то свет.
Что скрипт работает на другой машине - это, скорее всего, вполне можно объяснить различными версиями используемого ПО (могут быть какие-то зависимости с версиями библиотек, например) и/или различным окружением, правами доступа. Есть смысл попробовать сравнить. Возможно, для отладки проще написать тестовый скрипт.
Кроме того, на сервере могут быть настроены какие-то ограничения, например, по использованияю памяти или времени выполнения процесса - такие действия в системном логе должны быть отмечены.

UserITФайл cgi отрабатывает корректноЭто утверждение на чем основано, и речь идет о запуске на другом сервере или на проблемном? Если на проблемном - то запуск производится в тех же условиях (пользователь, окружение), что и при запуске от вебсервера или в иных?
...
Рейтинг: 0 / 0
18.12.2018, 11:52
    #39749338
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
vkle,
На одной и той же машине ставил и Apache, потом его отключал, запускал другой веб-сервер (Tiny).
C Apache результат отрицательный, а с Tiny скрипт отработал.
Скрипт для отладки упростил до самого просто (открыть БД и запросить одну запись). На моменте ADOConnection.Open - скрипт отваливается.
Драйвера тоже пытался настроить по-разному и для 32бит и для 64 бит.
В пуле пользовательских и системных настроек (я про odbc), даже сделал и там и там один и тот же источник с одинаковым именем - не помогает.
Я копал ещё в скрипте, как открывается подключение...
Т.е. доходит до обращение к драйверу и тут отваливается, как будто его просто нет в системе...
...
Рейтинг: 0 / 0
18.12.2018, 11:53
    #39749340
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Так и есть, скрипт аварийно завершает свою работу :)
На строке ADOConnection.Open.
...
Рейтинг: 0 / 0
18.12.2018, 11:58
    #39749344
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
vkleUserIT,

UserITФайл cgi отрабатывает корректноЭто утверждение на чем основано, и речь идет о запуске на другом сервере или на проблемном? Если на проблемном - то запуск производится в тех же условиях (пользователь, окружение), что и при запуске от вебсервера или в иных?

Права и окружение тоже самое: на том же диске и на той же машине.
От Tiny запуск прошёл корректно, и с локального браузера и с удалённого.
...
Рейтинг: 0 / 0
18.12.2018, 12:04
    #39749346
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Может быть есть какой-то дебагер, который покажет, как происходило обращение к mySQL драйверу и на чём он отказался работать. Это же стандартная api-функция windows: "ADOConnection.Open".
Т.е. почему именно на Apache отключается - загадки, возможно идёт какой-то конфликт.
Сниферы портов все уже перепробовал: стандартные обращения по http... но доп. информации никакой не получил.
...
Рейтинг: 0 / 0
18.12.2018, 12:13
    #39749357
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserITПрава и окружение тоже самое: на том же диске и на той же машине.
От Tiny запуск прошёл корректноОкружение посмотрите внимательно, сравните все переменные. Вебсерверы таки разные.

UserITНа строке ADOConnection.Open.UserITТ.е. доходит до обращение к драйверу и тут отваливается, как будто его просто нет в системе...Не в разрядности ли проблема? На винде для 32 и для 64 разные драйверы.
...
Рейтинг: 0 / 0
18.12.2018, 13:36
    #39749431
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
vkle,
Я пробовал разные драйвера 32- и 64бит, могу ещё раз для чистоты эксперимента настроить разные драйвера...
...
Рейтинг: 0 / 0
18.12.2018, 13:49
    #39749452
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
vkle,
Сейчас ещё раз попробовал разные драйверы.
По идее мой скрипт должен работать с 32бит, но корректно отрабатывает, как с 32- так и с 64-бит, если запустить вне браузера.
Через браузер ни так и ни сяк.
...
Рейтинг: 0 / 0
18.12.2018, 14:56
    #39749545
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserITСкрипт отрабатывает локально (при запуске через командный файл) и на других web-серверах, но вот Apache не даёт подключиться к БД при запуске скрипта CGI (index.cgi).
Я бы для начала в качестве CGI скрипта попробовал использовать shell скрипт. Потому что кто ж знает, что там за интерпретатор у твоего index.cgi...
...
Рейтинг: 0 / 0
18.12.2018, 16:44
    #39749655
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Dimitry Sibiryakov,
CGI на Delphi - консольное приложение.
у меня Windows... Если мне делать какой-то скрипт, тогда надо чтобы не требовало доп.установок... для эксперимента устанавливать на сервер доп.ПО не очень хочется.
...
Рейтинг: 0 / 0
18.12.2018, 19:35
    #39749809
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserITCGI на Delphi - консольное приложение.Эх... Исходники то есть, хоть какая-то отладка возможна?

UserITу меня Windows...Это ещё ничего, это ещё жить можно. Вот на работе коллега говорит "у меня лапки" - вот тут уже всё.

UserITЕсли мне делать какой-то скрипт, тогда надо чтобы не требовало доп.установок... для эксперимента устанавливать на сервер доп.ПО не очень хочется.Ну дык худо-бедно в винде есть свой командный интерпретатор cmd.exe. Есть ещё вполне себе ничего VSH. О, для особых ценителей - почти штатный PowerShell.
...
Рейтинг: 0 / 0
18.12.2018, 19:37
    #39749810
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Вот, вроде и не спросонок, а ляпнул не ту букву. Конечно, про WSH думал
...
Рейтинг: 0 / 0
19.12.2018, 00:13
    #39749909
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
vkleЭх... Исходники то есть, хоть какая-то отладка возможна?
Конечно есть! )
я же говорю, что именно при открытии соединения к БД и появляется ошибка :)
...
Рейтинг: 0 / 0
19.12.2018, 11:50
    #39750061
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Господа!
Написал 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: Не удается найти указанный поставщик. Вероятно, он установлен неправильно.

(!)
Вот... т.е. изначально эта ошибка и выдавалась в моём оригинале, видимо. Но локально (запуская скрипт руками из этой же папки) скрипт отрабатывает верно...
...
Рейтинг: 0 / 0
19.12.2018, 12:19
    #39750095
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserIT,

Ожидаемо. Вот и смотрите внимательно окружение и права. При запуске ручками от имени рядового пользователя (включая администратора) оно одно получаются, при запуске из-под вебсервера (служба, да?) - другое.
...
Рейтинг: 0 / 0
19.12.2018, 14:20
    #39750197
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
vkle,
Все эти факторы максимально проверил:
1. Запускал Apache как службу,
2. Запускал Apache от вошедшего пользователя,
3. Запускал Apache от имени администратора,
4. Запускал Apache как службу от имени пользователя,
5. Настраивал ODBC для 32- и 64-разрядных систем...
Результата нет...
Где ещё копать даже не представляю :)
Какие ещё варианты посмотреть можно, есть идеи? :)
...
Рейтинг: 0 / 0
19.12.2018, 14:58
    #39750226
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserITКакие ещё варианты посмотреть можно, есть идеи? :)
Прекратить пляски с бубном и прочитать документацию Апача. Учётка и права с которыми он запускается, не имеет ничего общего с окружением и правами с которыми он запускает CGI.

А из-за последнего пункта - ещё и букварь по функционированию компьютеров. Разрядность бибилиотек жёстко определяется разрядностью приложения. Ну, заодно можно просветиться на предмет различий между User DSN и System DSN.
...
Рейтинг: 0 / 0
19.12.2018, 15:13
    #39750235
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
Dimitry SibiryakovНу, заодно можно просветиться на предмет различий между User DSN и System DSN.
Настройки User DSN и System DSN проверил в самом начале возникновения проблемы.
...
Рейтинг: 0 / 0
19.12.2018, 15:26
    #39750243
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserITКакие ещё варианты посмотреть можно, есть идеи? :)Посмотрите http://httpd.apache.org/docs/2.4/mod/mod_suexec.html По крайней мере, если требуется лишь сменить пользователя.
Ну и то, от чего Вы всё время увильнуть пытаетесь, тоже можно настроить: http://httpd.apache.org/docs/2.4/mod/mod_env.html
...
Рейтинг: 0 / 0
19.12.2018, 22:39
    #39750520
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
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
...
Рейтинг: 0 / 0
19.12.2018, 22:56
    #39750523
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
UserIT,

Я дико извиняюсь за проблемы с моим зрением, но в этом списке никак не могу разглядеть виндовые переменные окружения, такие как %TMP%, %PATH%, ну и и ещё с десяток примерно стандартных, которые могут понадобятся консольному приложению для работы.
Или они гарантировано не понадобятся приложению и поэтому Вы их не приводите?
Или их просто нет?
...
Рейтинг: 0 / 0
20.12.2018, 00:48
    #39750536
UserIT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI
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
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Настройка Apache для выполнения запроса к БД MySQL через скрипт CGI / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]