У меня есть существующее веб-приложение на стандартной платформе PHP / Apache. Теперь я хочу добавить функциональность чата, и я хочу, чтобы он работал в режиме реального времени через веб-сокет, и для этого я немного изучил socket.io на nodejs. Таким образом, в дополнение к Apache, работающему с большим PHP-приложением, у меня был бы nodejs с socket.io, запускающим чат.
Но что я на самом деле не понимаю, как бы я узнал своих пользователей в коде чата для nodejs? Во-первых, Apache и nodejs не смогут работать на одном и том же порту, то есть я буду запускать чат на порту 8080
например, в этом случае я теряю куки пользователя, что означает, что теперь я должен попросить их еще раз войти в систему на этом порту nodejs, если они хотят использовать чат? Кажется смешным, но я не знаю, как это сделать.
Конечно, я не могу портировать весь свой код на nodejs. Поэтому в идеале я бы хотел, чтобы Apache и nodejs сосуществовали. Или я просто совершенно не понимаю, как чат должен работать в веб-приложениях.
Любые советы приветствуются.
Вы можете запустить свой Apache с PHP, например, на порт 3001 и приложение Node на порту 3002, а nginx настроен в качестве обратного прокси-сервера, чтобы они оба были доступны на порту 80, например приложение PHP в корневом каталоге. /
каталог и ваше приложение Node в /chat
каталог с конфигурацией nginx, например:
server {
listen 80;
server_name example.com;
location /chat {
proxy_pass http://localhost:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
С SSL это было бы немного сложнее, но не намного:
server {
listen 443;
server_name example.com;
add_header Strict-Transport-Security "max-age=3600";
ssl on;
ssl_certificate /.../chained2.pem;
ssl_certificate_key /.../domain.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
location /chat {
proxy_pass http://localhost:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
Ваши приложения PHP и Node могут даже работать на разных серверах — просто используйте их адреса в конфигурации nginx.
Смотрите этот ответ и его комментарии для более подробной информации:
Других решений пока нет …