2017-10-18 221 views
2

第一次与nginx
我有一个的WebSocket的NodeJS服务器侦听的ws://service_name:3600
我使用docker-composenginx的WS无效的网址前缀

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的无效地址前缀(HTTPS的网页套接字://计算器.com/questions/32992908/nginx-invalid-url-prefix) –

+0

在nginx中,你仍然需要为你的url使用http。 'proxy_pass http:// service_name:3600;' –

+0

@TarunLalwani我试过这样做,但它似乎并没有工作。我可能在我的配置有错误... – andr

回答

1

在nginx的你仍然需要在URL中使用http的协议,而不是ws

proxy_pass http://service_name:3600; 

wswss协议所需的浏览器,在服务器端,你在下面添加处理通过http

proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade";