복붙노트

[SPRING] 포트 80에서 실행중인 Spring Boot 앱

SPRING

포트 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)

해결법

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

    1.1024 이하의 리눅스 포트는 루트에서만 열 수 있으므로 포트 80은 기본적으로 제한됩니다

    1024 이하의 리눅스 포트는 루트에서만 열 수 있으므로 포트 80은 기본적으로 제한됩니다

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

    기본적으로 허용되는 Apache2 서버를 사용하여 포트 80에서 작업하고 Tomcat에 요청을 전달할 수 있습니다.

    데비안의 설정 예

    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>
    

    파일 저장 : Ctrl + O, ENTER, Ctrl + X

    참고 : 가상 호스트 구성에 대한 자세한 내용을 보려면 여기를 클릭하여 주제에 대한 자세한 Apache 설명서를 확인하십시오.

    변경 사항을 적용하려면 Apache2를 다시 시작하십시오.

    sudo service apache2 restart
    

    또는

    sudo systemctl restart apache2
    

    리디렉션에 iptables 사용

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

    localhost를 사용해야 할 경우 다음을 추가하십시오.

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

    2.이 문제가 발생했습니다. Ubuntu AWS 인스턴스에서 Spring Boot 응용 프로그램을 실행하고 있습니다.

    이 문제가 발생했습니다. Ubuntu AWS 인스턴스에서 Spring Boot 응용 프로그램을 실행하고 있습니다.

    java -jar app.jar --server.port = 80은 설명 된 것처럼 오류가 발생합니다. 해결책은 1024 이하의 포트는 루트로만 열 수 있기 때문에 "sudo"를 추가하십시오. sudo java -jar app.jar --server.port = 80.

    이 배포 방법은 보안 문제로 인해 로컬 테스트에만 권장됩니다. 자세한 내용은 의견보기

  3. ==============================

    3.다음은 내가 centos를 따라 갔던 단계들입니다.

    다음은 내가 centos를 따라 갔던 단계들입니다.

    1 단계 (선택 사항) : 포트 설정

    기본적으로 포트 8080에서 실행되는 스프링 부트 응용 프로그램을 변경하려는 경우 src / main / resources / application.properties 파일에서 변경할 수 있습니다

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

    2 단계 : 이미 설치되지 않은 경우 아파치 설치

    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>
    

    그리고 아파치를 다시 시작하십시오.

    sudo service httpd restart
    
  4. ==============================

    4.VM 옵션에 -Djava.net.preferIPv4Stack = true를 추가하십시오.

    VM 옵션에 -Djava.net.preferIPv4Stack = true를 추가하십시오.

    JavaMail API에서 iMail로 - java.net.SocketException : 권한이 거부되었습니다 : 연결

  5. from https://stackoverflow.com/questions/33703965/spring-boot-running-app-on-port-80 by cc-by-sa and MIT license