Имеется веб сервер на Debian 10 , PHP Версия 7.3.4-2 , СУБД 5.5.5-10.3.17-MariaDB-0+deb10u1, Apache/2.4.38 (Debian) , Nginx 1.14.2 и модуль mod_rpaf 0.8.4 для проброски адреса клиента к серверу
На данном сервере будут крутится на данный момент два веб сайта , один на основе Drupal 8 , другой на основе moodle 3.7.2
D8 - example.com
Moodle 3.7.2 - moodle.example.com
Почитав решил сделать nginx front end apache2 + mod_rpaf
Конфигурация следующая:
Apache2:
/etc/apache2/apache2.conf
замена
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
на
LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
/etc/apache2/ports.conf
Listen 127.0.0.1:81
<VirtualHost 127.0.0.1:81>
ServerName example.com
ServerAlias www.example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/example_com/web
<Directory /var/www/example_com/web>
Options FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example_com_error.log
CustomLog ${APACHE_LOG_DIR}/example_com_access.log vhost_combined
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php/php7.3-fpm.sock|fcgi://localhost/var/www/example_com/web"
</VirtualHost>
<VirtualHost 127.0.0.1:81>
ServerName moodle.example.com
ServerAdmin admin@moodle.example.com
DocumentRoot /var/www/moodle_example_com/web
<Directory /var/www/moodle_example_com/web>
Options FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/moodle_example_com_error.log
CustomLog ${APACHE_LOG_DIR}/moodle_example_com_access.log vhost_combined
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php/php7.3-fpm.sock|fcgi://localhost/var/www/moodle_example_com/web"
</VirtualHost>
/etc/apache2/mods-available/rpaf.conf
<IfModule rpaf_module>
RPAF_Enable On
RPAF_ProxyIPs 127.0.0.1 ::1
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
RPAF_ForbidIfNotProxy Off
RPAF_Header X-Forwarded-For
</IfModule>
Nginx:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
root /var/www/example_com/web;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:81;
proxy_redirect on;
set_real_ip_from 1.2.3.4;
real_ip_recursive on;
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_pass_header Set-Cookie;
}
location ~ /\.ht {
deny all;
}
location ~* \.(ico|docx|doc|xls|xlsx|rar|zip|jpg|jpeg|txt|xml|pdf|gif|png|css|js|html)$ {
root /var/www/example_com/web;
}
ssl_certificate /etc/nginx/ssl/example_com.crt;
ssl_certificate_key /etc/nginx/ssl/example_com.key;
}
server {
listen 80;
listen [::]:80;
server_name moodle.example.com;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
root /var/www/moodle_example_com/web;
index index.php;
server_name moodle.example.com;
location / {
proxy_pass http://127.0.0.1:81;
proxy_redirect on;
set_real_ip_from 1.2.3.4;
real_ip_recursive on;
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_pass_header Set-Cookie;
}
ssl_certificate /etc/nginx/ssl/moodle_example_com.crt;
ssl_certificate_key /etc/nginx/ssl/moodle_example_com.key;
}
Ошибок никаких не вызывает, веб сайты работают.
Но есть одна проблема, которую я не понял как решить.
Мысль следующая:
На D8 стоит плагин CAS Server , на Moodle стоит плагин CAS Auth
При попытке авторизоваться на Moodle через CAS Server который на D8 вылазит следующая оиюка только в логах nginx
2019/09/14 20:33:28 [error] 10802#10802: *105 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 1.2.3.4, server: moodle.example.com, request: "GET /login/index.php?authCASattras=CAS&ticket=ST-qXn8UiwEbFsYpX0nobVmGMS-ZARMGrXcm3Hbo7_uj2s HTTP/2.0", upstream: "http://127.0.0.1:81/login/index.php?authCASattras=CAS&ticket=ST-qXn8UiwEbFsYpX0nobVmGMS-ZARMGrXcm3Hbo7_uj2s", host: "moodle.example.com", referrer: "https://example.com/cas/login?service=https%3A%2F%2Fmoodle.example.com%2Flogin%2Findex.php%3FauthCASattras%3DCAS"
Что я сделал, я создал сайт на хостинге( который не мой сервер) назвал его d8.example.com ( Drupal 8) и md.example.com ( Moodle 3.7.2)
Получается :
На моем сервере сайты - example.com и moodle.example.com
На хостинге - d8.example.com и md.example.com
Сделал d8.example.com CAS Server , md.example.com и example.com и moodle.example.com CAS client
На всех трех сайтах я авторизовался под пользователем CAS Server который на d8.example.com
Далее я сделал example.com CAS Server , md.exemple.com и d8.example.com и moodle.example.com
Авторизация прошла и на md.exemple.com и на d8.example.com , на moodle.example.com вышла та ошибка.
Где я накосячил с конфигурацией, как я понял из ошибка он пытается отправить запрос с 127.0.0.1:81 на внешний адрес moodle.example.com.
Как это можно полечить? Редирект?