Nginx прокси-сервер с пользовательским доменом для приложения Oracle APEX не работает должным образом

Вопрос или проблема

Я использую Nginx в качестве прокси-сервера для моего приложения Oracle APEX. Когда я открываю свой пользовательский домен mycustomdomain.com, главная страница моего приложения APEX открывается, но у меня есть 3 проблемы:

  1. При первом открытии в браузере mycustomdomain.com я получаю mycustomdomain.com/ords/r/myapp/sample-charts/home. При втором открытии в том же браузере он открывается как mycustomdomain.com/home, как я и хочу, чтобы было всегда, а не только со второго раза.

  2. Когда я нажимаю в своей навигационной панели в приложении, чтобы перейти на другую страницу, тогда главная страница, которая открывалась первой, открывается как mycustomdomain.com/ords/r/myapp/sample-charts/somepagename, а не mycustomdomain.com/somepagename. Также, когда я открываю любую из них, я получаю ошибку Не удалось загрузить ресурс: сервер ответил статусом 403 (Запрещено). Когда я запускаю вручную в browsermycustomdomain.com/somepagename, это работает, но также появляется та же ошибка 403.

  3. Когда я возвращаюсь с любой страницы на главную страницу, она не приводит меня к mycustomdomain.com/home, а приводит к mycustomdomain.com/ords/r/myapp/sample-charts/home.

Вот код:

server {
    listen 80;
    server_name mycustomdomain.com www.mycustomdomain.com;

    #Перенаправить весь HTTP-трафик на HTTPS
        return 301 https://$host$request_uri;
}

#https блок сервера (порт 443)
server{
    listen 443 ssl;
    server_name mycustomdomain.com www.mycustomdomain.com;

    ssl_certificate /etc/ssl/mycustomdomain/SSLCertificate/hm_certificate.crt;
    ssl_certificate_key /etc/ssl/mycustomdomain/SSLCertificate/hm_privatekey.key;
    ssl_trusted_certificate /etc/ssl/mycustomdomain/SSLCertificate/hm_cabundle.ca-bundle;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;

    #Корневая директория документа и другие настройки
    root /var/www/html;
    index index.html index.htm index.php;

    #Заголовки безопасности
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0" always;
    add_header Pragma "no-cache" always;

    #Прокси для приложения Oracle APEX

    location / {

            proxy_pass https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/ords/r/myapp/sample-charts/home;
            proxy_set_header X-Forwarded-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_set_header Cookie $http_cookie;
            proxy_cookie_path  /ords/ /;
            proxy_redirect https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/  https://mycustomdomain.com/;
    }

   location /ords/ {

            proxy_pass https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/ords/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Cookie $http_cookie;
            proxy_pass_request_headers on;
            proxy_cookie_path /ords/ /ords/;
            proxy_redirect https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/  https://mycustomdomain.com/;
    }

    location /i/{

            proxy_pass https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/i/;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;

    }

}

Ответ или решение

Для решения проблем с проксированием вашего приложения Oracle APEX через Nginx с использованием пользовательского домена, давайте разберём три основных проблемы, которые вы указали, и предложим соответствующие решения.

1. Проблема с начальным URL

Симптом: При первом открытии mycustomdomain.com вы получаете URL mycustomdomain.com/ords/r/myapp/sample-charts/home, а после перезагрузки это корректируется на mycustomdomain.com/home.

Решение: Вам необходимо изменить конфигурацию Nginx, чтобы он корректно обрабатывал начальный запрос. Попробуйте изменить блок location /, чтобы он не перенаправлял на конкретный путь APEX:

location / {
    proxy_pass https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/ords/r/myapp/sample-charts/home; 
    proxy_set_header Host $host;
    ...
}

Замените часть пути ord/r/myapp/sample-charts/home на /, а перенаправление на конкретную страницу оставьте за минусом. Это даст возможность корректно обращаться к корневой странице вашего приложения.

2. Проблема с URL в навигации и ошибкой 403

Симптом: В навигации ваш APEX открывает страницы с некорректным URL – например, mycustomdomain.com/ords/r/myapp/sample-charts/somepagename, а не mycustomdomain.com/somepagename. Также наблюдается ошибка 403 (Forbidden).

Решение: Убедитесь, что эти URL правильно соответствуют вашим страницам. В вашем случае, возможно, необходимо обновить пути некоторых ресурсов и ссылок на страницах APEX, чтобы они указывали на правильные URL. Вы также можете попробовать использовать proxy_redirect и proxy_cookie_path для упрощения маршрутизации:

location / {
    proxy_pass https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/ords/r/myapp/sample-charts/;
    ...
    proxy_redirect https://myinstance0123.adb.eu-milan-1.oraclecloudapps.com/ords/r/myapp/sample-charts/ https://mycustomdomain.com/;
    ...
}

Это гарантирует, что все возвращаемые APEX URL будут заменены на корректные.

3. Проблема с возвратом на главную страницу

Симптом: Обратный переход на главную страницу также приводит к неправильному URL mycustomdomain.com/ords/r/myapp/sample-charts/home.

Решение: Для этого в APEX убедитесь, что ссылки на домашнюю страницу указывают на mycustomdomain.com/home. Также нужно гарантировать, что все ресурсы, связанные с навигацией, используют правильные URL без /ords/r/myapp/sample-charts/.

Дополнительные советы

  • Логи ошибок: Проверьте логи Nginx и APEX на наличие ошибок или предупреждений. Это поможет лучше понять источник проблемы.
  • Кэширование: Выключите кэширование во время разработки, чтобы убедиться, что обновления конфигурации применяются немедленно.
  • HTTPS: Убедитесь, что все ваши ресурсы и страницы загружаются через HTTPS для устранения проблем безопасности.
  • Правила безопасности: Обратите внимание на настройки заголовков безопасности, которые могут блокировать доступ. Возможно, стоит временно отключить некоторые из них, чтобы проверить, влияет ли это на рабочий процесс.

Следуя этим рекомендациям, вы должны устранить указанные проблемы и настроить ваш прокси-сервер для корректной работы с приложением Oracle APEX.

Оцените материал
Добавить комментарий

Капча загружается...