포트 80에서 init.d 서비스로 Springboot를 시작할 수 없습니다

포트 80에서 init.d 서비스로 Springboot를 시작할 수 없습니다

나는 공식 가이드를 따라왔다Springboot를 init.d 서비스로 설정Amazon Linux ec2 인스턴스에서. 이것을 설정하기 전에 다음과 같은 문제가 발생했습니다.포트 80에서 서버를 시작할 수 없습니다항아리를 수동으로 실행할 때. 해결책은 루트로 jar를 실행하는 것이었고 계속 진행했습니다.

이제 프로젝트의 gradle.build에 필요한 변경 작업을 완료하고 실행 가능한 jar에 대한 심볼릭 링크를 만들었으므로 다음을 수행할 수 있습니다.

sudo service myapp start

프로세스가 제대로 작동하고 있다는 징후가 나타납니다. 그러나 프로세스는 몇 초 후에 종료됩니다. /var/log/myapp.log에서 로그인을 확인하면 다음이 포함됩니다.같은 오류이전에 루트가 아닌 사용자로 서버를 수동으로 시작하려고 할 때 이런 문제가 발생했습니다.

2018-04-13 13:01:31.793  INFO 23583 --- [           main] 
o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2018-04-13 13:01:31.816  INFO 23583 --- [           main] 
ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run 
your application with 'debug' enabled.
2018-04-13 13:01:31.817 ERROR 23583 --- [           main] 
o.s.b.d.LoggingFailureAnalysisReporter   :

***************************
APPLICATION FAILED TO START
***************************

Description:

The Tomcat connector configured to listen on port 80 failed to start. The 
port may already be in use or the connector may be misconfigured.

Action:

Verify the connector's configuration, identify and stop any process that's 
listening on port 80, or configure this application to listen on another 
port.

2018-04-13 13:01:31.818  INFO 23583 --- [           main] 
ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4c3e4790: startup date [Fri Apr 13 13:01:26 UTC 2018]; root of context hierarchy
2018-04-13 13:01:31.820  INFO 23583 --- [           main] 
o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown

따라서 루트로 서비스를 시작하면 jar을 수동으로 실행하는 것과 동일한 권한이 없습니다.

Tl;dr: 포트 80(sudo 필요)에서 수신 대기하는 init.d 서비스로 Springboot를 시작하는 방법은 무엇입니까?

테스트 능력 이상으로 Linux를 다루는 것은 이번이 처음이므로 경험이 부족하기 때문에 솔루션이 꽤 분명할 것으로 예상했습니다.

답변1

다음 사실을 이해해야 합니다.

  • 1024 미만의 포트는 루트 사용자만 열 수 있습니다.

  • 루트 권한으로 Spring Boot 웹 애플리케이션을 실행하는 것은 나쁜 생각입니다. 왜냐하면 애플리케이션이 손상되면 공격자가 루트 권한을 얻게 되기 때문입니다.

한 가지 해결책은 httpd Apache 서버를 역방향 프록시로 실행하고 포트 80의 요청을 로컬 호스트의 1024보다 높은 포트로 리디렉션하는 것입니다. 이를 위해 다음을 사용할 수 있습니다.ProxyPass아파치 명령.

다음은 기술에 관한 기사입니다.Spring Boot 내장 Tomcat의 역방향 프록시로 Apache 사용

Apache의 주요 구성은 다음과 같습니다.

ProxyPreserveHost on
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

답변2

이것은 단지 경험 프로젝트일 뿐이므로 안전한 답을 찾고 있는 것은 아닙니다.

내가 찾은 해결책은 심볼릭 링크의 소유자를 루트로 설정하는 것이었습니다.

sudo chown root myapp

관련 정보