这段时间在折腾django,一开始用单一的uwsgi控制web访问,虽然说没有什么大问题,但是很多东西没法配置,比如超时时间,uwsgi虽然有个“harakiri”配置项,但并没有什么作用。

所以终究还是需要接口nginx来做前端代理,但是在代理的出现了一个问题,前端一直没有响应,nginx错误日志(/var/log/nginx/error.log)中出现如下报错

2017/12/21 10:36:48 [error] 9056#0: *18 upstream prematurely closed connection while reading response header from upstream, client: 180.160.72.9, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://127.0.0.1:8000", host: "127.0.0.1:8002"

nginx中access.log返回:

180.160.72.9 - - [21/Dec/2017:10:25:28 +0800] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
180.160.72.9 - - [21/Dec/2017:10:25:53 +0800] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
180.160.72.9 - - [21/Dec/2017:10:26:55 +0800] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
180.160.72.9 - - [21/Dec/2017:10:27:55 +0800] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

找了很多资料后,从v2ex某个评论中看到了某个点,就是代理的地址需要将端口换成sock进程文件,

最终完美的配置文件

新建一个conf配置文件,同时可解决大部分超时问题,内容如下:

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 256k;         #以下四个参数已加大,如果设置太小也会出现timeout 504
fastcgi_buffers 16 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;


server {
        listen  8002;
        server_name localhost;

        location / {
            include     uwsgi_params;
            uwsgi_pass   unix:/home/api/vuln_cn/log/uwsgi.sock;    #这里是关键,指向uwsgi.sock文件,不能用127.0.0.1:8000,否则会出现文中的报错
            uwsgi_param UWSGI_CHDIR  /home/api/vuln_cn;     #这里与uwsgi.ini中配置类似,指向django项目目录
            uwsgi_param UWSGI_SCRIPT vuln_cn.wsgi;     #同上,指向项目名称
            access_log /home/api/vuln_cn/log/access.log;     #定义访问日志
            uwsgi_read_timeout 1800;
            uwsgi_send_timeout 300;
            proxy_read_timeout 300;
            }
    }

以上,备忘