x-forwarded-for ν€λλ₯Ό νμΈν΄μΌ νλ κ²½μ° μμΈν λ΄μ©μ μ μκ² λ¬Έμνμμμ€.
λν HTTP μμ² ν€λ.
μ΄μ λν μμ§μμ΄ μμμ΅λκΉ? @jcheng5
@coatless μλμ, κ·Όλ° κ·Έκ² μ νμνμ΄μ?
νμλ€μ΄ μμ λ₯Ό μ μΆν μ μλλ‘ μ€μ ν λ°μ§μ΄λ μμ© νλ‘κ·Έλ¨μ΄ μμ΅λλ€. νμ¬ μ±μ μμ μ μΆ μ μ¬μ©μ μ΄λ¦κ³Ό μ μΆ μκ°λ§ κΈ°λ‘ν μ μμ΅λλ€. λΉλλ μ±μΌλ‘ μ λ¬λλ IP μ£Όμμ λν μμ²μ μ μΆλ ν λΉκ³Ό ν¨κ» μ¬μ©μμ IPλ₯Ό μ μ₯ν μ μκΈ° λλ¬Έμ λλ€. μ΄κ²μ λμ νμ¬ μ€μ μμ λ κ°μ μ μΆλ¬Όμ΄ μ μ¬νκ² μμκ° λ§€κ²¨μ‘κΈ° λλ¬Έμ νλ¬Έμ μ²λ ΄μ± μλ°μ λ·λ°μΉ¨νλ μΆκ° μ¦κ±°λ₯Ό μ 곡ν κ²μ λλ€.
μμ² IP λ ΈμΆμ λν λ λ€λ₯Έ ν¬ν
λ ν ν.
μ±μ΄ Connect λλ Shinyapps.io λ₯Ό μ¬μ©νμ¬ λ°°ν¬λ κ²½μ° μ΄λ₯Ό μννλ μ½κ°μ
library(shiny)
ui_xfwd <- NULL
ui <- function(req) {
if ("HTTP_X_FORWARDED_FOR" %in% ls(req)) ui_xfwd <<- req[["HTTP_X_FORWARDED_FOR"]]
fluidPage(
h3("result"),
uiOutput("result")
)
}
server <- function(input, output, session) {
output$result <- renderUI({
if (!is.null(ui_xfwd)) {
div(
p("HTTP_X_FORWARDED_FOR header present in UI:"),
p(ui_xfwd)
)
} else {
div(
p("HTTP_X_FORWARDED_FOR header not present; here's the REMOTE_ADDR:"),
p(session$request[["REMOTE_ADDR"]])
)
}
})
}
shinyApp(ui, server)
μ λ μ΄λ° μμΌλ‘ νμ§ μμ κ²μ λλ€. μ‘°κΈ λ κ°λ ₯ν ν΄κ²° λ°©λ²μ κ²μν κ²μ λλ€.
@ jcheng5 κ°λ ₯ν λ°©λ²μ λν μνκ° μμ΅λκΉ?
μ§μ° λΌμ μ£μ‘ν©λλ€. @bborgesr μ λ°©λ²μ λ¬Έμ μ μ μλ² κΈ°λ₯μ΄ μ€νλ λλ§λ€ λ°λ‘ μμ UI μμ²μ΄ λμΌν λΈλΌμ°μ μμ μ¨ κ²μ΄λΌκ³ κ°μ νλ€λ κ²μ λλ€. λ°λμ μ¬μ€μ μλλλ€. νΈλν½μ΄ κ²ΉμΉκ±°λ μ¬μ©μκ° λ€λ‘ λ²νΌμ λλ μ λ UIκ° μΊμλμ΄ μ΄λ¬ν μμ²μ΄ μ°μμ μ΄μ§ μμ μ μμ΅λλ€.
μ¬κΈ°μ λν΄ λ무 κ±±μ νμ§ μλ κ²½μ° λ μμ μ μΈ λ°©λ²μ μμ±λ UIμ IP μ£Όμλ₯Ό μ½μ
νλ κ²μ
λλ€. <input type="hidden">
λν μ
λ ₯ λ°μΈλ©μ΄ μμΌλ©΄ μ’κ² μ§λ§ νμ¬λ μκΈ° λλ¬Έμ λμ ν
μ€νΈ μ
λ ₯μ μ¨κΈΈ μ μμ΅λλ€.
library(shiny)
ui <- function(req) {
fluidPage(
div(style = "display: none;",
textInput("remote_addr", "remote_addr",
if (!is.null(req[["HTTP_X_FORWARDED_FOR"]]))
req[["HTTP_X_FORWARDED_FOR"]]
else
req[["REMOTE_ADDR"]]
)
)
)
}
server <- function(input, output, session) {
cat("The remote IP is", isolate(input$remote_addr), "\n")
}
shinyApp(ui, server)
μ¬κΈ°κ° λ κ±±μ λλ€λ©΄ λΆννλ μλ² μ νμ μ μ ν μμ μ¬νμ΄ μ μ©λ λκΉμ§ κΈ°λ€λ €μΌ ν©λλ€.
@jcheng5 μ μ ν μμ μ¬νμ΄ μΈμ μ°©λ₯ν
@coatless μ€μ λ‘ μμΈν μ΄ν΄λ³΄λ Shiny Server Proμμ μ΄λ―Έ μλν΄μΌ νλ κ² κ°μ΅λλ€( /etc/shiny-server/shiny-server.conf
λ€μ μΆκ°).
whitelist_headers "x-forwarded-for";
κ·Έλ° λ€μ μλ² κΈ°λ₯ λ΄μμ session$req$HTTP_X_FORWARDED_FOR
λ₯Ό μ°Ύμ μ μμ΅λλ€.
μ΄κ²μ Shiny Server Open Source(cc @alandipert @shalutiwari)μ λ€μ λ²μ μ λν μ’μ νλ³΄κ° λ κ²μ΄μ§λ§ νμ€ν 2μ μ΄μ rstudio::conf μ΄μ μ λ λ€λ₯Έ 릴리μ€λ μμ κ²μ λλ€. κ·Έλμ μ μ΄λ λͺ λ¬. μ΄λ³΄λ€ λ ꡬ체μ μΌλ‘ λ§μλ릴 μ μμ΄ μ£μ‘ν©λλ€.
@jcheng5 νλ₯ν©λλ€. μ²λ§ κ°μ¬ν©λλ€!
μ κ²½μ°μ§ λ§μΈμ. whitelist_headers
λ μλνμ§ μμ΅λλ€. μλνλ μ½λ κ²½λ‘μλ μ²μλΆν° μ¬λ°λ₯Έ ν€λκ° μμ΅λλ€. λ΄κ° μ΄κ²μ μμλΌ μ μλμ§ λ³΄μ.
λ³ΈμΈ(λ° @alandiper)μ λν μ°Έκ³ μ¬ν:
xfwd
ꡬνμ μ΄μμ μ΄μ§ μμ΅λλ€. μ¬κΈ°λ₯Ό μ°Έμ‘°νμμμ€ . κΈ°μ‘΄ X-Forwarded-For
ν€λλ₯Ό μ μ§νμ§ μμ΅λλ€(νλ‘μμΈ κ²½μ° μ
μ€νΈλ¦Ό νλ‘μκ° μ λ’°ν μ μλ κ²½μ° κΈ°μ‘΄ X-Forwarded-For
ν€λ λμ remote-addrλ₯Ό μΆκ°ν΄μΌ ν©λλ€. ). μ΄μμ μΌλ‘λ μ΄κ²μ μ¬μ©νμ§ μκ³ λμ lib/proxy/http.js
μμ μ΄λ¬ν ν€λλ₯Ό μ§μ ꡬνν©λλ€. μλ§λ κ΄λ¦¬μκ° μ
μ€νΈλ¦Ό νλ‘μκ° μ λ’°ν μ μλμ§(λλ λ λμ λ°©λ²μΌλ‘ μ΄λ€ IPλ₯Ό μ λ’°ν μ μλ νλ‘μλ‘ κ°μ£Όν΄μΌ νλμ§) μλ €μ£ΌκΈ°λ₯Ό μν κ²μ
λλ€.X-Forwarded-*
λ₯Ό ꡬννλ κ²μ κ°λ¨ν©λλ€. SockJSλ μ΄λ¬ν ν€λλ₯Ό νμ©ν©λλ€. lib/proxy/sockjs.js
μμ createWebSocketClient
λ ν€λλ₯Ό λ λ²μ§Έ μΈμλ‘ νμ©ν μ μμΌλ©° conn.$conn._conn.headers
λ₯Ό ν΅ν΄ μμ² ν€λλ₯Ό κ°μ Έμ¬ μ μμ΅λλ€(λΆλͺ
ν κ°μΈ νλλ₯Ό μ½λ λμ μ κ·Όμλ₯Ό μΆκ°ν΄μΌ ν¨).μ΄μ λν μ λ°μ΄νΈκ° μμ΅λκΉ? μ€μ΄λ λ΄λΆμ μμ² IPλ₯Ό λ ΈμΆνλ κ²μ λ§€μ° μ μ©ν κ²μ λλ€.
ν΄λΌμ΄μΈνΈμ IP μ£Όμμ μ‘μΈμ€νλ κ²μ λ΄ νλ‘μ νΈμμλ λ§€μ° μ μ©ν κ²μ λλ€. λ€μ 릴리μ€μμ μ΄ κΈ°λ₯μ λ³Ό μ μλ κΈ°νκ° μμ΅λκΉ?
μ±μ΄ Connect λλ Shinyapps.io λ₯Ό μ¬μ©νμ¬ λ°°ν¬λ κ²½μ° μ΄λ₯Ό μννλ μ½κ°μ
library(shiny) ui_xfwd <- NULL ui <- function(req) { ...
Shiny Module λ΄μμ μμ² μ 보μ μ κ·Όν μ μλ λ°©λ²μ΄ μμ΅λκΉ?
Shiny Module λ΄μμ μμ² μ 보μ μ κ·Όν μ μλ λ°©λ²μ΄ μμ΅λκΉ?
@jcheng5 (https://github.com/rstudio/shiny/issues/141#issuecomment-351857670)κ° μ μν μ κ·Ό λ°©μμ λͺ¨λ λ΄μμ μλν΄μΌ ν©λλ€(μμ ν μ§μλλ©΄)
@jcheng5 (https://github.com/rstudio/shiny/issues/141#issuecomment-352564869)κ° μμ² νκ²½(μ½λμ req
)μ μλΈλ‘ μ λ¬νμ¬ μλνλ μ루μ
μ μ»μμ΅λλ€. - λ©μΈ UI κΈ°λ₯μ λͺ¨λ.
κ·Έλ¬λ μ΄μ λ€λ₯Έ μ»΄ν¨ν°μμ μ‘μΈμ€νλ κ²½μ°μλ 127.0.0.1 κ°μ΄ νμλ©λλ€. μμλλ μΌμ λκΉ?
μμλμ§ μμ κ² κ°μ§λ§ λλλ‘ μ¬μ©μμκ² λ°μν©λλ€. https://groups.google.com/d/msg/shiny-discuss/9WcbS3E4Cfc/9hRS6VDyTxYJ
Apache μ νλ‘μλ₯Ό μ¬μ©νμ¬ μ΄ μ루μ μ μ μ©νλ λ°©λ²μ μλ μ¬λμ΄ μμ΅λκΉ?
λ΄ VMμ μ€μΉλ RStudio μλ²μμ μ΄ μ루μ μ μ€ννλ©΄ μ λλ‘ μλνμ§λ§ μ νλ‘μκ° κ΅¬νλ νλ‘λμ μ μ λ¬ν λ IPλ νμ 127.0.0.1μ λλ€.
κ°μ₯ μ μ©ν λκΈ
ν΄λΌμ΄μΈνΈμ IP μ£Όμμ μ‘μΈμ€νλ κ²μ λ΄ νλ‘μ νΈμμλ λ§€μ° μ μ©ν κ²μ λλ€. λ€μ 릴리μ€μμ μ΄ κΈ°λ₯μ λ³Ό μ μλ κΈ°νκ° μμ΅λκΉ?