Proxypass не сохраняет желаемый URL - PullRequest
0 голосов
/ 29 января 2020

Я использую www.shinyproxy.io решение для масштабирования R блестящего приложения. У меня есть некоторые веб-приложения под www.mydomain.com/shiny, и, например, я могу получить доступ к приложению / register, написав www.mydomain.com/shiny/app/register или www.mydomain.com/shiny/app_direct/register (эта вторая версия автоматически готова для мобильных устройств).

Я обнаружил, что правильная apache конфигурация для отображения этого регистрационного приложения в www.mydomain.com/register выглядит следующим образом:

<VirtualHost *:80>

   ServerName www.mydomain.com

<Proxy *>
    Allow from localhost
  </Proxy>


RewriteEngine on
# force HTTPS
  RewriteCond %{HTTP:X-Forwarded-Proto} !=https
  RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:8080%{REQUEST_URI} [P]

#Reverse proxy:
ProxyPass         /shiny        http://127.0.0.1:8080/shiny
ProxyPassReverse  /shiny        http://127.0.0.1:8080/shiny


#REGISTER:
ProxyPass         /register        http://127.0.0.1:8080/shiny/app/register
ProxyPassReverse  /register        http://127.0.0.1:8080/shiny/app/register

ProxyRequests off


</VirtualHost>

Когда я посещаю www.mydomain.com/register, я вижу, что приложение работает нормально.

Но когда Я пытаюсь изменить proxyPass / register на app_direct так:

ProxyPass         /register        http://127.0.0.1:8080/shiny/app_direct/register
ProxyPassReverse  /register        http://127.0.0.1:8080/shiny/app_direct/register

Теперь, если я захожу на www.mydomain.com/register, все также работает хорошо, но ссылка в браузере меняется на www.mydomain.com/shiny/app_direct/register

Кто-нибудь знает, почему меняется URL? Я хочу сохранить старый (www.mydomain.com/register).

Заранее спасибо!

1 Ответ

0 голосов
/ 29 января 2020

Я не уверен, является ли это проблемой слоя ShinyProxy или самого блестящего приложения. Если вы используете URL-адрес app_direct, я понимаю, что он удаляет iFrame вокруг блестящего приложения, но я не знаю, как это повлияет.

У меня есть похожий вариант использования, когда мы выполняем OAuth через MS, прежде чем вернуться в блестящее приложение. Мы обнаружили, что наши пользователи изо всех сил пытались перезагрузить приложение, потому что у URL был свой токен авторизации, и он устарел (и они не осознавали).

Мы обновляем наш отображаемый URL из блестящего приложения shinyServer() Сама функция с shiny::updateQueryString()

Так что вы можете попробовать:

# Within your Server.R file
shinyServer(function(input, output, session) {

observer({
  shiny::updateQueryString("www.mydomain.com/register")
})

# Your other app logic

})

Это может привести к тому, что наблюдатель будет сильно поражен, так что вы можете попробовать что-то более умное, например обновление URL из UI.R только один раз. Мы используем подход, описанный выше, и, похоже, он работает.

...