実現したいこと
SpringBootで作成したjarファイルをさくらのVPS上で実行し、
http://○○.com:8080
で表示させることに成功しました。この:8080を消して
http://○○.com
だけでアクセスできるようにしたいです。
OSはUbuntu22.04、ファイアウォール等はiptables/ufwを使用しています。
発生している問題・分からないこと
server.port=80に変更して実行すると、ローカル上ではhttp://localhost だけで表示が可能になるのですが、VPS上では
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-01-31T06:23:40.358+09:00 ERROR 103461 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop' (中略) java.net.BindException: Permission denied at java.base/sun.nio.ch.Net.bind0(Native Method) ~[na:na] at java.base/sun.nio.ch.Net.bind(Net.java:555) ~[na:na] at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337) ~[na:na] at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294) ~[na:na] at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:247) ~[tomcat-embed-core-10.1.17.jar!/:na] at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:202) ~[tomcat-embed-core-10.1.17.jar!/:na] at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1280) ~[tomcat-embed-core-10.1.17.jar!/:na] at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1366) ~[tomcat-embed-core-10.1.17.jar!/:na] at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:635) ~[tomcat-embed-core-10.1.17.jar!/:na] at org.apache.catalina.connector.Connector.startInternal(Connector.java:1043) ~[tomcat-embed-core-10.1.17.jar!/:na] ... 26 common frames omitted
となり、そもそも起動ができません。
ほかに80ポートを使用しているアクティブなプログラムはないと思われます。
$ sudo lsof -i :80 #何も表示されない $ ss -antu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 70 127.0.0.1:33060 0.0.0.0:* tcp LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp ESTAB 0 52 160.16.91.217:22 60.67.220.81:56440 tcp LISTEN 0 128 [::]:22 [::]:*
該当のソースコード
application.properties
1server.port=80
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
共通
sudo ufw default DENY
sudo ufw allow from any to any port 22 proto tcp
sudo ufw allow from any to any port 80 proto tcp
sudo ufw allow from any to any port 8080 proto tcp
sudo ufw limit 22
sudo ufw enable
sudo reboot
ポートフォワード
ポートフォワードのアプローチです。
application.propertiesはserver.port=8080に設定し、
/etc/ufw/sysctl.confに
net.ipv4.ip_forward=1
と記載(アンコメント)、
sudo sysctl -p sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo sh -c "iptables-save > /etc/iptables.rules" sudo vim /etc/network/if-pre-up.d/iptables (iptablesの中身) #!/bin/sh iptables-restore < /etc/iptables.rules (:wq) sudo chmod +x /etc/network/if-pre-up.d/iptables sudo reboot
や、/etc/ufw/before.rules、/etc/ufw/before6.rulesに
*nat :PREROUTING ACCEPT [0:0] -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 -A PREROUTING -p udp --dport 80 -j REDIRECT --to-port 8080
など追記したりしました。
結果としては、
http://○○.com:8080
に普通に接続できただけで、
http://○○.com
だけでは接続できませんでした。
ほかには、sudo java で実行すれば80ポートを使えるかと思ったのですが、javaをsudoで実行するための設定がうまくいかずできなかったり、そもそも80ポートを予約ポートから外すことができればよいと思ったのですが、調べても全く情報が出ず、書き換えることができませんでした。
補足
特になし

回答1件
あなたの回答
tips
プレビュー