域名不适用于Docker和Nginx的数字海洋液滴



我搜索了很多在线材料,但没能找到解决问题的方法。我会尽量说清楚的。我想我错过了一些东西,也许在服务器配置方面更有经验的人可能会找到答案。

我有MERN堆栈应用程序,我正在尝试使用Docker将其部署在DigitalOcean液滴上。到目前为止一切都很好,一切都正常运行,除了我无法通过域访问我的应用程序。如果我使用液滴的IP,它可以完美地工作。

到目前为止我检查过的:

  • 检查了我的ufw状态,并且我启用了HTTP和HTTPS
  • 该域来自GoDaddy,它是实时的,与Digital Ocean中的适当名称空间链接
  • 在"数字海洋"的域部分,一切都设置为它应该设置的。我有正确的CNAME记录指向我的液滴的IP
  • 直接ping到我的域可以正常工作(它返回正确的IP(
  • 还检查了DNS查找工具,一切似乎都连接得很好

说到Docker容器,我有三个:客户端、后端和nginx。

这就是我的docker组成的样子:

version: '3'
services: 
nginx:
container_name: jtg-nginx
depends_on:
- backend
- client
restart: always
image: host-of-my-image-nginx:latest
networks:
- local-net
ports: 
- '80:80'
backend:
container_name: jtg-backend
image: host-of-my-image-backend:latest
ports:
- "5000:5000"
volumes: 
- logs:/app/logs
- uploads:/app/uploads
networks:
- local-net
env_file:
- .env
client:
container_name: jtg-client
stdin_open: true
depends_on:
- backend
image: host-of-my-image-client:latest
networks:
- local-net
env_file:
- .env
networks:
local-net:
driver: bridge
volumes:
logs:
driver: local
uploads:
driver: local

我有两个Nginx的例子。一个在客户端容器中使用,另一个在它自己的容器中使用。

这是来自客户端的default.conf:

server {
listen 3000;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}

现在是最重要的部分。这是在主Nginx容器中使用的default.conf:

upstream client {
server client:3000;
}
upstream backend {
server backend:5000;
}
server{
listen 80;
server_name my-domain.com www.my-domain.com;
location / {
proxy_pass http://client;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /backend {
rewrite /backend/(.*) /$1 break;
proxy_pass http://backend;
}
}

我真的不明白这个配置出了什么问题,我认为我错过了一些非常小的东西。

谢谢!

如果你想在前面设置域名,你需要有一个Web服务器实例,允许你代理将主机名传递到你的容器
所以这就是你可能想要做的:

server{
listen 80;
server_name my-domain.com www.my-domain.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /backend {
rewrite /backend/(.*) /$1 break;
proxy_pass http://backend;
}
}

错误已经解决。添加SSL证书后,一切正常。

相关内容

  • 没有找到相关文章

最新更新