Nginx - PHP-FPM 7.1 Docker容器,在子目录中访问PHP文件时响应的延迟很长

时间:2018-03-11 17:18:21

标签: php docker nginx

我现在一直试图解决这个问题,这已经打败了我。

以下是设置:

Nginx在一个docker容器中,php-fpm 7.1在另一个docker容器中。容器都可以访问相同的文件卷。

通信正在运行,它显示一个没有问题的phpinfo文件,简单快捷,根目录中的phpinfo文件,以及子目录。

将应用程序文件复制到服务器。 根目录中的文件快速返回,没有延迟。 在发生任何事情之前,对子目录中文件的任何访问都有40-50秒的延迟,但是在最终加载时会正确处理。

我可以看到创建php-fpm进程来处理请求,但它似乎没有做到40-50秒左右的任何事情。

有问题的应用程序是Prestahop(尚未安装,因此它正在尝试运行安装过程),因此它不是应用程序问题。

只有当请求的文件位于子目录中时,导致40秒延迟到第一次repsonse的原因是什么?

感激不尽的任何帮助。

配置文件:

Docker撰写

 version: '2'
services:
    nginx_test:
        image: roja45/nginx 
        working_dir: /var/www
        container_name: nginx_test
        environment:
            - WORKING_DIR=/var/www
        volumes:
            - /home/user/websites/test:/var/www
            - /home/user/docker/nginx/test.conf:/etc/nginx/conf.d/default.conf:ro
        ports:
            - "80:80"
        networks:
            - nginx-proxy
    php_test:
        image: roja45/php-fpm:7.1
        container_name: php_test
        volumes:
            - /home/user/websites/test:/var/www
            - /home/nigel/docker/php-fpm/php-roja45-dev.ini:/usr/local/etc/php/conf.d/php-roja45-dev.ini
        ports: 
            - "9000:9000"
        networks:
            - nginx-proxy
networks:
    nginx-proxy:
        external:
            name: nginx-proxy
volumes:
    roja45-database:
        driver: local

Nginx Doxkerfile

FROM nginx:alpine

RUN mkdir -p /var/www

RUN set -x \
    && addgroup -g 82 -S www-data \
    && adduser -u 82 -D -S -G www-data www-data

RUN chown -R www-data:www-data /var/www
RUN chmod u+rwx,g+rx,o+rx /var/www
RUN find /var/www -type d -exec chmod 755 {} +
RUN find /var/www -type f -exec chmod 644 {} +

PHP-FPM Dockerfile

FROM php:7.1-fpm-jessie

RUN apt-get update

RUN apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install -j$(nproc) iconv pdo pdo_mysql zip mysqli \
    && docker-php-ext-configure gd \
        --with-freetype-dir=/usr/include/ \
        --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

RUN chown -R www-data:www-data /var/www
RUN chmod u+rwx,g+rx,o+rx /var/www
RUN find /var/www -type d -exec chmod 755 {} +
RUN find /var/www -type f -exec chmod 644 {} +

Nginx conf

server {
    listen       80;

    server_name  server_name;

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log  debug;

    index index.php index.html;

    charset utf-8;

    root   /var/www;

    error_page 404 /error404.html;
    error_page 500 /error500.html;


    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ ^/.+\.php(/|$) {
        fastcgi_split_path_info ^(.+.php)(/.*)$;
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_keep_conn on;
        fastcgi_pass php_test:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

PHP ini补充:

file_uploads = On
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 30
request_terminate_timeout = 30
log_errors=on
error_log = /var/www/error_log
max_input_vars = 10000
short_open_tag=off
date.timezone = "America/Bogota"

1 个答案:

答案 0 :(得分:1)

用于docker-compose文件中的nginx和php-fpm容器

func StudentCreateWithExcelPost(w http.ResponseWriter, r *http.Request) {
    mr, err := r.MultipartReader()
    log.Print(err)
    form, err := mr.ReadForm(10 << 20)
    if err != nil {
        log.Print(err)
    }
    fh := form.File["file"]
    excelFile, err := fh[0].Open()
    if err != nil {
        log.Print(err)
    }
}