错误请求(400)在ubuntu和Django上使用nginx

时间:2015-02-24 04:13:13

标签: django ubuntu nginx server ubuntu-server

我为自己的网络服务器制作了自己的配置,如果我通过IP访问我的网站,一切工作都很顺利 - http://179.188.3.54

我还没有改变我的域名,我修改了我的/ etc / hosts本地:

179.188.3.54     cinegloria.com

因此,当我尝试在浏览器上访问我的网站时,我得到了错误的请求(400)。这是我的nginx配置:

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/www;
index index.html index.htm;

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

server_name cinegloria.com www.cinegloria.com;

location /static {
        alias /cinegloria/cinegloria/cinegloria/static/;
}

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Forwarded-For  $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 10;
    proxy_pass http://0.0.0.0:8000/;
    fastcgi_split_path_info ^()(.*)$;
}
}

我不知道可能出现什么问题,据我所知,我不需要改变其他任何事情。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

什么意思是proxy_pass http:// 0.0.0.0 :8000 /?也许必须有127.0.0.1或179.188.3.54

并检查您在proxy_pass中的端口

root@RDE-1.3:~# curl -I http://179.188.3.54
HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Tue, 24 Feb 2015 15:46:10 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Frame-Options: SAMEORIGIN

root@RDE-1.3:~#
root@RDE-1.3:~#
root@RDE-1.3:~# curl -I http://179.188.3.54:8000


curl: (7) couldn't connect to host

PS: 你添加ALLOWED_HOSTS了吗? 默认值:[](空列表)

ALLOWED_HOSTS = [
    '.example.com',  # Allow domain and subdomains
    '.example.com.',  # Also allow FQDN and subdomains
]
  

表示此Django的主机/域名的字符串列表   网站可以服务。这是一种防止攻击者的安全措施   中毒缓存和密码重置电子邮件与恶意链接   通过伪造的HTTP主机头提交请求的主机,即   甚至可以在许多看似安全的Web服务器配置下使用。

     

此列表中的值可以是完全限定名称(例如   ' www.example.com'),在这种情况下,他们将匹配   请求的主机头正确(不区分大小写,不包括端口)。   以句点开头的值可以用作子域通配符:   ' .example.com的'将匹配example.com,www.example.com和任何其他   example.com的子域名。价值为' *'会匹配任何东西;在这   如果您有责任提供自己的主机验证   标题(可能在中间件中;如果是这样,则必须列出此中间件   首先在MIDDLEWARE_CLASSES中。

     

如果主机标头(或X-Forwarded-Host,如果USE_X_FORWARDED_HOST是   enabled)与此列表中的任何值都不匹配   django.http.HttpRequest.get_host()方法将引发   SuspiciousOperation。

     

当DEBUG为True或运行测试时,主机验证被禁用;   任何主人都会被接受。因此,通常只需要设置它   在生产中。

     

此验证仅适用于get_host();如果您的代码访问   直接来自request.META的主机头您绕过此安全性   保护。