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)
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).
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+O, ENTER, Ctrl+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
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
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.
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
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.