나는 공식 가이드를 따라왔다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