2017-10-18 13 views
2

처음으로 nginx을 입력하십시오.
에서 수신하는 nodejs WebSocket 서버가 있습니다. 내가 docker-compose을 사용하고
:nginx에 잘못된 URL 접두어가 사용되었습니다.

version: "2" 
services: 
    # stuff 

    service_name: 
     image: imagename 
     ports: 
     - 3600:3600 
     links: 
     # stuff 
     - proxy 

    proxy: 
    image: image-from-nginx-with-custom-config 
    ports: 
     - 80:80 
     - 443:443 
     - 8443:8443 

내 설정 :

// stuff 

server { 
    listen   8443; 
    server_name  localhost; 
    ssl on; 

    ssl_certificate  /etc/nginx/certs/crt.pem; 
    ssl_certificate_key /etc/nginx/certs/key.pem; 

    keepalive_timeout 60; 

    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto https; 

    location/{ 
     proxy_pass ws://service_name:3600; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 
} 

나는 시작시 nginx: [emerg] invalid URL prefix in /etc/nginx/conf.d/default.conf를 얻을.
그래서 nginx는 ws을 인식하지 못합니다. 어떻게해야합니까?

+0

가능한 복제 [Nginx에 유효하지 않은 URL 접두사 (https를 HTTP를 통해 WebSocket을 처리하기 위해 아래에 추가 .com/questions/32992908/nginx-invalid-url-prefix) –

+0

nginx에서 귀하의 URL에 http를 사용해야합니다. 'proxy_pass http : // service_name : 3600;' –

+0

@ TarunLalwani 나는 그 일을 시도했지만 제대로 작동하지 않는 것 같습니다. 나는 그때 내 구성에 뭔가 잘못되었을 수 있습니다 ... – andr

답변

1

nginx에서 아직 ws이 아닌 URL에 프로토콜로 http을 사용해야합니다. // 유래 :

proxy_pass http://service_name:3600; 

wswss 프로토콜은 서버 측에 브라우저가 필요합니다 당신은

proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade";