2017-04-03 110 views
4

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

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

我使用的自定义图像的web服务器:

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错误。

任何想法可能是错的?

回答

1

我发现这个问题的原因。 wodby/nginx nginx容器正在使用自定义的fastcgi_params文件。这个文件奇怪地没有fastcgi_param QUERY_STRING $query_string;行(与nginx自带的原始文件相反)。这使得它在默认情况下与您可以在Internet上找到的一些准备好的nginx模板不兼容。它表现为查询参数没有传递给脚本(我在这里创建了一个问题:https://github.com/wodby/nginx/issues/3)。

现在,Prestashop的后台没有重要的controller参数,因为它不知道要运行哪个控制器。如果没有控制器,它将使用默认控制器作为参数重定向URL,但由于Prestashop中没有可用的“控制器”参数,所以它会在重定向循环中结束,从而导致ERR_TOO_MANY_REDIRECTS

解决方法是在您的nginx配置中添加fastcgi_param QUERY_STRING $query_string;以将查询参数传递给脚本。

1

据我记得,在安装时,Prestashop需要具有完整的文件夹权限,但它会导致类似的问题。

因此,例如:

chmod 777 -R /var/www/html 

应该做的工作

+0

不幸的是,它并没有帮助:(。 –