ERR_TOO_MANY_REDIRECTS 在后台 运行 Prestashop 在 Docker
ERR_TOO_MANY_REDIRECTS in backoffice when running Prestashop in Docker
我正在尝试为 Prestashop 项目创建一个 docker 环境。我几乎可以正常工作,但由于某种原因,后台无法访问 - 它给了我一个 ERR_TOO_MANY_REDIRECTS 错误。
我把shop_url
table里的url都改了,改了PS_SHOP_DOMAIN和PS_SHOP_DOMAIN_SSL也没白用。我试图禁用友好的 URL,enable/disable 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/
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= last;
rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p//.jpg last;
rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p///.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p////.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/////.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p//////.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p///////.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////////.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/////////.jpg last;
rewrite ^/c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ /img/c/.jpg last;
rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/.jpg last;
rewrite ^/images_ie/?([^/]+).(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/. 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 755 -R /var/www/html
应该完成这项工作。不要忘记在安装后将权限更改为更安全的权限,例如:
chmod 644 -R /var/www/html
chmod 755 -R cache app var modules img
(在@abkrim 对安全发表评论后更新)
我找到了问题的原因。 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 从来没有可用的 "controller" 参数,它会在重定向循环中结束,导致 ERR_TOO_MANY_REDIRECTS
.
解决此问题的方法是在您的 nginx 配置中添加 fastcgi_param QUERY_STRING $query_string;
以将查询参数传递给脚本。
我正在尝试为 Prestashop 项目创建一个 docker 环境。我几乎可以正常工作,但由于某种原因,后台无法访问 - 它给了我一个 ERR_TOO_MANY_REDIRECTS 错误。
我把shop_url
table里的url都改了,改了PS_SHOP_DOMAIN和PS_SHOP_DOMAIN_SSL也没白用。我试图禁用友好的 URL,enable/disable 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/
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= last;
rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p//.jpg last;
rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p///.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p////.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/////.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p//////.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p///////.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////////.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/////////.jpg last;
rewrite ^/c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ /img/c/.jpg last;
rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/.jpg last;
rewrite ^/images_ie/?([^/]+).(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/. 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 755 -R /var/www/html
应该完成这项工作。不要忘记在安装后将权限更改为更安全的权限,例如:
chmod 644 -R /var/www/html
chmod 755 -R cache app var modules img
(在@abkrim 对安全发表评论后更新)
我找到了问题的原因。 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 从来没有可用的 "controller" 参数,它会在重定向循环中结束,导致 ERR_TOO_MANY_REDIRECTS
.
解决此问题的方法是在您的 nginx 配置中添加 fastcgi_param QUERY_STRING $query_string;
以将查询参数传递给脚本。