Node.js로 작성된 websocket 서버가 있습니다. 명령줄에서 다음 지침을 실행하면 websocket 서버가 성공적으로 시작됩니다.
nohup "/root/.nvm/versions/node/v8.11.1/bin/node" "/var/www/bm-server/bm-server" 1337 > "/var/www/bm-server/logs.txt" 2>&1 &
pgrep -x "bm-server"
PID가 표시되기 때문에 서버가 실행되고 있는 것을 알 수 있습니다 .
포트가 열려 있고 수신 중이라는 것을 알고 있습니다 # netstat -an | grep ":1337"
. 이는 다음을 생성하기 때문입니다.
tcp6 0 0 :::1337 :::* LISTEN
telnet myhost 1337
다른 컴퓨터에서 성공적으로 연결되었기 때문에 해당 포트에 액세스할 수 있다는 것을 알고 있습니다 .
내 웹 응용 프로그램은 예상대로 서버에 연결하고 사용할 수 있습니다.
문제는PHP를 통해 이 프로그램을 시작하고 싶습니다.
exec('nohup "/root/.nvm/versions/node/v8.11.1/bin/node" "/var/www/bm-server/bm-server" 1337 > "/var/www/bm-server/logs.txt" 2>&1 &', $stdout, $exitcode);
PHP에서 명령을 실행하면 브라우저에서 연결할 때를 제외하고 위와 동일한 테스트를 모두 통과합니다. 텔넷을 사용하면 잘 연결할 수 있지만 브라우저에서 연결을 시도하면 다음과 같은 메시지가 나타납니다.
failed: Error in connection establishment: net::ERR_CONNECTION_CLOSED
이는 PHP가 코드를 실행하는 환경과 관련이 있습니다. 하지만 스크립트의 내용이 어떻게 영향을 받을 수 있는지 알 수 없습니다.
이것은서버 소스, 그게 중요하다면.
PHP 사용자(www-data)가 서버를 시작하는 데 어떤 문제가 있나요? 그런데, 비밀번호 없이 sudo를 실행할 수 있도록 www-data 권한도 부여하고 sudo를 사용해 보았지만 별 차이가 없었습니다.