在Docker中运行Prestashop时,后台有ERR_TOO_MANY_REDIRECTS

时间:2017-04-03 09:05:37

标签: docker prestashop prestashop-1.6

我正在尝试为Prestashop项目创建一个docker环境。我有它几乎工作,但由于某种原因,后台是无法访问的 - 它给了我一个ERR_TOO_MANY_REDIRECTS错误。

我更改了shop_url表中的网址,并将PS_SHOP_DOMAIN和PS_SHOP_DOMAIN_SSL更改为无效。我尝试禁用友好URL,启用/禁用SSL - 但问题仍然存在。

我正在为网络服务器使用自定义图片:

luken-wodby-nginx-prestashop Dockerfile:

FROM wodby/nginx:1.10

ENV WODBY_DIR_FILES /mnt/files

RUN rm /etc/gotpl/default-vhost.conf.tpl && \
    mkdir -p $WODBY_DIR_FILES && \
    mkdir -p /var/log/nginx

COPY prestashop.conf.tpl /etc/gotpl/
COPY init/* /docker-entrypoint-init.d/

搬运工-compose.yml:

version: "2"

services:
  mariadb:
    image: wodby/mariadb:10.1-2.0.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: organic
      MYSQL_USER: prestashop
      MYSQL_PASSWORD: prestashop
    volumes:
      - ./database:/docker-entrypoint-initdb.d
    ports:
      - "33060:3306"

  php:
    image: wodby/php:5.6-2.0.0
    environment:
      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
      PHP_XDEBUG: 1
      PHP_XDEBUG_DEFAULT_ENABLE: 1
    volumes:
      - ./:/var/www/html

  nginx:
    image: luken-wodby-nginx-prestashop:latest
    depends_on:
      - php
    environment:
      NGINX_BACKEND_HOST: php
      NGINX_SERVER_NAME: prestashop.docker.localhost
      NGINX_SERVER_ROOT: /var/www/html/public_html
    volumes:
      - ./:/var/www/html
    ports:
      - "8000:80"

  mailhog:
    image: mailhog/mailhog
    ports:
      - "8002:8025"

Nginx虚拟主机配置:

server {
    listen 80;
    server_name {{ getenv "NGINX_SERVER_NAME" "prestashop" }};
    root {{ getenv "NGINX_SERVER_ROOT" "/var/www/html/" }};
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    index index.php index.html;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        auth_basic off;
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 1;
    gzip_buffers 16 8k;
    gzip_http_version 1.0;
    gzip_types application/json text/css application/javascript;

    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
    rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$1$2$3.jpg last;
    rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
    rewrite ^/c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ /img/c/$1$2$3.jpg last;
    rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/$1$2.jpg last;
    rewrite ^/images_ie/?([^/]+).(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
    rewrite ^/order$ /index.php?controller=order last;
    location /panel_adm/ {                           #Change this to your admin folder
        if (!-e $request_filename) {
            rewrite ^/.*$ /panel_adm/index.php last; #Change this to your admin folder
        }
    }
    location / {
        if (!-e $request_filename) {
            rewrite ^/.*$ /index.php last;
        }
    }

    location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(/.*)$;
        try_files $uri =404;
        fastcgi_keep_conn on;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass backend;  #Change this to your PHP-FPM location
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   }
}

网站运行正常,只有后台无法访问,并且出现ERR_TOO_MANY_REDIRECTS错误。

任何想法可能出错?

2 个答案:

答案 0 :(得分:1)

我找到了问题的原因。 wodby/nginx nginx容器正在使用自定义fastcgi_params文件。这个文件很奇怪,没有fastcgi_param QUERY_STRING $query_string;行(与nginx附带的原始文件形成对比)。这使得它在默认情况下与您可以在互联网上找到的一些现成的nginx模板不兼容。它通过查询参数没有传递给脚本来表现(我在这里创建了一个问题:https://github.com/wodby/nginx/issues/3)。

现在,Prestashop的后台没有重要的controller参数吓坏了,因为它不知道要运行哪个控制器。如果没有控制器,它会使用默认控制器作为参数重定向到URL,但因为从来没有一个"控制器"参数可用于Prestashop,它以重定向循环结束,导致ERR_TOO_MANY_REDIRECTS

对此的修复是在您的nginx配置中添加fastcgi_param QUERY_STRING $query_string;以将查询参数传递给脚本。

答案 1 :(得分:0)

据我记忆,在安装时,Prestashop需要具有完整的文件夹权限,而它会导致一些问题。

例如:

chmod 777 -R /var/www/html

应该做的工作