You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu云服务器Spring Boot项目公网访问:域名绑定与Nginx配置

问题解决指南:Spring Boot War包公网访问与Nginx配置

一、先解决基础问题:IP无法访问的核心原因

你的应用在localhost能运行但公网IP访问不了,大概率是两个问题:

  • Spring Boot默认只绑定127.0.0.1,仅允许本地访问,需要改成绑定所有网卡(0.0.0.0)
  • 服务器防火墙或云服务商安全组未开放应用端口

先做这两步:

  1. 修改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));
    }
    
  2. 开放端口:
    • Ubuntu防火墙开放8080端口:
      sudo ufw allow 8080/tcp
      sudo ufw reload
      
    • 登录云服务商控制台,在安全组规则中添加入方向,允许8080端口的TCP流量。

完成后,用公网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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:42:34