Nginx没有显示index.php

时间:2017-11-01 11:06:27

标签: php docker nginx docker-compose

所以,我已经运行了一个docker-compose,其中包含使用nginx另一个使用php和另一个使用mysql的容器的指令,但是当我尝试访问nginx时,他给了我这个错误:

403禁止

我认为他的配置可能有问题,这是他的配置文件:

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 /code;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

这里的情况是docker-compose文件:

version: '2'
services:
    web:
        image: nginx:latest
        ports:
            - "80:80"
        volumes:
            - ./code/public_html:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf
        links:
            - php
    php:
        image: php7-custom-conf
        volumes:
            - ./code/public_html:/code
        links:
            - db
    db:
        image: mysql:5.7
        volumes:
        - "./.data/db:/var/lib/mysql"
        restart: always
        ports:
            - "3306:3306"
        environment:
         MYSQL_ROOT_PASSWORD: dbrootpass
         MYSQL_DATABASE: dbname
         MYSQL_USER: dbuser
         MYSQL_PASSWORD: dbpass

感谢任何帮助,无论如何,感谢您的关注。 对不起,这里没有英语发言人的错误;)

2 个答案:

答案 0 :(得分:0)

问题出在您的location ~ \.php$

尝试将其替换为:

location ~ \.php$ {
    proxy_pass http://php:9000;
}

我重新测试一下。如果您连接到http://localhost/,它将返回403,因为权限错误(感谢@dizeee)但如果您尝试连接到http://localhost/index.php,则返回404,因为未定义proxy_pass。 / p>

答案 1 :(得分:0)

您的配置很好。但看起来nginx无法访问您的code / public_html文件夹。确保它对所有用户都是可执行的,例如: G。 chmod 0755 ./code/public_html。另一种解决方案是更改nginx进程的用户和/或组以匹配public_html文件夹的所有者。