我正在尝试使用Nginx和Gunicorn在Ubuntu Server 18.04中部署Django应用。至少从日志和状态的角度来看,每种工具似乎都能正常工作。
重点是,如果我使用SSH登录到服务器并尝试使用curl,gunicorn能够查看并处理该请求。但是,如果直接写我的IP,我只会得到典型的 Welcome to nginx 主页,并且请求对于gunicorn完全不可见,因此nginx似乎无法找到并将请求传递给gunicorn套接字。
我正在使用nginx 1.14.0
,Django 2.2.1
,Python 3.6.7
,gunicorn 19.9.0
和PostgreSQL 10.8
。
这是我的Nginx配置
server {
listen 80;
server_name localhost;
location /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/django/myproject/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
这些是我的gunicorn.sock
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
和gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=django
Group=www-data
WorkingDirectory=/home/django/myproject/myproject
ExecStart=/home/django/myproject/myproject/myproject/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
MyProject.wsgi:application
[Install]
WantedBy=multi-user.target
我一直在遵循本指南(https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04),该指南大多数都按预期工作,但是区别在于我的项目不是教程中的全新项目,而是从git中克隆而来回购(但是,它已经过测试并且代码可以正常工作)
我期望已经使用此配置从浏览器访问Django管理员,但事实并非如此。我尝试从浏览器访问我的IP,如果访问/admin
,我会收到欢迎使用nginx的消息,还会收到404消息。此外,gunicorn日志中未显示任何请求。
另一方面,如果我通过SSH登录到服务器并执行curl --unix-socket /run/gunicorn.sock localhost
,则可以在gunicorn日志中看到curl所完成的请求。
欢迎任何帮助。.我已经在这里待了几个小时,甚至无法从服务器外部获得1个请求。
PD:它也与服务器中的端口无关,因为当我访问IP的根目录时,会收到nginx答案。似乎Nginx根本没有任何配置。
答案 0 :(得分:1)
在您的nginx配置中,您应该使用正确的server_name而不是localhost
server_name mydomain.com;
如果没有,您将退回到默认的nginx服务器,该服务器返回“欢迎使用nginx”消息。您可以通过更改服务器顺序,删除nginx默认设置或使用default_server
参数来更改默认的虚拟服务器。您还可以收听多个服务器名称。
listen 80 default_server;
server_name mydomain.com localhost;
如果主机头字段与服务器名称不匹配,则NGINX Plus将请求路由到请求到达的端口的默认服务器。默认服务器是nginx.conf文件中列出的第一个服务器,除非您在listen指令中包括default_server参数以明确指定服务器为默认服务器。
https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#setting-up-virtual-servers
请记住,进行更改后必须重新加载nginx配置。例如sudo nginx -s reload
。
答案 1 :(得分:0)
最后,我已经正常工作了。您对nginx的配置是正确的,尽管我真正的问题不是要删除/修改sites_enabled
文件夹中nginx的默认配置文件。因此,当我设置listen 80 default_server
时,出现以下错误
[emerg] 10619#0:0.0.0.0:80中的重复默认服务器 /etc/nginx/sites-enabled/mysite.com:4
无论如何,我的静态文件有问题,我仍然不知道为什么它能那样工作。我需要设置DEBUG = True
才能查看管理模块的静态文件。
我将继续为管理面板调查在生产环境中提供静态文件的正确方法。
非常感谢您的帮助!