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

Docker容器8080端口应用连接Ubuntu VPS的Nginx服务问题

问题分析与解决步骤

核心问题定位

你的Nginx配置存在两个关键错误,导致lol.com/api/v10/无法正常访问:

  1. 第二个server块的location /api中,return 301指令会直接强制跳转请求到ihemyi.com:8080,完全跳过了proxy_pass代理逻辑,这是最直接的故障原因。
  2. try_files与proxy_pass的组合逻辑错误,try_files会优先在本地/var/www/html目录查找文件,找不到就直接返回404,不会触发代理转发。

修正后的Nginx配置

针对lol.com的HTTPS服务器块,修改如下:

server {
    root /var/www/html;
    index index.html index.htm;
    server_name lol.com;

    location /api {
        # 移除强制跳转的return指令
        # 末尾添加/,确保请求路径正确转发到Go应用的根路径(若Go应用的/api接口基于根路径开发)
        proxy_pass http://localhost:8080/;
        # 添加代理头,保证Go应用能获取正确的客户端请求信息
        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;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/ihemyi.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ihemyi.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

# 可选:将80端口的HTTP请求重定向到HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name lol.com;
    return 301 https://$host$request_uri;
}

# 默认80端口服务器块(若不需要代理所有根路径请求,可按需调整)
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    index index.html index.htm;
    server_name _;

    # 若要代理所有根路径请求到Go应用,移除try_files或调整逻辑
    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;
    }
}

额外验证步骤

  1. 确认Docker容器状态:
    执行docker ps查看Go应用容器是否正常运行,端口映射0.0.0.0:8080->8080/tcp是否存在;在VPS本地执行curl localhost:8080/api/v10/,确认容器服务可正常响应。

  2. 重载Nginx配置:
    修改配置后,执行sudo nginx -t验证配置语法正确,再执行sudo systemctl reload nginx使配置生效。

  3. 网络连通性优化(若容器名称/IP访问无效):

    • 若Nginx是宿主机安装,localhost:8080应可正常访问(已做-p 8080:8080端口映射);
    • 若要使用容器名称访问,需创建自定义Docker网络:
      docker network create app-network
      # 重启Go容器并加入该网络
      docker run --network app-network --name go-app -p 8080:8080 your-go-image
      # 宿主机Nginx需用容器IP访问,执行`docker inspect go-app | grep "IPAddress"`获取IP后替换proxy_pass中的localhost
      # 若Nginx也在Docker中,直接用容器名称`http://go-app:8080/`即可
      

内容的提问来源于stack exchange,提问作者pythonGo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:05:14