modx socket.io?
Всем привет. Есть такая интересная штучка, socket.io, для создание очень интересных проектов. Кто-то тут смог ее подружить с modx? Подключить внутри нее апи модх и работать с ним это не проблема. Сложности начинаются когда дело доходит до авторизаций. Сокет сервер не понимает кто перед ним. И если в вебе я авторизовался как admin, то внутри сокета echo $modx->user->get('id'); дает 0. Кто-то сталкивался с подобным? Боролся? Может быть я что-то не так делаю…
Комментарии: 32
Николай, я не знаю как именно у вас реализована работа MODX-API внутри сокет-сервера, то надо учитывать несколько моментов:
1. По умолчанию может не быть включена передача кукисов в заголовках, или могут быть проблемы кросс-доменных запросов (CORS). Убедитесь, что в сокет-запросах заголовки передаются, а главное, передается кука сессии.
2. На стороне сокет-сервера, где вы подключаете MODX-API, вам надо поймать куку PHPSESSID и скормить в инициализацию $modx. Так же убедитесь, что у вас эта кука там в наличии, а главное, инициализация $modx идет с контекстом, в котором пользователь авторизован.
3. У вас сокет-соединение не понимает авторизацию вообще всегда, или после авторизации если перезагрузить страницу, то все ОК, а просто проблема именно после авторизации без перезагрузки страницы? Просто это важный момент, так как сокет-соединение не отсылает кукисы в каждом запросе. Кукисы отправляются только при установке сокет-соединяния. То есть после авторизации и на логаут надо сокет-соединение реконнектить. Надо смотреть в сторону socketio.close(false, false);
В общем, подробней распишите что и как получилось сделать, а на какой стадии какие затыки. Наверняка разобраться можно будет, но здесь не все так просто и парой строчек кода не отделаться.
1. По умолчанию может не быть включена передача кукисов в заголовках, или могут быть проблемы кросс-доменных запросов (CORS). Убедитесь, что в сокет-запросах заголовки передаются, а главное, передается кука сессии.
2. На стороне сокет-сервера, где вы подключаете MODX-API, вам надо поймать куку PHPSESSID и скормить в инициализацию $modx. Так же убедитесь, что у вас эта кука там в наличии, а главное, инициализация $modx идет с контекстом, в котором пользователь авторизован.
3. У вас сокет-соединение не понимает авторизацию вообще всегда, или после авторизации если перезагрузить страницу, то все ОК, а просто проблема именно после авторизации без перезагрузки страницы? Просто это важный момент, так как сокет-соединение не отсылает кукисы в каждом запросе. Кукисы отправляются только при установке сокет-соединяния. То есть после авторизации и на логаут надо сокет-соединение реконнектить. Надо смотреть в сторону socketio.close(false, false);
В общем, подробней распишите что и как получилось сделать, а на какой стадии какие затыки. Наверняка разобраться можно будет, но здесь не все так просто и парой строчек кода не отделаться.
Кажется я промахнулся, и вместо ответить вам, просто отписал в комментарий
Велика вероятность в том, что у вас разные хосты. Домен один, а порты разные. Сам сайт на 80-ом порту, а запросы идут на порт 2025. Скорее всего это проблема именно в этом. Я делаю так: создаю на уровне nginx подмену для адреса /api/ и все запросы сокета летят туда, а там уже проксируется на сокет-порт. Пример конфига:
location /api/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 36000;
rewrite ^/api/(.*) /$1 break;
proxy_pass http://localhost:4000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Попробуйте для начала без конфига настроить сокет-запросы на тот же домен, просто посмотрите будут ли передаваться кукисы в запросах или нет. Ответа корретного не будет, но хотя бы в запросах кукисы должны появиться. Если появятся, то уже проксирование настраивать. А пока куки не будут передаваться, то и ловить на стороне сервера нечего. то получаю бесконечные аякс запросы:Зато в них видно, что кукисы летят. Осталось только сервер нормально настроить.
P.S. я ушел к Морфею, так что отвечу только через несколько часов, если еще будут комменты.
Вы в личку пришлите доступ к вашей странице, а то там по логину-паролю судя по всему доступ, я не вижу самих запросов. Вообще у вас JS должен идти на порт 2025 (и там нормально доступен), а на /api/ должны только ws-запросы идти. Но даже если он и скрипты пытается получить по адресу /api/, вам просто надо запустить в обычном режиме и посмотреть по какому адресу эти скрипты получаются, а потом настроить и для них проксирование. Правила проксирования можно настроить отдельно для разных адресов, типов запросов/файлов и т.п.
В моем конфиге полезного больше особо ничего нет, но вот еще кусок, где остальные запросы уходят на основную часть сайта:
В моем конфиге полезного больше особо ничего нет, но вот еще кусок, где остальные запросы уходят на основную часть сайта:
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 36000;
proxy_set_header Host $server_name ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP 127.0.0.1 ;
location ~ ^/.+ {
if (!-e $request_filename) {
proxy_pass http://localhost:3000;
}
}
proxy_pass http://localhost:3000;
}
Добрый день. В прошлый раз я забросил эту идею, не получилось. Сейчас для себя я решил все же добиться нормальной работы.
К чему я смог прийти:
Если я делаю соединение напрямую, var socket = io(«site.ru:2027»); — соединение устанавливается, без кукисов.
Если я пробую var socket = io("/api"'); — соединение не устанавливается, но кукисы отправляются.
Само проксирование вроде настроено нормально. Если перейти в браузере по site.ru/api/ — Мне сокет сервер говорит {«code»:0,«message»:«Transport unknown»}.
Но из JS он никак не хочет устанавливать соединение… Подозреваю из JS нужно не просто var socket = io('/api/'), а как то по другому. У меня происходит бесконечный коннект на Request URL: site.ru/socket.io/?EIO=3&transport=polling&t=MkEWHBy
К чему я смог прийти:
Если я делаю соединение напрямую, var socket = io(«site.ru:2027»); — соединение устанавливается, без кукисов.
Если я пробую var socket = io("/api"'); — соединение не устанавливается, но кукисы отправляются.
Само проксирование вроде настроено нормально. Если перейти в браузере по site.ru/api/ — Мне сокет сервер говорит {«code»:0,«message»:«Transport unknown»}.
Но из JS он никак не хочет устанавливать соединение… Подозреваю из JS нужно не просто var socket = io('/api/'), а как то по другому. У меня происходит бесконечный коннект на Request URL: site.ru/socket.io/?EIO=3&transport=polling&t=MkEWHBy
Пока печатал сообщение, смог наконец подружить JS и сокет сервер:
const socket = io('http://site.ru/ws/', {
path: '/api'
});
Прошу помочь с пунктом 2:2. На стороне сокет-сервера, где вы подключаете MODX-API, вам надо поймать куку PHPSESSID и скормить в инициализацию $modx. Так же убедитесь, что у вас эта кука там в наличии, а главное, инициализация $modx идет с контекстом, в котором пользователь авторизован.Как это скормить MODX? Апи я подключил
$io->on('connection', function($socket)use($io){
require_once '../../config.core.php';
define('MODX_API_MODE', true);
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
echo $modx->user->get('id');
unset($modx);
В консоле 0, хотя на сайте я авторизован…
Может я куда-то не туда смотрю… На первый запрос куки уходят точно:
А вот на сокет сервере $_SESSION $_COOKIE пустые…
А вот на сокет сервере $_SESSION $_COOKIE пустые…
Вы ws-запросы от браузера до MODX проксируете на уровне nginx? Может вы в прокси не передаете реальный хост сайта? В своем файле допишите $modx->log(1, print_r($_SERVER, 1), «FILE»); и потом после запроса в логах MODX в админке посмотрите что у вас там прилетает. Правильные ли SERVER_NAME, HTTP_HOST, HTTP_ORIGIN и т.п. прилетают? А то велика вероятность что в запросе-то у вас кукисы передаются нормально, но до MODX прилетает другой хост и он не принимает куки.
Да, nginx:
location /api/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 36000;
rewrite ^/api/(.*) /$1 break;
proxy_pass http://site.com:4000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Ваш пример взял.
ОК. Но все же, дописываем в файл $modx->log(1, print_r($_SERVER, 1), «FILE»); и смотрим логи, какие заголовки прилетают.
Полезно еще дописать $modx->log(1, print_r($_COOKIE, 1), «FILE»); чтобы и куки посмотреть сразу.
Полезно еще дописать $modx->log(1, print_r($_COOKIE, 1), «FILE»); чтобы и куки посмотреть сразу.
«FILE» — это путь до файла? Если флаг, то вот что в логах для:
$modx->log(1, print_r($_SERVER, 1), «FILE»);
$modx->log(1, print_r($_COOKIE, 1), «FILE»);
$modx->log(1, print_r($_SERVER, 1), «FILE»);
$modx->log(1, print_r($_COOKIE, 1), «FILE»);
[2019-06-25 13:07:54] (ERROR @ /var/www/site.com/core/socket/server.php: 27) Array
(
[TERM] => xterm
[LS_COLORS] => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
[LANG] => en_US.UTF-8
[HOME] => /root
[LANGUAGE] => en_US:en
[SHELL] => /bin/bash
[MAIL] => /var/mail/www-data
[LOGNAME] => www-data
[USER] => www-data
[USERNAME] => www-data
[SUDO_COMMAND] => /usr/bin/php server.php start
[SUDO_USER] => root
[SUDO_UID] => 0
[SUDO_GID] => 0
[PHP_SELF] => server.php
[SCRIPT_NAME] => server.php
[SCRIPT_FILENAME] => server.php
[PATH_TRANSLATED] => server.php
[DOCUMENT_ROOT] =>
[REQUEST_TIME_FLOAT] => 1561468072.7351
[REQUEST_TIME] => 1561468072
[argv] => Array
(
[0] => server.php
[1] => start
)
[argc] => 2
[HTTP_USER_AGENT] =>
[HTTP_REFERER] =>
[QUERY_STRING] =>
)
[2019-06-25 13:07:54] (ERROR @ /var/www/site.com/core/socket/server.php: 28) Array
(
)
Да, «FILE» — это флаг. А логи у вас странные. Такое ощущение, что у вас php выполняется консольно, а не как веб-служба. И соответственно никакие заголовки вам туда нужные не передаются. Поэтому у вас и массив кукисов пустой.
И еще момент: Если указываете proxy_pass site.com:4000;, то в /etc/hosts пропишите 127.0.0.1 site.com, чтобы при проксировании точно сразу на локальный хост запрос летел, а не через внешний ip. Это тоже логику имеет. В моем-то примере не на site.com проксирование прописано, а на локалхост.
proxy_pass localhost:4000;
proxy_pass localhost:4000;
Я домен туда вписал от безысходности, т.к. не работало.Вернул proxy_pass localhost:4000, все то же самое
Так долго будем разбираться. Шлите в личку ssh и домен сайта, буду посмотреть. Иначе шаманство получается.
Все что в $_SERVER:
Array
(
[TERM] => xterm
[LS_COLORS] => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
[LANG] => en_US.UTF-8
[HOME] => /root
[LANGUAGE] => en_US:en
[SHELL] => /bin/bash
[MAIL] => /var/mail/www-data
[LOGNAME] => www-data
[USER] => www-data
[USERNAME] => www-data
[SUDO_COMMAND] => /usr/bin/php server.php start
[SUDO_USER] => root
[SUDO_UID] => 0
[SUDO_GID] => 0
[PHP_SELF] => server.php
[SCRIPT_NAME] => server.php
[SCRIPT_FILENAME] => server.php
[PATH_TRANSLATED] => server.php
[DOCUMENT_ROOT] =>
[REQUEST_TIME_FLOAT] => 1561467048.3697
[REQUEST_TIME] => 1561467048
[argv] => Array
(
[0] => server.php
[1] => start
)
[argc] => 2
[HTTP_USER_AGENT] =>
[HTTP_REFERER] =>
[QUERY_STRING] =>
)
А где хост? У меня вот так:
(
[USER] => www-data
[HOME] => /var/www
[FCGI_ROLE] => RESPONDER
[SCRIPT_FILENAME] => /var/www/vhosts/www.site.ru/manager/components/console/connectors/console.php
[QUERY_STRING] =>
[REQUEST_METHOD] => POST
[CONTENT_TYPE] => application/x-www-form-urlencoded; charset=UTF-8
[CONTENT_LENGTH] => 265
[SCRIPT_NAME] => /manager/components/console/connectors/console.php
[REQUEST_URI] => /manager/components/console/connectors/console.php
[DOCUMENT_URI] => /manager/components/console/connectors/console.php
[DOCUMENT_ROOT] => /var/www/vhosts/www.site.ru
[SERVER_PROTOCOL] => HTTP/1.1
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_SOFTWARE] => nginx/1.4.6
[REMOTE_ADDR] => xxx
[REMOTE_PORT] => 46986
[SERVER_ADDR] => xxx
[SERVER_PORT] => 443
[SERVER_NAME] => www.site.ru
[HTTPS] => on
[REDIRECT_STATUS] => 200
[HTTP_HOST] => www.site.ru
[HTTP_CONNECTION] => keep-alive
[HTTP_CONTENT_LENGTH] => 265
[HTTP_ORIGIN] => https://www.site.ru
[HTTP_X_REQUESTED_WITH] => XMLHttpRequest
[HTTP_MODAUTH] => xxx
[HTTP_USER_AGENT] => xxx
[HTTP_CONTENT_TYPE] => application/x-www-form-urlencoded; charset=UTF-8
[HTTP_ACCEPT] => */*
[HTTP_REFERER] => https://www.site.ru/manager/?a=index&namespace=console
[HTTP_ACCEPT_ENCODING] => gzip, deflate, br
[HTTP_ACCEPT_LANGUAGE] => ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6,it;q=0.5,cy;q=0.4,la;q=0.3,zh-CN;q=0.2,zh;q=0.1
[HTTP_COOKIE] => xxxxxxxxxxxxxxxxxx
[PHP_SELF] => /manager/components/console/connectors/console.php
[REQUEST_TIME_FLOAT] => 1561467977.3899
[REQUEST_TIME] => 1561467977
)
У вас там конкретно site.com прописано, или все-таки это замена и там реальный домен прописан?
Там реальный домен. Просто стараюсь не светить лишний раз домены.
И почему проксирование на proxy_pass site.com:4000; идет? Не думаю, что у вас на порту 4000 MODX крутится. Вероятней всего у вас там JS-сервис, а оттуда вы пытаетесь вызывать php средствами js (проксируя запрос). Так?
У меня сокет сервер крутится на 4000 порту:
pastebin.com/pJW87fkd
На JS части я подключаюсь к /api/
const socket = io('http://site.ru/ws/', {
path: '/api'
});
А конфиг nginx с проксей на этот сокет сервер: pastebin.com/rQi0drjw
Вроде бы все должно работать, но что-то не то…
pastebin.com/pJW87fkd
На JS части я подключаюсь к /api/
const socket = io('http://site.ru/ws/', {
path: '/api'
});
А конфиг nginx с проксей на этот сокет сервер: pastebin.com/rQi0drjw
Вроде бы все должно работать, но что-то не то…
Что-то очень сомневаюсь, что у вас это должно работать. На сколько я понимаю, последовательность соединений такая:
Браузер (JS) -> nginx -> js на порту 4000 -> MODX. И вы ожидаете, что js просто так возьмет и пробросит кукисы до MODX? Просто так он не будет ничего пробрасывать.
P.S. на каждом этапе проброса соединения дебажьте и смотрите, чтобы были кукисы и отправлялись дальше.
Браузер (JS) -> nginx -> js на порту 4000 -> MODX. И вы ожидаете, что js просто так возьмет и пробросит кукисы до MODX? Просто так он не будет ничего пробрасывать.
P.S. на каждом этапе проброса соединения дебажьте и смотрите, чтобы были кукисы и отправлялись дальше.
Теряется кукауже на сокет сервере.
Т.е, рендерится страница MODX, где я залогинен. С этой страницы я подключаюсь к /api/, При всех XHR запросах (всех четырех) Cookie: PHPSESSID=7iur19vftnprl05jt4m97kvs13 передается. А до сервера не доходит. Создается WS соединение, на сервере в консоле куки пустые…
Т.е, рендерится страница MODX, где я залогинен. С этой страницы я подключаюсь к /api/, При всех XHR запросах (всех четырех) Cookie: PHPSESSID=7iur19vftnprl05jt4m97kvs13 передается. А до сервера не доходит. Создается WS соединение, на сервере в консоле куки пустые…
Пошел дальше, пошел смотреть логи. Насмотрел что
print_r($socket->request->headers);
содержит куку.
Array
(
[connection] => upgrade
[host] => site.com
[x-real-ip] => 5.189.120.126
[x-forwarded-for] => 5.189.120.126
[accept] => */*
[user-agent] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
[referer] => site.com/page.html
[accept-encoding] => gzip, deflate
[accept-language] => ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
[cookie] => _ga=GA1.2.63840410.1551895697; _ym_uid=1551895697718358359; _ym_d=1551895697; PHPSESSID=h6k94gg7gbu1b7317maq4loon7
)
print_r($socket->request->headers);
содержит куку.
Array
(
[connection] => upgrade
[host] => site.com
[x-real-ip] => 5.189.120.126
[x-forwarded-for] => 5.189.120.126
[accept] => */*
[user-agent] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
[referer] => site.com/page.html
[accept-encoding] => gzip, deflate
[accept-language] => ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
[cookie] => _ga=GA1.2.63840410.1551895697; _ym_uid=1551895697718358359; _ym_d=1551895697; PHPSESSID=h6k94gg7gbu1b7317maq4loon7
)
Без ssh я больше ничем не помогу.
На том же 80 порту сокет сервер не поднимается (что логично, порт занят веб сервером)
Так не надо поднимать его на 80-ом. На 80-ом у вас сайт крутится, а сокет-сервер крутится на своем 2025-ом. Запросы у вас должны идти на /api/ вашего сайта, а не сокет-сервера. Просто на уровне сервера вы запросы на /api/ которые идут проксируете на 2025-ый порт. Для фронта это все неведомо, фронт ничего не знает про то, что и как там на сервере. Но отправляя на /api/ текущего домена, передаются и кукисы, потому что это тот же самый домен, а не другой. На уровне nginx вы /api/ запросы проксируете на 2025, вместе с кукисами они улетают, не доходя напрямую на сайт. А вот на уровне сокет-сервера, получив таким образом запрос с кукисами, вы уже должны получить $modx с инициализацей.
Поделитесь пожалуйста полным конфигом ngnix. У меня видимо там что-то не то совсем. Проксирование вроде бы работает, site.ru/api/ работает, но жс бесконечно подключается, подключается, подключается…
Вот я как раз в сторону кукисов смотрел, но нагуглить что-то не получилось. Да, кукисы не передаются:
Как их передать, и как скормить ее modx? В самом server.php я просто подключаю modx:
Как их передать, и как скормить ее modx? В самом server.php я просто подключаю modx:
require_once '../../config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('web');
$modx->getService('error','error.modError', '', '');
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.