2016-12-24 4 views
1

표준 PHP/Apache 플랫폼에 기존 웹 응용 프로그램이 있습니다. 자, 내가 원하는 것은 채팅 기능을 추가하는 것입니다. 그리고 websocket을 통해 실시간으로하고 싶습니다. 그리고 nodej에서 socket.io를 조금 공부했습니다. 따라서 Apache가 큰 PHP 앱을 실행하는 것 외에도 socket.io와 nodejs 채팅을 실행하게됩니다.websocket을 통해 기존 PHP 웹 응용 프로그램에 채팅 추가

하지만 실제로 이해할 수없는 것은 nodejs 채팅 코드에서 내 사용자를 어떻게 인식 할 수 있습니까? 하나의 경우 Apache와 nodejs는 같은 포트에서 실행할 수 없으므로 예를 들어 8080 포트에서 채팅을 실행하면 사용자의 쿠키가 손실되어 로그에 기록하도록 요청해야합니다. 채팅을 사용하려면이 nodejs 기반 포트에서 다시 한번? 말도 안되는 것 같지만, 어떤 방향으로 나아갈 지 모르겠습니다.

노드 전체에 코드 전체를 포팅 할 수 없습니다. 그래서 이상적으로 나는 아파치와 nodejs가 공존하는 것을 원할 것이다. 아니면 채팅이 웹 앱에서 어떻게 작동해야하는지 완전히 오해하고 있습니다.

감사의 말씀.

+0

당신은 PHP에서 웹 소켓 서버를 실행할 수 있습니다

은 자세한 내용은이 대답하고 주석을 참조하십시오. – Dai

+0

Nginx로 전환하면 같은 URL로 동일한 포트에서 처리 할 수 ​​있습니다. 예를 들어 'exampe.com/chat'은 nodejs 시스템을 가리키고 다른 모든 것은 PHP 시스템을 가리 킵니다. –

+0

아래 [내 답변] (https://stackoverflow.com/questions/41316681/adding-chat-through-websocket-to-an-existing-php-web-app/41317209#41317209)이 도움이 되었습니까? 다른하실 말씀 있나요? – rsp

답변

1

예를 들어 PHP로 Apache를 실행할 수 있습니다. 포트 3001 및 노드 응용 프로그램을 포트 3002에 설치하고 nginx를 포트 80에서 사용할 수 있도록 역방향 프록시로 구성하십시오 (예 : 루트 / 디렉토리의 PHP 응용 프로그램과 /chat 디렉토리의 노드 응용 프로그램). 이 : SSL을

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; 
    } 
} 

이 훨씬 약간 더 복잡하지만 다음과 같습니다

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와 노드 애플리케이션은 심지어 다른 서버에서 실행할 수 있습니다 - 단지의 nginx의 설정에 자신의 주소를 사용합니다. 당신이 적절하게 서버를 구성 할 수 있습니다 가정,

+0

어떻게 gunicorn으로 두 대의 기계에서 실행되는 두 개의 프로세스를 구성 할 수 있습니까? 우리는 주요 nginx 내부의 개인 IP 및 호출과 함께 그 서비스에 대한 nginx를 활성화해야합니까? –