복붙노트

[SPRING] 어떻게 AWS ElasticBeanstalk와의 Nginx에 OAuth2를 사용 나의 봄 부팅 응용 프로그램에 SSL을 강요하는 걸까?

SPRING

어떻게 AWS ElasticBeanstalk와의 Nginx에 OAuth2를 사용 나의 봄 부팅 응용 프로그램에 SSL을 강요하는 걸까?

나는 참조 문서를 사용하여 SSL을 강제하기 위해 노력하고있어

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-security.html#howto-enable-https

그러나, 나는 이미

@Configuration
class WebSecurityConfiguration  {

내가 추가 할 때 WebSecurityConfigurerAdapter을 확장, 그리고 심지어 보호 무효 구성은 (HttpSecurity HTTP), 다음 아무 이유 / 로그인에 리디렉션 비 OAuth2를 페이지 / 홈 /에 요청합니다. 이 속성 설정으로 작동합니다. 그냥 클래스를 확장하여 WebSecurityConfigurerAdapter가 응용 프로그램을 나누기 확장합니다. OAuth2를 담보 다른 관련이없는 노선이 있습니다. 나는 OAuth2를을 설정하는 동안 이전이 비 결정적 무작위 행동을 보았다.

이것은 WebSecurityConfiguration 클래스의 개요입니다.

@Configuration
class WebSecurityConfiguration {

    @Autowired
    UserMapper userMapper;

    @Bean
    PasswordEncoder passwordEncoder() {

    @Bean
    protected UserDetailsService userDetailsService() {

그리고 그게 다야.

나는이 대답 https://stackoverflow.com/a/53310987/148844에, SSL로 리디렉션하는 Nginx의 구성을 추가하려했지만 작동하지 않았다. 그것은 SSL로 리디렉션 않지만 나는 모든 경로에 대한 404 오류를 얻을 수

그래서 SSL을 강요하고 톰캣에 접근하지만, 봄 부팅 응용 프로그램은 완전히 엉망이다. 그것은 ZIP에서 WAR 파일을 배포하지 않은 경우로합니다.

참조 : https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-proxy.html#java-tomcat-proxy-nginx

해결법

  1. ==============================

    1.나는 그렇게 벗겨지기의 이에 대한 봄 부트를 사용하여 포기하고 Nginx의 구성 옵션에 의존. 그냥 우편 번호를 만들기위한 과도 자세한 보이지만 이것은했다. 탄성 콩 줄기 버그의 추가 문제가 발생했습니다!

    나는 그렇게 벗겨지기의 이에 대한 봄 부트를 사용하여 포기하고 Nginx의 구성 옵션에 의존. 그냥 우편 번호를 만들기위한 과도 자세한 보이지만 이것은했다. 탄성 콩 줄기 버그의 추가 문제가 발생했습니다!

    AWS 탄성 콩 줄기 Tomcat은 .WAR와 함께 작동하지만 .zip으로하지

    우편을 배포 할 때, WAR를 배포 할 것입니다! 그래서 ZIP 두 WAR 파일을 생성하기 위해 해결 방법을 만들어야했습니다. (그냥 하나, 심지어라고 ROOT.war은 작동하지 않을 것입니다.)

    나는 메이븐과 빈 파일을 생성 할 수있는 방법을 찾을 수 없습니다, 그래서 프로젝트의 루트 디렉토리에 빈 empty.war 파일을 생성하고 작업을 제대로 응용 프로그램을 배포에 탄성 콩 줄기를 속이기 위해 ZIP 내부를 번들. 무엇 엉망! 오이의 참!

            <plugin> <!-- To add .ebextensions/ Nginx config for ElasticBeanstalk -->
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                <descriptors>
                  <descriptor>assembly.xml</descriptor>
                </descriptors>
              </configuration>
              <executions>
                <execution>
                  <id>make-assembly</id>
                  <phase>package</phase>
                  <goals>
                    <goal>single</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>           
    
    <assembly 
      xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
      <id>bin</id>
      <baseDirectory>/</baseDirectory>
      <formats>
        <format>zip</format>
      </formats>
      <files>
        <file>
          <source>empty.war</source>
          <outputDirectory/>
        </file>
        <file>
          <source>${project.build.directory}/AppName-0.0.3-SNAPSHOT.war</source>
          <outputDirectory/>
          <destName>ROOT.war</destName>
        </file>
      </files>
    
      <fileSets>
        <fileSet>
          <directory>${project.basedir}</directory>
          <outputDirectory>/.ebextensions/nginx/conf.d/elasticbeanstalk/</outputDirectory>
          <includes>
            <include>force-https.conf</include>
          </includes>
        </fileSet>
      </fileSets>
    </assembly>
    

    그리고 구성 파일은 프로젝트 루트에있다. 나는 그것을 넣어 다른 어디 몰랐어요 - 그것은 소스 코드이 아니다.

    if ($http_x_forwarded_proto = 'http') {
        return 301 https://$host$request_uri;
    }
    

    http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

  2. ==============================

    2.나는 당신이 바람둥이 또는 응용 프로그램 측에 SSL을 사용하지 필요한 단지의 nginx에 SSL을 사용하도록 설정의 걱정하지 않을 필요가 있다고 생각합니다.

    나는 당신이 바람둥이 또는 응용 프로그램 측에 SSL을 사용하지 필요한 단지의 nginx에 SSL을 사용하도록 설정의 걱정하지 않을 필요가 있다고 생각합니다.

    당신의 nginx에 SSL을 종료하고 프록시 / 리버스 프록시 바람둥이을 통과 간단해야한다.

    여기 내 위의 점을 증명하기 위해 참고 문헌의 일부입니다. https://docs.nginx.com/nginx/admin-guide/security-controls/terminating-ssl-http/ https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-load-balancing-with-ssl-termination

    귀하의 경우에는, 당신은 아래 단계 따라야합니다.

    1) 00_application.conf 파일을 생성하고, .ebextensions / nginx를 / conf.d / elasticbeanstalk /를 아래에 배치합니다.

    2) 00_application.conf 파일은 다음과 같은 내용이 있어야합니다.

    server {
        listen          443 ssl;
        server_name     www.example.com;
        ssl_certificate www.example.com.crt;
        #...
        location /{
    //your tomcat port, I'm here assuming the your beanstalkserver tomcat is listing to 8080.
    proxy_pass http://127.0.0.1:8080;
    }
    }
    

    3) 당신이 당신의 도메인으로 http://foo.bar/이있는 경우 즉, 포트 80을 기본 목록과 443로 리디렉션 중지, 당신은 https://foo.bar/,에있는 nginx.conf 파일을 엽니 다 리디렉션합니다. ebextensions / nginx를 / nginx.conf. . 또한, 다음 행을 작성해야합니다, / elasticbeanstalk / * conf의 conf.d 포함;

    server {
    listen 80;
    
    server_name foo.bar;
    return 301 https://foo.bar$request_uri;
    }
    

    나는 O-인증, 인증의 없음, 봄 부팅 V / s의 비 스프링 부팅 응용 프로그램이 여기에 덜 중요하다 생각합니다.

    기본 nginx를 구성 확장 AWS 설명서에 기록 된 노트 및 섹션을 따르세요. 특히에 대해 이야기 메모를 읽고 난 그 질문에 대한 답변이 되었기를 바랍니다. 나는 콩나무에 위의 모든 테스트를하지 않은,하지만 나머지는 EC2,의 nginx 프록시와 바람둥이에 테스트됩니다. 이 시도하고 당신이 코멘트 섹션에서 낳게 될 수있는 특정 문제를 게시 할 수 있습니다.

  3. from https://stackoverflow.com/questions/53289394/how-do-i-force-ssl-on-my-spring-boot-app-that-uses-oauth2-on-aws-elasticbeanstal by cc-by-sa and MIT license