django 应用程序仅使用端口 8000

Posted

技术标签:

【中文标题】django 应用程序仅使用端口 8000【英文标题】:django application only working with port 8000 【发布时间】:2021-12-26 12:52:03 【问题描述】:

我正在做一个项目,我已将它托管在 ec2 上,以查看一切是否正常。 目前它只是一个没有端点的单页应用程序。

问题是它只有在我使用 my_domain:8000 或 my_ip:8000 时才有效

这是我写的配置文件。

server 
listen 8000;
server_name mydomain.info;

# to avoid any error while fetching fevicon
location = /favicon.ico  access_log off; log_not_found off; 

location /static/ 
    root /home/ubuntu/dev/myproject;


location / 
    include proxy_params;
    # communicate via socket file created by Gunicorn
    proxy_pass http://unix:/home/ubuntu/dev/myproject.sock;

我使用以下方式启用它:

sudo ln -s /etc/nginx/sites-available/config-file /etc/nginx/sites-enabled/

之后,我使用 - 重新启动了 nginx-

sudo systemctl restart nginx

然后启动服务器使用-

python3 manage.py runserver 0.0.0.0:8000

这是我第一次这样做,我认为我在配置文件或启用它时做错了,但我无法弄清楚。

更新配置文件后-

server 
listen 80;
server_name mydomain.info;

client_body_buffer_size 10k;

location = /favicon.ico  access_log off; log_not_found off; 
location /staticfiles/ 
    root /home/ubuntu/dev/myproject;

location /media/  
    root /home/ubuntu/dev/myproject;


location / 
    proxy_set_header Host $http_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;
    proxy_pass http://unix:/home/ubuntu/aman-personal/aman- 
    personal.sock;
    proxy_read_timeout 120;

【问题讨论】:

如果你明确告诉 nginx 监听 8000 端口,你为什么希望它响应 80 端口? ;) @alexakarpov 是的,我意识到了。谢谢:) 【参考方案1】:

希望你使用的是 nginx 和 gunicorn

设置 gunicorn 配置并运行你的 nginx 来监听端口 80 而不是 8000

然后 nginx 会将 django 请求代理传递给 gunicorn。

当你运行 python3 manage.py runserver 0.0.0.0:8000, django 开发服务器正在启动,(不适合 生产),而是使用 gunicorn,创建一个 gunicron 单元文件并 启用并启动它。

/etc/nginx/配置文件

server 
    listen 80;
    server_name your_ip_address;

    client_body_buffer_size 10k;
    .......   
   

    location = /favicon.ico  access_log off; log_not_found off; 
    location /static/ 
        root /home/ubuntu/dev/myproject;
    
    location /media/  
        root /home/ubuntu/dev/content;
    
    
    location / 
        proxy_set_header Host $http_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;
        proxy_pass http://unix:/home/ubuntu/dev/myproject.sock;
        proxy_read_timeout 120;
    

创建一个 gunicorn 服务文件 /etc/systemd/system/my_gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=nginx
WorkingDirectory=/root/project/myproject
ExecStart=/path to env/bin/gunicorn --workers 4 --bind unix:/home/ubuntu/dev/myproject.sock <myproject>.wsgi:application --access-logfile /var/log/gunicorn/access.log --error-logfile /var/log/gunicorn/error.log 

Restart=on-failure

[Install]
WantedBy=multi-user.target

启动 gunicorn 服务和 nignx 后, 按照链接了解完整的详细信息以配置 nignx-gunicorn-django。

https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04.

同时检查您的 aws 安全组。

【讨论】:

嘿,一切都在运行,但我仍然无法在域上获取应用程序,即使它正在使用 gunicorn --bind 0.0.0.0:8000 myproject.wsgi。这就是我完成静态文件的方式 - STATIC_URL = '/staticfiles/' MEDIA_URL = '/images/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')。我也用配置文件更新了我的帖子。 在aws安全组中添加8000端口,(测试后在本地运行gunicron)

以上是关于django 应用程序仅使用端口 8000的主要内容,如果未能解决你的问题,请参考以下文章

Django项目运行端口被占用

对 Django 服务器 CORS 的获取请求仅阻止一个视图

为 django 应用程序公开容器端口

Linux查看端口

django的入门-----管理站点

django-sso单点登陆的实现