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

Using NGINX as reverse proxy for running Directus via using docker-compose results into rewrite or internal redirection cycle

使用 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 中的某处,因为我没有那些文件。

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