使用 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
中的某处,因为我没有那些文件。
感谢您提供撰写文件,它为我准备这个答案节省了很多时间。
使用 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
中的某处,因为我没有那些文件。
感谢您提供撰写文件,它为我准备这个答案节省了很多时间。