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

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

我改变了shop_url表中的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虚拟主机configuration:

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

任何想法可能是错的?

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

举个例子:

 chmod 777 -R /var/www/html 

应该做这个工作

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

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

对此的修复是添加fastcgi_param QUERY_STRING $query_string; 在你的nginxconfiguration中将查询parameter passing给脚本。