我得到这个错误很多:
2014/11/26 21:01:30 [error] 3475#0:* 4028上游超时(110:连接超时),从上游读取响应头
这是我的configuration:
user www-data; pid /run/nginx.pid; worker_processes 2; worker_rlimit_nofile 16384; events { worker_connections 4096; use epoll; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; # free up connection after client stops responding... reset_timedout_connection on; # If the client stops reading data, free up the stale client connection after this much time. Default 60. # send_timeout 2; types_hash_max_size 2048; server_names_hash_bucket_size 256; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don't use SSLv3 ref: POODLE ssl_ciphers "AES256+EECDH:AES256+EDH"; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_vary on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "MSIE [1-6]\."; ## # general proxy settings ## proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m; proxy_temp_path /var/tmp; proxy_intercept_errors on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
前一个问题的解决scheme :增加proxy_read_timeout或检查后端为什么不及时回答。
你的第二个问题 :有两件事, Upgrade头和Connection头。
当使用websocket时,这两个都需要传递给后端,而且你可以使用map来根据原始的请求头(即,如果是websocket连接handhaske或标准的HTTPstream量)更改值。 后端必须使用HTTP 101回复Upgrade头。 然后nginx会进入一个特定的情况,在请求的起源和后端之间build立一个隧道。
官方文件解释了这种情况:
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } } server { ... location /foo/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } }