Websocket compression, introduced in meteor 1.2, doesn't work with passenger docker / nginx


#1

Hey,

Just wanted to let the community know that websocket compression, introduced in meteor 1.2 doesn’t work with passenger docker and / or nginx (I’m using passenger docker with nginx, so I don’t know if it’s a passenger problem or an nginx problem).

A workaround would be to disable web socket compression by settings the SERVER_WEBSOCKET_COMPRESSION environment variable to 0.

For more info regarding web socket compression introduced in meteor 1.2, refer to the meteor release notes.

Another workaround would be to figure out how to configure passenger / nginx to support websocket compression, I’m going to open an issue in the passenger docker repo and see what they say.

Ronen


#2

Clarification - it works locally, but when I deploy my app to digital ocean, it doesn’t work and disabling it fixes it.


#3

It’s probably an issue with passgenger docker. My application uses a simple docker container with Nginx providing SSL termination internally to my nodeJS/meteor service, and permessage deflation /Websockets are working.

What does your nginx.conf look like?


#4

My nginx.conf is the following:

user www-data;
worker_processes 1;
pid /run/nginx.pid;
daemon off;

include /etc/nginx/main.d/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # nginx-naxsi config
        ##
        # Uncomment it if you installed nginx-naxsi
        ##

        # include /etc/nginx/naxsi_core.rules;

        ##
        # Phusion Passenger config
        ##
        # Uncomment it if you installed passenger or passenger-enterprise
        ##

        passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
        passenger_ruby /usr/bin/ruby;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


# mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
# }

And my webapp.conf is the standard one recommended by passenger.