nginx的与同一URL的WebSocket和HTTPS内容(nginx with websocke

2019-08-31 23:27发布

我的服务器提供了一个根URL,在HTTPS:

  • 文件,其余的资源
  • 的WebSocket

我想我的配置,以支持WebSocket的,但它不工作。

我使用nginx的1.3.16支持WebSocket的代理。

这里是我的nginx的配置的一部分:

    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

server {
    listen 443 default ssl;
    server_name localhost;

    ssl                        on;
    ssl_certificate        ssl/server.crt;
    ssl_certificate_key  ssl/server.key;

    ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers RC4:HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        keepalive_timeout    60;
    ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  10m;

    ### We want full access to SSL via backend ###
        location / {
        proxy_pass http://localhost:8080;       

            ### force timeouts if one of backend is died ##
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

            ### Set headers ####
                    proxy_set_header        Accept-Encoding   "";
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

            ### Most PHP, Python, Rails, Java App can use this header ###
            #proxy_set_header X-Forwarded-Proto https;##
            #This is better##
                proxy_set_header        X-Forwarded-Proto $scheme;
            add_header              Front-End-Https   on;

        ### By default we don't want to redirect it ####
            proxy_redirect     off;
      }
    location /writever/chat {
        proxy_pass http://localhost:8080/writever/chat;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

下面是我在看到nginx的错误:

2013/04/23 22:41:52 [error] 17011#0: *2093 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /writever/chat?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.0.12&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json&X-atmo-protocol=true HTTP/1.1", upstream: "http://127.0.0.1:8080/writever/chat?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.0.12&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json&X-atmo-protocol=true", host: "localhost"

我不知道,如果这两个位置可以一起工作,如果顺序很重要,因为“/”包含/ writever /聊天。

任何帮助将不胜感激。


更新:我有以前版本nginx的遗体。 经过清洁制,一切似乎都正常工作。 所以,直到我发现一个问题,或更好的东西,我会保持这种配置。 我会让你知道。

Answer 1:

如上所示,我的问题是用不正确的安装Nginx的。

卸载toroughly任何版本<1.3.13-(做须藤updatedb的; nginx的定位,以确保),然后安装新版本。

就目前而言,你必须做手工(无易于得到尚未):

sudo apt-get install build-essential libssl-dev zlib1g-dev

PCRE

cd ~/src #make this if it doesn't exist
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
tar -xzvf pcre-8.30.tar.gz
cd pcre-8.3X/
./configure # /usr/local is the default so no need to prefix
make
sudo make install
sudo ldconfig # this is important otherwise nginx will compile but fail to load

nginx的

wget http://nginx.org/download/nginx-1.4.0.tar.gz   -> check for latest version on nginx website
tar -xvzf nginx-1.4.0.tar.gz
cd nginx-1.4.0

./configure --with-http_flv_module \
--with-http_ssl_module \
--with-http_gzip_static_module

make
sudo make install (uninstall previous version if nginx before)

资源



文章来源: nginx with websocket and https content on same url