Ubuntu云服务器Spring Boot项目公网访问:域名绑定与Nginx配置
问题解决指南:Spring Boot War包公网访问与Nginx配置
一、先解决基础问题:IP无法访问的核心原因
你的应用在localhost能运行但公网IP访问不了,大概率是两个问题:
- Spring Boot默认只绑定
127.0.0.1,仅允许本地访问,需要改成绑定所有网卡(0.0.0.0) - 服务器防火墙或云服务商安全组未开放应用端口
先做这两步:
- 修改Spring Boot绑定地址:
因为你没有外部配置文件,可通过启动参数指定:
或者在代码内的配置类中添加:java -jar NameProject.war --server.address=0.0.0.0 --server.port=8080@Value("${server.address:0.0.0.0}") private String serverAddress; @Bean public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> webServerFactoryCustomizer() { return factory -> factory.setAddress(InetAddress.getByName(serverAddress)); } - 开放端口:
- Ubuntu防火墙开放8080端口:
sudo ufw allow 8080/tcp sudo ufw reload - 登录云服务商控制台,在安全组规则中添加
入方向,允许8080端口的TCP流量。
- Ubuntu防火墙开放8080端口:
完成后,用公网IP+端口(如http://xxx.xxx.xxx.xxx:8080)测试,应该能访问。
二、绑定域名并实现公网访问
1. 域名解析配置
在你的域名服务商后台,添加A记录:
- 主机记录:留空(或填
www) - 记录值:你的云服务器公网IP
- TTL:选默认值即可
等待解析生效(一般10分钟内)。
2. 去掉端口访问(可选)
如果不想访问时带端口,需要用反向代理(如Nginx)将80端口转发到应用的8080端口,或者让应用直接监听80端口(不推荐生产环境)。
三、正确安装配置Nginx反向代理
先彻底清理之前的坏配置,重新部署:
1. 彻底卸载旧Nginx
sudo apt purge nginx nginx-core nginx-full nginx-light -y sudo apt autoremove -y sudo rm -rf /etc/nginx /var/log/nginx /var/lib/nginx
2. 重新安装Nginx
sudo apt update sudo apt install nginx -y
3. 配置反向代理
创建应用专属配置文件:
sudo nano /etc/nginx/sites-available/nameproject
写入以下配置(替换yourdomain.com为你的实际域名):
server { listen 80; server_name yourdomain.com www.yourdomain.com; location / { proxy_pass http://localhost:8080; # 传递请求头,保证应用能正确获取客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
4. 启用配置并验证
# 启用配置 sudo ln -s /etc/nginx/sites-available/nameproject /etc/nginx/sites-enabled/ # 删除默认配置(可选) sudo rm /etc/nginx/sites-enabled/default # 测试配置语法 sudo nginx -t # 重启Nginx生效 sudo systemctl restart nginx
5. 开放80端口
sudo ufw allow 80/tcp sudo ufw reload
现在访问http://yourdomain.com即可直接进入你的Spring Boot应用。
四、无需Nginx的替代方案
1. 直接让Spring Boot监听80端口(简易方案)
80端口是特权端口,需要给Java授权:
sudo setcap 'cap_net_bind_service=+ep' /usr/lib/jvm/java-17-openjdk-amd64/bin/java
然后启动应用时指定端口:
java -jar NameProject.war --server.address=0.0.0.0 --server.port=80
缺点:Spring Boot不是专业Web服务器,高并发场景下性能不如Nginx,不推荐生产环境使用。
2. 用独立Tomcat部署War包
- 安装Tomcat:
sudo apt install tomcat9 -y - 将你的
NameProject.war复制到Tomcat的webapps目录:sudo cp NameProject.war /var/lib/tomcat9/webapps/ - 修改Tomcat配置
/etc/tomcat9/server.xml,确保绑定所有网卡:
将<Connector>标签的address属性改为0.0.0.0:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" address="0.0.0.0" redirectPort="8443"/> - 重启Tomcat:
sudo systemctl restart tomcat9
开放8080端口后,即可用公网IP/域名+端口访问。
3. 使用Caddy反向代理(更简单的HTTPS方案)
Caddy支持自动申请SSL证书,配置极简:
- 安装Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy -y - 修改Caddy配置
/etc/caddy/Caddyfile:yourdomain.com { reverse_proxy localhost:8080 } - 重启Caddy:
sudo systemctl restart caddy
Caddy会自动申请Let's Encrypt证书,访问https://yourdomain.com即可,无需手动配置HTTPS。
内容的提问来源于stack exchange,提问作者HimselfProducer
相关产品推荐
相关产品推荐

