django - 如何解决:域名在数字海洋的水滴中不起作用。使用 Nginx、docker-compose、django
问题描述
我正在尝试为我的数字海洋水滴设置一个域名。虽然 IP 地址工作正常,但域名似乎没有做任何事情并得到“无法访问此站点”。
检查https://whois.net/它显示 DNS 名称服务器指向正确的方向,即数字海洋的名称服务器 [NS1.DIGITALOCEAN.COM、NS2.DIGITALOCEAN.COM、NS3.DIGITALOCEAN.COM],并使用 www.whatsmydns .net 它显示域名已传播。
Digital Ocean 的 DNS 记录如下:
A--domain.tk--directs to XXXX
CNAME--www.domain.tk 是 domain.tk 的别名
NS--domain.tk--directs 到 ns1.digtalocean.com
NS--domain.tk--directs到 ns2.digtalocean.com
NS--domain.tk--指向 ns3.digtalocean.com
我正在使用使用 freenom 的 .tk 域,并在那里配置了相同的域名服务器。
我的 NGINX 配置如下:
upstream jaciv_server {
server djangoapp:8000;
}
server {
listen 80;
server_name domain.tk www.domain.tk;
location / {
proxy_pass http://jaciv_server;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /static/ {
alias /opt/services/djangoapp/static/;
}
location /media/ {
alias /opt/services/djangoapp/media/;
}
}
我的 docker-compose.yml 如下
version: '3'
services:
djangoapp:
build: .
volumes:
- .:/opt/services/djangoapp/src
- static_volume:/opt/services/djangoapp/static
- media_volume:/opt/services/djangoapp/media
domainname: jaciv.tk
networks:
- nginx_network
- database1_network
depends_on:
- database1
nginx:
image: nginx:1.13
ports:
- 8000:80
volumes:
- ./config/nginx/conf.d:/etc/nginx/conf.d
- static_volume:/opt/services/djangoapp/static
- media_volume:/opt/services/djangoapp/media
depends_on:
- djangoapp
- redis
networks:
- nginx_network
database1:
image: postgres:10
networks:
- database1_network
volumes:
- database1_volume:/var/lib/postgresql/data
redis:
image: "redis:alpine"
networks:
- database1_network
- nginx_network
celery:
build: .
command: celery -A jaciv_app worker -l info
volumes:
- .:/opt/services/djangoapp/src
depends_on:
- database1
- redis
- djangoapp
networks:
- database1_network
celery-beat:
build: .
command: celery -A jaciv_app beat -l info
volumes:
- .:/opt/services/djangoapp/src
depends_on:
- database1
- redis
- djangoapp
networks:
- database1_network
- nginx_network
networks:
nginx_network:
driver: bridge
database1_network:
driver: bridge
volumes:
database1_volume:
static_volume:
media_volume:
我允许的主机是 django 设置
ALLOWED_HOSTS = ['domain.tk', 'X.X.X.X']
解决方案
docker-compose.yml 文件中 nginx 容器的端口已关闭。
你应该使用:
nginx:
image: nginx:1.13
ports:
- 80:80
您希望 docker 代理侦听端口 80(“80:80”的第一个“80”)并希望将该流量转发到 nginx 容器中的端口 80(“80:80”的第二个“80”)因为这是 nginx 将侦听的默认端口。
推荐阅读
- maven - intelliJ“加载 maven 更改”与 maven 生命周期
- c++ - C++ 有助于理解低级代码的语法
- oauth-2.0 - 在 Postman 的 Jmeter 中添加 Auth2.0 以生成 Token
- sql - 对多列的唯一约束是否在每列上创建索引
- javascript - 反应组件:如何从道具中设置仅键属性?
- android-studio - Android Studio Room 查询以获取随机的 db 行并将第 2 列的行保存在变量中
- ios - 如何在 Xcode 中修复这个颤动的 iOS 错误?
- css - 如何防止 div 的文本扩展表单宽度?
- documentation - 记录文件命名约定
- echarts - 如何在 echarts 中使用 echarts-gl