Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django nginx添加新站点会导致错误\u太多\u重定向_Django_Nginx_Gunicorn - Fatal编程技术网

Django nginx添加新站点会导致错误\u太多\u重定向

Django nginx添加新站点会导致错误\u太多\u重定向,django,nginx,gunicorn,Django,Nginx,Gunicorn,我正在尝试将另一个Django应用程序添加到我的服务器。我已经启动并运行了xmlanalyzer.maciejg.pl,现在我正试图在现有的nginx&gunicorn设置中添加另一个应用程序,该应用程序将在fenging.maciejg.pl上提供 我使用了现有的XMLAnalyzergunicorn设置(工作正常): 以下是gunicorn为击剑应用程序设置的程序(不工作): 两者似乎都在上升: ps -ef | grep gunicorn my-user-name 780 2

我正在尝试将另一个Django应用程序添加到我的服务器。我已经启动并运行了xmlanalyzer.maciejg.pl,现在我正试图在现有的nginx&gunicorn设置中添加另一个应用程序,该应用程序将在fenging.maciejg.pl上提供

我使用了现有的XMLAnalyzergunicorn设置(工作正常):

以下是gunicorn为击剑应用程序设置的程序(不工作):

两者似乎都在上升:

ps -ef | grep gunicorn
my-user-name        780 20697  0 10:20 ?        00:00:01 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8002 mysite.wsgi:application --name fencing --workers 3 --user=my-user-name --group=my-user-name
my-user-name        787   780  0 10:20 ?        00:00:00 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8002 mysite.wsgi:application --name fencing --workers 3 --user=my-user-name --group=my-user-name
my-user-name        788   780  0 10:20 ?        00:00:00 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8002 mysite.wsgi:application --name fencing --workers 3 --user=my-user-name --group=my-user-name
my-user-name        789   780  0 10:20 ?        00:00:00 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8002 mysite.wsgi:application --name fencing --workers 3 --user=my-user-name --group=my-user-name
my-user-name       1712  1656  0 12:40 pts/1    00:00:00 grep --color=auto gunicorn
root      1730     1  0  2018 ?        01:04:09 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8001 xmlanalyzer.wsgi:application --name xmlanalyzer --workers 3 --user=my-user-name --group=my-user-name
my-user-name      17483  1730  0 Mar25 ?        00:01:12 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8001 xmlanalyzer.wsgi:application --name xmlanalyzer --workers 3 --user=my-user-name --group=my-user-name
my-user-name      17554  1730  0 Mar25 ?        00:01:05 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8001 xmlanalyzer.wsgi:application --name xmlanalyzer --workers 3 --user=my-user-name --group=my-user-name
my-user-name      17953  1730  0 Mar25 ?        00:00:41 /home/django/venv/bin/python3 /home/django/venv/bin/gunicorn -b 127.0.0.1:8001 xmlanalyzer.wsgi:application --name xmlanalyzer --workers 3 --user=my-user-name --group=my-user-name
我使用以下方法创建了nginx安装程序:

/etc/nginx/sites-available# more xmlanalyzer
server {
    server_name xmlanalyzer.maciejg.pl;

    access_log off;

    location /static/ {
        alias /home/django/xmlanalyzer/XMLAnalyzer/static/;
    }

    location / {
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
 # managed by Certbot

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/xmlanalyzer.maciejg.pl/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/xmlanalyzer.maciejg.pl/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = xmlanalyzer.maciejg.pl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name xmlanalyzer.maciejg.pl;
    listen 80;
    return 404; # managed by Certbot
    client_max_body_size 64M;
}
我已将文件夹和端口从8001更改为8002。因此,我得到:

/etc/nginx/sites-available# more fencing
server {
    server_name fencing.maciejg.pl;

    access_log off;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        alias /home/django/fencing/fencingtournament/static/;
    }

    access_log /home/django/fencing/logs/nginx-access.log;
    error_log /home/django/fencing/logs/nginx-error.log;

    location / {
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8002;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
 # managed by Certbot

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/fencing.maciejg.pl/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/fencing.maciejg.pl/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = fencing.maciejg.pl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name fencing.maciejg.pl;
    listen [::]:80;
    return 404; # managed by Certbot
}
现在,虽然效果很好,但我在尝试访问时得到了太多的错误重定向

Curl证明域设置正确,nginx可用。由于某些原因,它不会重定向到我的应用程序:

curl fencing.maciejg.pl
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
gunicorn原木在我看来很不错:

tail gunicorn-error.log
Starting fencing as my-user-name
[2019-03-26 10:20:01 +0000] [780] [INFO] Starting gunicorn 19.7.1
[2019-03-26 10:20:01 +0000] [780] [INFO] Listening at: http://127.0.0.1:8002 (780)
[2019-03-26 10:20:01 +0000] [780] [INFO] Using worker: sync
[2019-03-26 10:20:01 +0000] [787] [INFO] Booting worker with pid: 787
[2019-03-26 10:20:01 +0000] [788] [INFO] Booting worker with pid: 788
[2019-03-26 10:20:02 +0000] [789] [INFO] Booting worker with pid: 789
my/home/django/fenging/logs文件夹中的nginx-access.log和nginx-error.log为空

我错过了什么?我将感谢您的任何意见

编辑仅用于添加-如果手动启动,则可以访问该应用程序:

Starting development server at http://159.65.24.62:8002/
[26/Mar/2019 14:24:37] You're accessing the development server over HTTPS, but it only supports HTTP.
这里的错误是意料之中的-这只是为了表明对的web请求确实命中了正确的位置,因此域设置正常

编辑2将围栏应用程序的nginx设置更改为
访问\登录结果如下:

more nginx-access.log

37.30.26.37 - - [26/Mar/2019:14:14:04 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko
) Chrome/73.0.3683.86 Safari/537.36"
37.30.26.37 - - [26/Mar/2019:14:14:04 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko
) Chrome/73.0.3683.86 Safari/537.36"
因此,我可以看到请求到达nginx,它正在拒绝


编辑3使用certbot禁用重定向后,我现在访问时会看到nginx登录页-因此,它再次出现,只是没有重定向到由
gunicorn运行的我的应用程序。所以我仍然相信这是我的nginx设置中的一个bug-但是,我仍然没有看到它…

好的,我终于解决了这个问题!有多个问题

首先,我在nginx设置中发生了冲突。 但问题是,即使我解决了这个问题,仍然会出现HTTP错误。这是因为gunicorn设置无效。 但问题是,即使我解决了这个问题,仍然会出现HTTP错误。这是因为Django设置无效

所以我一次又一次地把每一件东西都弄得一团糟,我的建议和解决办法是:一步一步地分析

首先:我在开发模式下运行了Django应用程序,启动了
python manage.py runserver 127.0.0.1:8000
,并禁用了SSL。通过使用
curl
的这种方式,我能够让它做出响应,并确认它工作正常

接下来,我已经关闭了应用程序,并通过gunicorn脚本运行它。我发现它抛出了一个错误,因为持有SECRET_密钥的环境变量不可用。老实说,我没有解决这个问题,我已经将密钥保存在一个单独的文件中。所以,有一个问题解决了,我的枪没问题

嵌套步骤:杀死gunicorn进程并使用
supervisiord
调用它。原来有一个隐私问题,因为
supervisiord
在不同的帐户上运行

一旦解决了这个问题,我就从头开始重新创建nginx设置,直到它开始转发请求。没有SSL

接下来,我重新运行
certbot
,将SSL放回原处。在这里,我还发现您需要清除浏览器缓存,因为它没有显示页面,即使下面的设置很好。这也花了一段时间——我在尝试用不同的笔记本电脑访问我的网站时意外发现了这一点,发现它工作正常

最后,我将我的其他nginx服务器配置逐一放回启用的站点


我希望我永远不需要这个解决方案,它只对其他人有用:)

好的,我终于解决了这个问题!有多个问题

首先,我在nginx设置中发生了冲突。 但问题是,即使我解决了这个问题,仍然会出现HTTP错误。这是因为gunicorn设置无效。 但问题是,即使我解决了这个问题,仍然会出现HTTP错误。这是因为Django设置无效

所以我一次又一次地把每一件东西都弄得一团糟,我的建议和解决办法是:一步一步地分析

首先:我在开发模式下运行了Django应用程序,启动了
python manage.py runserver 127.0.0.1:8000
,并禁用了SSL。通过使用
curl
的这种方式,我能够让它做出响应,并确认它工作正常

接下来,我已经关闭了应用程序,并通过gunicorn脚本运行它。我发现它抛出了一个错误,因为持有SECRET_密钥的环境变量不可用。老实说,我没有解决这个问题,我已经将密钥保存在一个单独的文件中。所以,有一个问题解决了,我的枪没问题

嵌套步骤:杀死gunicorn进程并使用
supervisiord
调用它。原来有一个隐私问题,因为
supervisiord
在不同的帐户上运行

一旦解决了这个问题,我就从头开始重新创建nginx设置,直到它开始转发请求。没有SSL

接下来,我重新运行
certbot
,将SSL放回原处。在这里,我还发现您需要清除浏览器缓存,因为它没有显示页面,即使下面的设置很好。这也花了一段时间——我在尝试用不同的笔记本电脑访问我的网站时意外发现了这一点,发现它工作正常

最后,我将我的其他nginx服务器配置逐一放回启用的站点

我希望我永远不需要这个解决方案,它只对其他人有用:)

tail gunicorn-error.log
Starting fencing as my-user-name
[2019-03-26 10:20:01 +0000] [780] [INFO] Starting gunicorn 19.7.1
[2019-03-26 10:20:01 +0000] [780] [INFO] Listening at: http://127.0.0.1:8002 (780)
[2019-03-26 10:20:01 +0000] [780] [INFO] Using worker: sync
[2019-03-26 10:20:01 +0000] [787] [INFO] Booting worker with pid: 787
[2019-03-26 10:20:01 +0000] [788] [INFO] Booting worker with pid: 788
[2019-03-26 10:20:02 +0000] [789] [INFO] Booting worker with pid: 789
Starting development server at http://159.65.24.62:8002/
[26/Mar/2019 14:24:37] You're accessing the development server over HTTPS, but it only supports HTTP.
more nginx-access.log

37.30.26.37 - - [26/Mar/2019:14:14:04 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko
) Chrome/73.0.3683.86 Safari/537.36"
37.30.26.37 - - [26/Mar/2019:14:14:04 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko
) Chrome/73.0.3683.86 Safari/537.36"