web-dev-qa-db-fra.com

Application de démarrage du printemps sur le port 80

Je ne parviens pas à démarrer l'application sur le port 80 . J'ai essayé sur un ordinateur local sur IDE et sur le serveur, pas de chance. J'ai vérifié les autres messages similaires et assurez-vous que je lance jar sur le serveur avec la racine.

c'est l'erreur:

 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)
16
5er

Sous Linux, les ports inférieurs à 1024 ne peuvent être ouverts que par root. Le port 80 est donc restreint par défaut.

si vous souhaitez publier votre application sur le port 80, vous devez rediriger la demande du port 80 vers le port sur lequel vous allez exécuter votre port springapp (par exemple 8080).

Solution 1: serveur proxy HTTP

Vous pouvez utiliser le serveur Apache2, qui est autorisé par défaut à travailler sur le port 80 et peut transférer des demandes à Tomcat.

Exemple de configuration pour Debian

Sudo apt-get install Apache2

a2enmod proxy
a2enmod proxy_http   

cd /etc/Apache2/sites-enabled
Sudo nano 000-default.conf

Editer le fichier:

<VIRTUALHOST *:80>

    ProxyPreserveHost On

    # ...

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

Enregistrer le fichier: Ctrl+OENTERCtrl+X

Remarque: pour en savoir plus sur les configurations d'hôte virtuel, vous pouvez consulter le manuel détaillé d'Apache sur le sujet en cliquant sur ici .

Redémarrez Apache2 pour appliquer les modifications:

Sudo service Apache2 restart

ou

Sudo systemctl restart Apache2

Solution 2: redirection de port

Utiliser iptables pour les redirections

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

si vous avez besoin d’utiliser localhost, ajoutez aussi ceci

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

Je viens de rencontrer ce problème. J'exécute l'application Spring Boot sur une instance Ubuntu AWS. 

Java -jar app.jar --server.port=80 me donnera une erreur comme vous l'avez décrit. La solution, ainsi, puisque les ports inférieurs à 1024 ne peuvent être ouverts que par root, ajoutez "Sudo". Sudo Java -jar app.jar --server.port=80

Ce mode de déploiement n'est suggéré que pour les tests locaux pour des raisons de sécurité. Voir les commentaires pour plus de détails.

4
PhoenixPan

Voici les étapes que j'ai suivies sur centos. 

Étape 1 (facultatif): Définir le port

Par défaut, l’application Spring Boot est exécutée sur le port 8080. Si vous souhaitez modifier cela, vous pouvez modifier votre fichier src/main/resources/application.properties.

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

Étape 2: Installez Apache s'il n'est pas déjà installé

Sur Centos 7

Sudo yum install httpd

Étape 3: Modifier votre hôte virtuel

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

Votre configuration devrait ressembler à ceci

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

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

Et redémarrez Apache

Sudo service httpd restart
0
VK321

Dans le cas de l'utilisation de macOs, il est maintenant possible de s'exécuter sur le port 80 sans aucune modification sur macOs Mojave Version 10.14.

0
aydinugur