JSP/SERVLET
2020.10.03 / 18:19

http ¶Ç´Â https ¿äû¿¡¼­ Æ÷Æ®·Î È£½ºÆ® À̸§À» ¾ò´Â ¹æ¹ý (4)

Ãß¼®µ¹ÀÌ
Ãßõ ¼ö 245

http ¶Ç´Â https ¿äû¿¡¼­ Æ÷Æ®·Î È£½ºÆ® À̸§À» ¾ò´Â ¹æ¹ý (4)

·Îµå ¹ë·±¼­¿Í Nginx¸¦ »ç¿ëÇÑ´Ù¸é ¼öÁ¤ ÄÚµå¾øÀÌ ¼³Á¤ÇϽʽÿÀ.

Nginx :

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;  

TomcatÀÇ server.xml ¿£Áø :

<Valve className="org.apache.catalina.valves.RemoteIpValve"  
remoteIpHeader="X-Forwarded-For"  
protocolHeader="X-Forwarded-Proto"  
protocolHeaderHttpsValue="https"/> 

Nginx ±¸¼º ÆÄÀÏ ¸¸ ¼öÁ¤ÇÏ´Â °æ¿ì Java ÄÚµå´Â ´ÙÀ½°ú °°¾Æ¾ßÇÕ´Ï´Ù.

String XForwardedProto = request.getHeader("X-Forwarded-Proto");

jboss ÄÁÅ×À̳ʿ¡ µÎ °³ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥À» ¹èÆ÷Çß½À´Ï´Ù (µ¿ÀÏÇÑ À¯´Ð½º »óÀÚ). app1¿¡¼­ ¿äûÀ» ¹ÞÀ¸¸é app2¿¡ ÇØ´çÇÏ´Â ¿äûÀ» ÇÁ·¹ÀÓÇؾßÇÕ´Ï´Ù.

¿¹ :
app1 ¿äûÀÌ http://example.com/context?param1=123
´ÙÀ½ " http://example.com/ "ÃßÃâÇؾß, ±×·¡¼­ µÎ ¹ø° ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÇÁ·¹ÀÓ ¿äûÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.

³»°¡ »ç¿ëÇÏ·Á°í :

  HttpServletRequest.getServerName() & 
  HttpServletRequest.getServerPort() & \
  HttpServletRequest.getHeader("host") 

¸Þ¼Òµå°¡ ÀÖÁö¸¸ http ¶Ç´Â https ÀÏ ¼ö ÀÖ½À´Ï´Ù.

´Ù¸¥ ´õ ÁÁÀº ¹æ¹ýÀÌ ÀÖ´Ù¸é ¾Ë·ÁÁֽʽÿÀ. °¨»ç!


¼­¹ö°¡ ÇÁ·Ï½Ã ¼­¹ö µÚ¿¡ÀÖ´Â °æ¿ì ÇÁ·Ï½Ã Çì´õ°¡ ¼³Á¤µÇ¾î ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.

proxy_set_header X-Forwarded-Proto  $scheme;

¿Ã¹Ù¸¥ scheme & url À» ¾òÀ¸·Á¸é springframework Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

public String getUrl(HttpServletRequest request) {
    HttpRequest httpRequest = new ServletServerHttpRequest(request);
    UriComponents uriComponents = UriComponentsBuilder.fromHttpRequest(httpRequest).build();

    String scheme = uriComponents.getScheme();             // http / https
    String serverName = request.getServerName();     // hostname.com
    int serverPort = request.getServerPort();        // 80
    String contextPath = request.getContextPath();   // /app

    // Reconstruct original requesting URL
    StringBuilder url = new StringBuilder();
    url.append(scheme).append("://");
    url.append(serverName);

    if (serverPort != 80 && serverPort != 443) {
        url.append(":").append(serverPort);
    }
    url.append(contextPath);
    return url.toString();
}