174 votes

NGINX pour inverser les serveurs Web proxy et activer SSL (wss: //)?

Je suis tellement perdu et nouveau d’avoir construit NGINX tout seul, mais je veux pouvoir activer des websockets sécurisés sans avoir de couche supplémentaire.

Je ne veux pas activer SSL sur le serveur Websocket lui-même, mais plutôt utiliser NGINX pour ajouter une couche SSL à l'ensemble.

Chaque page Web dit que je ne peux pas le faire, mais je sais que je peux le faire! Merci à quiconque (moi-même) peut me montrer comment!

248voto

Tarantula Points 4231

Il suffit de noter que nginx prend désormais en charge Websockets dans la version 1.3.13. Exemple d'utilisation:

 location /websocket/ {

    proxy_pass ​http://backend_host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;

}
 

Vous pouvez également consulter le journal des modifications nginx et la documentation du proxy WebSocket .

59voto

crockpotveggies Points 3797

N'ayez pas peur, parce qu'un courageux groupe de Ops les Programmeurs ont résolu la situation avec un flambant neuf nginx_tcp_proxy_module

Écrit en août 2012, donc si vous êtes de l'avenir, vous devriez faire vos devoirs.

Conditions préalables

Suppose que vous utilisez CentOS:

  • Supprimer l'instance courante de NGINX (vous suggérons d'utiliser serveur de dev)
  • Si possible, enregistrez votre ancien NGINX fichiers de configuration de sorte que vous pouvez les utiliser de nouveau (qui comprend votre init.d/nginx script)
  • yum install pcre pcre-devel openssl openssl-devel et toutes les autres libs pour la construction de NGINX
  • Obtenir le nginx_tcp_proxy_module à partir de GitHub ici https://github.com/yaoweibin/nginx_tcp_proxy_module et n'oubliez pas le dossier où vous l'avez mis (assurez-vous qu'il n'est pas zippé)

La construction de Votre NGINX

Encore une fois, suppose CentOS:

  • cd /usr/local/
  • wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'
  • tar -xzvf nginx-1.2.1.tar.gz
  • cd nginx-1.2.1/
  • patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
  • ./configure --add-module=/path/to/nginx_tcp_proxy_module --with-http_ssl_module (vous pouvez ajouter d'autres modules si vous en avez besoin)
  • make
  • make install

En option:

  • sudo /sbin/chkconfig nginx on

Configurer Nginx

N'oubliez pas de copier les anciens fichiers de configuration d'abord si vous voulez les utiliser de nouveau.

Important: vous aurez besoin de créer un tcp {} directive au plus haut niveau dans votre conf. Assurez-vous qu'il n'est pas à l'intérieur de votre http {} directive.

L'exemple de config ci-dessous montre un en amont serveur websocket, et de deux procurations pour SSL et Non-SSL.

tcp {
    upstream websockets {
        ## webbit websocket server in background
        server 127.0.0.1:5501;

        ## server 127.0.0.1:5502; ## add another server if you like!

        check interval=3000 rise=2 fall=5 timeout=1000;
    }   

    server {
        server_name _;
        listen 7070;

        timeout 43200000;
        websocket_connect_timeout 43200000;
        proxy_connect_timeout 43200000;

        so_keepalive on;
        tcp_nodelay on;

        websocket_pass websockets;
        websocket_buffer 1k;
    }

    server {
        server_name _;
        listen 7080;

        ssl on;
        ssl_certificate      /path/to/cert.pem;
        ssl_certificate_key  /path/to/key.key;

        timeout 43200000;
        websocket_connect_timeout 43200000;
        proxy_connect_timeout 43200000;

        so_keepalive on;
        tcp_nodelay on;

        websocket_pass websockets;
        websocket_buffer 1k;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X