Herunterladen von PHP-Dateien bei Verwendung von php-fpm und nginx mit Docker

Herunterladen von PHP-Dateien bei Verwendung von php-fpm und nginx mit Docker

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-fpmund for nginx. Wenn ich versuche, Text mithilfe index.htmleiner Datei anzuzeigen, ist alles in Ordnung, aber wenn ich den Dateinamen ändere, wird index.phpstattdessen eine „Download“-Datei heruntergeladen.

Ich bin nicht sicher, ob es nur an meiner default.confDatei 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_passAnweisung, 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.

verwandte Informationen