У меня есть 3 сервера, работающие на 3 отдельных виртуальных машинах. Один обрабатывает запросы домена и обратные прокси-серверы двух других и добавляет шифрование SSL. Первый сервис запускает NextCloud (PHP-FPM 7, Nginx, MariaDB), второй - Гуакамоле (Jetty, Guacd, MySQL). Оба сервиса работают независимо друг от друга. Каждый сервис может быть обратно прокси без проблем. Я следовал инструкциям обоих провайдеров для настройки обратных прокси-серверов в соответствии с требованиями.
Когда я пытаюсь обслуживать обе службы с одного и того же обратного прокси-сервера nginx (чтобы правильно маршрутизировать guac.domain.com и cloud.domain.com), служба Guacamole продолжает оставаться доступной, но NextCloud перестает отвечать и возвращает только 502 ошибки. Если я закрою окно браузера Guacamole на несколько минут, облако снова станет доступным. В файлах журналов нет ничего, что я вижу, что указывает на проблему (кроме тайм-аута шлюза)
Обратный прокси настраивается следующим образом:
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
access_log logs/access.log main;
error_log /var/log/nginxerror.log warn;
sendfile off;
keepalive_timeout 65;
gzip off;
server_tokens off;
#default for non-configured domains and IP address
server {
return 404;
}
include /usr/local/etc/nginx/nginx-sites/*.conf;
}
/usr/local/etc/nginx/nginx-sites/*.conf включает в себя две конфигурации:
Прокси NextCloud:
server {
server_name cloud.domain.com;
listen 80;
#redirect visitors to the HTTPS version of the site
location / {
return 301 https://$server_name$request_uri;
}
}
server {
server_name cloud.domain.com;
listen 443 ssl;
#### unimportant SSL config
access_log /var/log/nginx/cloud.access.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.16.1.108;
#proxy_read_timeout 90;
}
}
Гуакамоле прокси:
server {
server_name guac.domain.com;
listen 80;
#redirect visitors to the HTTPS version of the site
location / {
return 301 https://$server_name$request_uri;
}
}
server {
server_name guac.domain.com;
listen 443 ssl;
#### unimportant SSL config
access_log /var/log/nginx/guac.access.log;
location / {
auth_basic "Guac Login";
auth_basic_user_file /usr/local/etc/nginx/nginx-sites/guac.pas;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_cookie_path /guacamole/ /;
proxy_pass http://172.16.1.110:8080/guacamole/;
}
}
Я попытался изменить директиву proxy_pass для конфигурации cloud.domain.com на другой внутренний сайт, который намного проще, чем NextCloud, и прокси продолжает работать. Я подозреваю, что проблема заключается в веб-сокете, который пытается поддерживать прокси, но я не знаю, как его отладить.
Благодарю.