在Docker中运行Prestashop时,后台重定向过多
我正在尝试为一个项目创建一个docker环境。我让它几乎工作,但出于某种原因,后台无法访问-它给了我一个错误太多的重定向错误 我更改了在Docker中运行Prestashop时,后台重定向过多,docker,prestashop,prestashop-1.6,Docker,Prestashop,Prestashop 1.6,我正在尝试为一个项目创建一个docker环境。我让它几乎工作,但出于某种原因,后台无法访问-它给了我一个错误太多的重定向错误 我更改了shop\u url表中的url,并将PS\u shop\u DOMAIN和PS\u shop\u DOMAIN\u SSL更改为no-vail。我试图禁用友好URL,启用/禁用SSL,但问题仍然存在 我正在为Web服务器使用自定义映像: nginx prestashop luken wodbyDockerfile: FROM wodby/nginx:1.10
shop\u url
表中的url,并将PS\u shop\u DOMAIN和PS\u shop\u DOMAIN\u SSL更改为no-vail。我试图禁用友好URL,启用/禁用SSL,但问题仍然存在
我正在为Web服务器使用自定义映像:
nginx prestashop luken wodby
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/
docker-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;
}
}
网站运行正常,只有后台无法访问,并且错误太多,重定向错误
有什么问题吗?据我所知,在安装时,Prestashop需要具有完整的文件夹权限,而这会导致此类问题 例如:
chmod 755 -R /var/www/html
我应该做这项工作。请不要忘记在安装后将权限更改为更安全的权限,如:
chmod 644 -R /var/www/html
chmod 755 -R cache app var modules img
(在@abkrim安全评论后更新)我找到了问题的原因。
wodby/nginx
nginx容器正在使用一个自定义的fastcgi_参数
文件。奇怪的是,这个文件没有fastcgi\u param QUERY\u STRING$QUERY\u STRING代码>行(与nginx附带的原始文件不同)。这使得它在默认情况下与您可以在internet上找到的一些现成的nginx模板不兼容。它通过没有传递到脚本的查询参数来显示自己(我在这里为它创建了一个问题:)
现在,Prestashop的后台办公室没有一个重要的控制器
参数,因为它不知道运行哪个控制器。如果没有控制器,它将使用默认控制器作为参数重定向到URL,但由于Prestashop从来没有可用的“控制器”参数,因此它以重定向循环结束,导致错误太多\u重定向
解决方法是添加fastcgi\u param QUERY\u STRING$QUERY\u STRING在nginx配置中使用code>将查询参数传递给脚本。不幸的是,它没有帮助:(.如果Prestashop需要在/var/www/html上使用chmod 777-R,那么唯一要做的就是在一眨眼之间将其删除。这只能是一个非常糟糕的建议,而且在我个人看来,对Stackoverflow给出这样的建议对我来说是没有帮助的。另一个对社区来说是危险的响应。chmod 777是非常糟糕的解决方案,只适用于在模式模块中使用php而不是fcgi或php fpm的非专业服务器。@abkrim这实际上是Prestashop安装的一个要求。我完全同意不应该是这样的事实。请在盲目向下投票之前提供另一个。MattLoye只有在服务器使用陈旧过时的mod php。如果服务器使用现代php fpm、cgi、fcgi在您的服务器上使用php,那么使用chmod 777不仅是被禁止的,而且是不好的做法,不安全,在许多服务器上甚至会出现错误。遗憾的是,程序员今天仍然在谈论777,而实际上它应该说的是“XXX目录必须对执行PHP的“用户”具有执行和写入权限”,当他们读到一些关于管理和系统安全性的内容时,也许你理解了否决权。祝你好运。