Я использую док-контейнер jwilder / nginx-proxy для прокси-сервера magento-контейнера (с использованием nginx) с SSL. Я смог настроить контейнеры и запустить процедуру установки magento с помощью SSL-соединения. После завершения установки я получаю сообщение об ошибке ERR_TOO_MANY_REDIRECTS всякий раз, когда пытаюсь получить доступ к веб-интерфейсу или бэкэнду magento.
Это кажется странным, поскольку во время установки, очевидно, нет проблем, поэтому я предполагаю, что должно быть что-то, чего я еще не понимаю. Я предполагаю, что есть некоторые правила перезаписи, которые портят архитектуру, но я не могу понять, что не так.
Это моя конфигурация magento nginx:
#
# The default server
#
server {
listen 443;
ssl on;
server_name example.com;
ssl_certificate /etc/certs/example.com.crt;
ssl_certificate_key /etc/certs/example.com.key;
#charset koi8-r;
root /var/www;
index index.html index.htm index.php;
location / {
index index.html index.php; ## Allow a static html file to be shown first
try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
expires 30d; ## Assume all files are cachable
}
## These locations would be hidden by .htaccess normally
location ^~ /app/ { deny all; }
location ^~ /includes/ { deny all; }
location ^~ /lib/ { deny all; }
location ^~ /media/downloadable/ { deny all; }
location ^~ /pkginfo/ { deny all; }
location ^~ /report/config.xml { deny all; }
location ^~ /var/ { deny all; }
location /var/export/ { ## Allow admins only to view export folder
auth_basic "Restricted"; ## Message shown in login window
auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
autoindex on;
}
location /. { ## Disable .htaccess and other hidden files
return 404;
}
location @handler { ## Magento uses a common front handler
rewrite / /index.php;
}
location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
rewrite ^(.*.php)/ $1 last;
fastcgi_read_timeout 500;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Я добавил следующие переменные среды в контейнер докеров magento:
Кроме того, я добавил сертификаты ssl к прокси nginx, а также к конфигурации magento nginx. Таким образом, каждый контейнер (прокси nginx и magento) содержит эти сертификаты.
Идея состоит в том, что прокси nginx перенаправляет все запросы от example.com в контейнер magento через SSL-соединение.
Контейнер magento не предоставляет публичные порты, но прокси-сервер nginx ссылается на контейнер (по соображениям безопасности).
Я отчаянно работал над этим уже несколько дней и очень ценю любой намек. Может быть проблема с сертификатами? Например. если перенаправленный запрос от прокси-сервера nginx содержит другое имя сервера и не может проверить сертификаты на magento ?! Но если да, то как это можно решить?
Спасибо Питер
Выполните это в каталоге установки Magento 2.x, и ваш сайт вернется в нормальное состояние (с безопасным соединением).
sudo php bin/magento setup:store-config:set --base-url-secure="https://example.com"
Питер
Похоже, вы полностью делаете свой сайт доступным с помощью SSL.
Вы установили небезопасный путь в Magento на https? Это может быть все, что вам нужно для базовой установки Magento?
update core_config_data set value="https://<mysite>/" where path="web/unsecure/base_url"
Кроме того, вам может понадобиться
update core_config_data set value=1 where path="web/secure/use_in_adminhtml"