
Ich habe hier bereits andere Beiträge zu einem ähnlichen Problem gesehen, aber ich denke, meines erfordert eine andere Lösung, da die anderen Beiträge nicht geholfen haben.
Ich betreibe zwei separate Container mit Docker: For php-fpm
und for nginx
. Wenn ich versuche, Text mithilfe index.html
einer Datei anzuzeigen, ist alles in Ordnung, aber wenn ich den Dateinamen ändere, wird index.php
stattdessen eine „Download“-Datei heruntergeladen.
Ich bin nicht sicher, ob es nur an meiner default.conf
Datei liegt oder daran, wie ich meine Container einrichte.
Das ist mein docker-compose.yml
:
networks:
laravel:
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8088:80"
volumes:
- ./src:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laravel
mysql:
image: mysql
container_name: mysql
tty: true
ports:
- "4306:3306"
volumes:
- ./src:/var/lib/mysql
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- laravel
php:
build:
context: .
dockerfile: Dockerfile
container_name: php
volumes:
- ./src:/var/www/html
ports:
- "9000:9000"
networks:
- laravel
Das ist mein default.conf
:
server {
listen 80;
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Antwort1
Ihnen scheint der Hauptteil zu fehlen: die fastcgi_pass
Anweisung, die Anfrage tatsächlich an FPM weiterzuleiten. Fügen Sie dies unter dem location ~ \.php$
Abschnitt hinzu:
fastcgi_pass php:9000;
Siehe auchdas Beispiel in der Nginx-Dokumentation.