我正在尝试在 AWS ECS 上设置一个环境,其中包含由 Nginx 提供服务的 React 前端,以及两个应通过 Nginx 作为反向代理进行通信的后端服务(Django 应用程序)。我已经为服务到服务通信配置了 ECS 服务发现,但在 Nginx 容器启动时遇到错误,表明找不到上游主机。
来自任务日志的错误消息 -
我尝试过的:
在 ECS 中,我为 nginx 和我的 django 应用程序创建了命名空间和服务发现。图片如下;
这是默认的.conf
upstream healthmanagement {
server healthmanagement-service.glucocare-services:8000;
}
upstream chat {
server chat-service.glucocare-services:8000;
}
server {
listen 80;
location /api/ {
proxy_pass http://healthmanagement;
}
location /chat/ {
proxy_pass http://chat;
}
# Serve Django static files
location /static/django {
alias /app/healthcare_project/static/;
}
# Static Django media files
location /media/ {
alias /app/healthcare_project/media/;
}
# Serve React static files
location /static/ {
alias /usr/share/nginx/html/build/static/;
}
# Main location block to serve the React app
location / {
root /usr/share/nginx/html/build;
try_files $uri $uri/ /index.html;
}
}
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
resolver 172.31.0.2 valid=30s;
include /etc/nginx/conf.d/*.conf; # Include all conf files from conf.d directory
}
在这种情况下,您不需要 nginx 作为反向代理。 nginx 仅提供静态文件。
使用服务发现时,可以直接使用
healthmanagement-service.glucocare-services:8000
和 chat-service.glucocare-services:8000
配置后端服务。
如果您需要反向代理,请查看如何使用负载平衡分配 Amazon ECS 服务流量。使用负载均衡器时,服务发现也是可选的,因为负载均衡器具有唯一的 DNS 名称,可以用来代替
healthmanagement-service.glucocare-services:8000
和 chat-service.glucocare-services:8000
。
您可能会考虑使用 Amazon CloudFront 发行版来提供静态网站 甚至消除 nginx 的必要性并降低静态托管的成本。