docker - 通过使用 docker-compose 结果进入重写或内部重定向循环,使用 NGINX 作为运行 Directus 的反向代理

标签 docker nginx docker-compose reverse-proxy directus

按照概述使用 docker-compose 安装 Directus here连同 NGINX 作为代理

File docker-compose.yaml

version: "3"

networks:
  directus:

services:
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: "directus"
      MYSQL_USER: "directus"
      MYSQL_PASSWORD: "directus"
      MYSQL_ROOT_PASSWORD: "directus"
    ports:
      - "3306:3306"
    networks:
      - directus

  directus:
    image: directus/directus:v8-apache
    ports:
      - "9090:80"
    container_name: directus
    environment:
      DIRECTUS_APP_ENV: "production"
      DIRECTUS_AUTH_PUBLICKEY: "some random secret"
      DIRECTUS_AUTH_SECRETKEY: "another random secret"
      DIRECTUS_DATABASE_HOST: "mysql"
      DIRECTUS_DATABASE_PORT: "3306"
      DIRECTUS_DATABASE_NAME: "directus"
      DIRECTUS_DATABASE_USERNAME: "directus"
      DIRECTUS_DATABASE_PASSWORD: "directus"
    volumes:
      - ./data/config:/var/directus/config
      - ./data/uploads:/var/directus/public/uploads    
    networks:
      - directus

  nginx:
    image: nginx
    depends_on:
      - directus
    container_name: nginx    
    volumes:
      - ./data/ntemplates:/etc/nginx/templates
      - ./directus.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    networks:
      - directus

NGINX 配置文件

File directus.conf

server {
    #/etc/nginx/conf.d/directus.conf 
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
       proxy_pass "http://directus:9090/"; 
    }
}

虽然 http://localhost:9090 正常工作,但当通过 http://localhost:8080 尝试相同时会导致 HTTP 5xx 内部服务器错误

nginx 报告

[error] 2#2: *6 rewrite or internal redirection cycle while internally redirecting to "/index.php", client: 172.26.0.1, server: localhost:9090, request: "GET /favicon.ico HTTP/1.1", host:"localhost:8080", referrer: "http://localhost:8080/"

最佳答案

我已经使用您的撰写文件启动了堆栈,并且几乎运行良好。不幸的是没有重定向问题但是 nginx 返回 502 因为端口不正确:

    location / {
       proxy_pass "http://directus:9090/"; 
    }

9090 端口在您的主机上,而不是在容器中。您必须将其更改为 80 或完全删除。

至于重定向问题,它的来源不在您目前提供的范围内。我最好的猜测是它在 ./data/ntemplates 中的某个地方。如果有扩展名为 .template 的文件,nginx 容器中的脚本将生成它们的配置文件。

我的第二个最佳猜测是它在 ./data/config 中的某处,因为我没有这些文件。

感谢您提供撰写文件,它为我准备这个答案节省了很多时间。

关于docker - 通过使用 docker-compose 结果进入重写或内部重定向循环,使用 NGINX 作为运行 Directus 的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64618059/

相关文章:

macos - 找到我的 nginx 实际使用的 nginx.conf 文件

node.js - 如何使用 docker-compose 通过此 mongoDB 连接字符串将我的 mongo 数据库连接到我的 Node 应用程序?

mysql - 如何通过解释 docker-compose.yml 中的卷来定位备份的主机存储?

image - 如何从Docker镜像访问文件?

docker-swarm 和 docker-compose 如何动态添加节点并让它们可以被服务解析

django - nginx 失败成功启动错误 pread() "/etc/nginx/sites-enabled/sites-available"failed (21 : Is a directory)

Nginx 速率限制 GET 或 POST 请求仅在一个位置

docker - 使用 Ansible 在 docker-machine 上启动 Docker 容器?

node.js - 无法从 docker 容器连接到 SSH ECONNREFUSED 127.0.0.1 :22 - NodeJS

docker - docker-compose:先前的音量设置会覆盖更改