2013-04-23 2 views
2

Мой сервер предоставляет на корневой URL, в https:Nginx с WebSocket и HTTPS контент на одном URL

  • файлы, остальные ресурсы
  • 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/chat.

Любая помощь была бы принята с благодарностью.


обновление: я имел остатки предыдущей версии Nginx. После очистки все работает нормально. Поэтому я сохраню эту конфигурацию, пока не найду проблему или что-то еще лучше. Я дам вам знать.

ответ

0

Как указано выше, моя проблема заключалась в неправильной установке nginx.

Удалите любую версию < 1.3.13- (сделайте sudo updateb, найдите 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) 

source

Смежные вопросы