2017-10-18 5 views
2

Première fois avec nginx. J'ai un serveur WebSocket nodejs écoutant ws://service_name:3600.
J'utilise docker-compose:nginx ws préfixe d'URL invalide

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 

Ma config:

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

Je me nginx: [emerg] invalid URL prefix in /etc/nginx/conf.d/default.conf au démarrage.
Donc nginx ne reconnaît pas ws, que dois-je faire?

+0

double possible de [Nginx préfixe URL non valide] (https: // stackoverflow .com/questions/32992908/nginx-invalid-url-prefix) –

+0

En nginx, vous devez toujours utiliser http pour votre URL. 'proxy_pass http: // nom_service: 3600;' –

+0

@TarunLalwani J'ai essayé de le faire mais cela ne semble pas fonctionner. J'ai peut-être quelque chose de mal dans ma configuration alors ... – andr

Répondre

1

Dans nginx vous devez toujours utiliser http pour le protocole dans votre URL et non ws.

proxy_pass http://service_name:3600; 

Le protocole ws et wss est nécessaire pour le navigateur, sur le côté serveur que vous ajoutez ci-dessous pour gérer les websockets sur http

proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade";