Nginx HTTPS 负载平衡上游发送无效 HTTP/1.0 header

Nginx HTTPS Load Balancing upstream sent no valid HTTP/1.0 header

我正在通过我的 Nginx 服务器向 rails 发送一个 AJAX DELETE 请求,我能够看到数据库正在正确更新以及来自 rails 的响应服务器符合预期。但是响应状态不是 success 而是 error 状态。

当我提醒 xhr.status 时,它显示 0

我使用 Nginx 进行了以下负载平衡设置 -

我在端口 3000 和 3001 上有 2 个 rails 服务器。我需要接受来自浏览器的 https 请求并将它们重定向到 rails 服务器。我有以下 Nginx Conf 文件 -

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    passenger_root /home/hkr/.rvm/gems/ruby-2.2.0@global/gems/passenger-5.0.6;
    passenger_ruby /home/hkr/.rvm/wrappers/ruby-2.2.0/ruby;

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

sendfile        on;

keepalive_timeout  65;

gzip  on;

upstream web-cluster {
    ip_hash;
    server localhost:3001;
    server localhost:3000;
}

server {
    listen       80;
    server_name  localhost;

    location / {
        root   html;
        index  index.html index.htm;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

server {
    listen       443 ssl;
    server_name  ruby-trail.com;
    root PATH_TO_PROJECT/public;
    passenger_enabled on;
    rails_env development;

    ssl_certificate      /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key  /etc/nginx/ssl/nginx.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

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

    location / {

        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;

        index  $uri $uri/ index.html index.htm;
        proxy_pass http://web-cluster$request_uri;
        proxy_redirect  http://localhost:3001 https://ruby-trail.com;
    }
}   

当我发送 ajax DELETE 请求时,rails 服务器正在响应正确的预期响应,但响应未获得 OK 200 状态。

这是来自 NGINX 错误日志 -

2015/04/21 20:28:07 [error] 23316#0: *18 upstream sent no valid HTTP/1.0 header while reading response header from upstream, client: 127.0.0.1, server: ruby-trail.com, request: "DELETE /links/48.json HTTP/1.1", upstream: "http://127.0.0.1:3001/links/48.json", host: "ruby-trail.com", referrer: "https://ruby-trail.com/groups/18"

这是来自 NGINX 访问日志 -

127.0.0.1 - - [21/Apr/2015:20:28:07 -0500] "DELETE /links/48.json HTTP/1.1" 009 1044 "https://ruby-trail.com/groups/18" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36"

当我直接访问 rails 服务器时没有问题,只有 Nginx 设置我得到 upstream sent no valid HTTP/1.0 header错误。

请让我知道我在哪里犯了错误。 提前致谢。

问题与Nginx配置无关。 服务器以 [​​=20=]0 状态响应,因为 Rails 中的后端控制器代码不正确。

在删除请求中,我返回了一个不正确的 Json 响应,如下所示。

def destroy     
    @link = Links.find(params[:id])
    @link.destroy    
    respond_to do |format|
    format.json { render json: @link, status: "success" } // incorrect
end

json响应需要如下-

def destroy     
        @link = Links.find(params[:id])
        @link.destroy    
        respond_to do |format|
        format.json { head :no_content } //correct
end

这就是 Jquery Ajax 调用执行错误代码块而不是成功代码的原因。