Moodle за обратным прокси-сервером ssl: "Обратный прокси-сервер включен, сервер не доступен напрямую, извините".
Я попытался заставить moode работать за обратным прокси-сервером ssl, используя это решение, но я получаю следующую ошибку:
Обратный прокси включен, сервер не может быть доступен напрямую, извините. Пожалуйста, свяжитесь с администратором сервера.
В конфигурации Moodle я включил следующие параметры:
$CFG->reverseproxy = true;
$CFG->sslproxy = true;
Таким образом, в результате этой конфигурации.
Для обратного прокси я использую nginx, который имеет следующие настройки:
events {
worker_connections 768;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset utf-8;
gzip on;
gzip_disable "msie6";
client_max_body_size 10000M;
# Mysql apache-based variant
server {
listen 6440 ssl;
server_name 0.0.0.0;
ssl_certificate /etc/nginx/certs/cert.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_pass_request_headers on;
# In case or running another port please replace the value bellow.
proxy_pass http://^ip^;
}
}
}
куда ^ip^
это IP я обратный прокси запросы. Также для URL установки я использую в моем случае, что я запускаю установку ВСЕ в контейнерах докера следующий https://0.0.0.0:6440/ который НЕ является обслуживающим ip.
Также docker-compose выглядит следующим образом:
version: '2'
services:
nginx_reverse:
image: nginx:alpine
ports:
- "6440:6440"
links:
- 'moodle_mysql_reverse'
restart: always
volumes:
- './conf/nginx/nginx_ssl_reverse.conf:/etc/nginx/nginx.conf:ro'
- './conf/certs:/etc/nginx/certs:ro'
moodle_mysql_db_reverse:
image: mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_ONETIME_PASSWORD: "yes"
MYSQL_DATABASE: "${MOODLE_DB_NAME}"
MYSQL_USER: '${MOODLE_MYSQL_USER}'
MYSQL_PASSWORD: '${MOODLE_MYSQL_PASSWORD}'
moodle_mysql_reverse:
image: ellakcy/moodle:mysql_maria_apache
links:
- "moodle_mysql_db_reverse:moodle_db"
environment:
MOODLE_DB_HOST: "moodle_db"
MOODLE_DB_NAME: "${MOODLE_DB_NAME}"
MOODLE_DB_USER: '${MOODLE_MYSQL_USER}'
MOODLE_DB_PASSWORD: "${MOODLE_MYSQL_PASSWORD}"
MOODLE_ADMIN: "${MOODLE_ADMIN}"
MOODLE_ADMIN_PASSWORD: "${MOODLE_ADMIN_PASSWORD}"
MOODLE_URL: "https://0.0.0.0:6440"
MOODLE_REVERSE_LB: "true"
MOODLE_SSL: "true"
Знаете ли вы, почему я получаю ошибку и как это исправить?
1 ответ
Независимо от того, является ли это решением на основе докера или нет, рекомендуется использовать прокси-сервер НЕ для предоставления Host
Заголовок http. Поэтому конфигурация обратного прокси-сервера nginx должна быть такой:
events {
worker_connections 768;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset utf-8;
gzip on;
gzip_disable "msie6";
client_max_body_size 10000M;
# Mysql apache-based variant
server {
listen 6440 ssl;
server_name 0.0.0.0;
ssl_certificate /etc/nginx/certs/cert.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_pass_request_headers on;
# In case or running another port please replace the value bellow.
proxy_pass http://^ip^;
}
}
}
Как видите, следующая строка должна отсутствовать и не существовать в конфигурации обратного прокси-сервера nginx:
proxy_set_header Host $host;