programing

포트 80에서 Spring Boot 응용 프로그램을 실행하려면 어떻게 해야 합니까?

golfzon 2023. 3. 25. 12:06
반응형

포트 80에서 Spring Boot 응용 프로그램을 실행하려면 어떻게 해야 합니까?

포트 80에서 응용 프로그램을 시작할 수 없습니다.

로컬 컴퓨터(IDE 사용 및 로컬 서버 사용)에서 시도했지만 성공하지 못했습니다.

다른 유사한 게시물을 확인하고 root 서버에서 jar를 실행하고 있는지 확인합니다.

에러는 다음과 같습니다.

 till here all ok
...
java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:338)
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:760)
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:472)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:986)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.addConnector(StandardService.java:237)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:186)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:149)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:288)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.andirod.StartApplication.main(StartApplication.java:20)
...
...
...
Exception in thread "main" java.lang.IllegalStateException: Tomcat connector in failed state
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:157)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:288)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.andirod.StartApplication.main(StartApplication.java:20)

1024 미만의 Linux 포트에서는 루트로만 열 수 있으므로 포트 80은 기본적으로 제한됩니다.

80 포트에 앱을 게시하려면 포트 80에서 springapp을 실행할 포트(예: 8080)로 요청을 리디렉션해야 합니다.

해결책 1: HTTP 프록시 서버

기본적으로 포트 80에서 작동하도록 허용된 Apache2 서버를 사용할 수 있으며 Tomcat에 요청을 전송할 수 있습니다.

Debian 설정 예시

sudo apt-get install apache2

a2enmod proxy
a2enmod proxy_http   

cd /etc/apache2/sites-enabled
sudo nano 000-default.conf

파일 편집:

<VIRTUALHOST *:80>

    ProxyPreserveHost On

    # ...

    ProxyPass / http://localhost:8080/
</VIRTUALHOST>

파일 저장: +,O , X+

주의: 가상 호스트 구성에 대한 자세한 내용은 여기를 클릭하여 해당 주제에 대한 자세한 Apache 매뉴얼을 참조하십시오.

Apache2를 재시작하여 변경 내용을 적용합니다.

sudo service apache2 restart

또는

sudo systemctl restart apache2

해결책 2: 포트 포워딩

리다이렉트에 iptables 사용

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

localhost를 사용해야 하는 경우 이 항목도 추가합니다.

iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

사용하다sudo를 클릭합니다.

Ubuntu에서 Spring Boot 어플리케이션을 실행하고 있었는데java -jar app.jar --server.port=80같은 오류를 줬습니다.1024 미만의 포트는 루트 액세스로만 열 수 있으므로 "sudo"를 사용합니다.sudo java -jar app.jar --server.port=80.

이 도입방법은 보안상의 문제로 로컬테스트에만 권장됩니다.상세한 것에 대하여는, 코멘트를 참조해 주세요.

여기 센토스에서 내가 따라한 단계들이 있다.

순서 1(옵션):포트 설정

기본적으로는 포트 8080에서 실행되는 spring boot app은 src/main/resources/application.properties 파일에서 변경할 수 있습니다.

server.port = 8082 // any port above than 1024

순서 2: 아직 설치되지 않은 경우 Apache 설치

Centos 7에서

sudo yum install httpd

순서 3: 가상 호스트 편집

/etc/httpd/conf.d/vhost.conf

설정은 다음과 같습니다.

<VirtualHost *:80>
   ServerName yourdomin.com
   #DocumentRoot /var/www/html

   ProxyPreserveHost On
   ProxyPass / http://localhost:8082/
   ProxyPassReverse / http://localhost:8082/
</VirtualHost>

Apache 재시작

sudo service httpd restart

macOs를 사용하는 경우 macOs 모하비 버전 10.14에서 변경하지 않고 포트 80에서 실행할 수 있게 되었습니다.

도커로 스프링 부츠를 구동하는 경우.

도커 파일:

FROM adoptopenjdk/openjdk13 AS server
ADD /target/AppServer-1.0.jar AppServer-1.0.jar
ENTRYPOINT ["java", "-jar" , "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:9000", "-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", "-Dcom.sun.management.jmxremote.local.only=false", "-Dcom.sun.management.jmxremote.port=1099", "-Dcom.sun.management.jmxremote.rmi.port=1099", "-Djava.rmi.server.hostname=127.0.0.1", "-Dlog4j.configurationFile=log4j2-docker.xml", "AppServer-1.0.jar", "--server.port=80"]

(*) 마지막까지 오른쪽으로 스크롤하여--server.port=80항아리 이름 뒤에 있습니다.

이미지 빌드 및 실행 방법:

docker run -it -p 8080:80 --cap-drop all --cap-add net_bind_service <image-name>:<tag>

(!) 이 프로세스/컨테이너의 모든 기능을 삭제하고 관련 기능만 추가한 점에 유의하시기 바랍니다.net_bind_service소켓을 특권 포트(1024보다 작은 포트 번호)에 바인드합니다.

-Djava.net.preferIPv4Stack=trueVM 션션 vm

JavaMail API to iMail -- java.net 。Socket Exception:권한 거부: 연결

언급URL : https://stackoverflow.com/questions/33703965/how-can-i-run-a-spring-boot-application-on-port-80

반응형