我搜索了很多在线材料,但没能找到解决问题的方法。我会尽量说清楚的。我想我错过了一些东西,也许在服务器配置方面更有经验的人可能会找到答案。
我有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证书后,一切正常。