wvp-GB28181服务器网页报错调试

wvp-GB28181服务器网页报错

复制代码
请求 URL
http://192.168.6.233:8080/api/server/system/info
请求方法
GET
状态代码
404 Not Found
远程地址
192.168.6.233:8080
引用站点策略
strict-origin-when-cross-origin

定位很清楚:前端在请求

GET /api/server/system/info

192.168.6.233:8080 返回 404。

这就是你页面报错的直接原因(后面的 reading 'data' 是前端未判空的连带错误)

这是 前端网关/代理路径不匹配 或 后端版本接口变更:前端代码还在调 /api/server/system/info

你当前后端(WVP-Pro)不提供这个路径(或被代理到错误目标)


解决办法

  1. 先看 nginx 容器名

    sudo docker ps --format 'table {{.Names}}\t{{.Ports}}' | grep -i nginx

你前面是 docker-polaris-nginx-1,下面按这个名写。

  1. 在容器里查 location /api

    sudo docker exec -it docker-polaris-nginx-1 sh -c "grep -RIn 'location /api' /etc/nginx /usr/local/nginx/conf /etc/nginx/conf.d 2>/dev/null"

  2. 把命中的配置文件完整打印出来

假设命中 /etc/nginx/conf.d/default.conf,执行:

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "sed -n '1,260p' /etc/nginx/conf.d/default.conf"

(把路径换成你第2步查到的实际文件)

  1. 同时看 Nginx 实际生效配置

    sudo docker exec -it docker-polaris-nginx-1 nginx -T 2>/dev/null | grep -n 'location /api'

打印输出:

复制代码
/etc/nginx /usr/local/nginx/conf /etc/nginx/conf.d 2>/dev/null"

这说明 nginx 配置里没有 location /api,所以你访问
http://192.168.6.233:8080/api/server/system/info 会直接落到静态站点,返回 404

查找主配置文件

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "nginx -T 2>/dev/null | head -120"

输出打印:

复制代码
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ sudo docker exec -it docker-polaris-nginx-1 sh -c "nginx -T 2>/dev/null | head -120"
# configuration file /etc/nginx/nginx.conf:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

# configuration file /etc/nginx/mime.types:

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;

    text/mathml                                      mml;
    text/plain                                       txt;
    text/vnd.sun.j2me.app-descriptor                 jad;
    text/vnd.wap.wml                                 wml;
    text/x-component                                 htc;

    image/avif                                       avif;
    image/png                                        png;
    image/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    font/woff                                        woff;
    font/woff2                                       woff2;

    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
    application/msword                               doc;
    application/pdf                                  pdf;
    application/postscript                           ps eps ai;
    application/rtf                                  rtf;
    application/vnd.apple.mpegurl                    m3u8;
    application/vnd.google-earth.kml+xml             kml;
    application/vnd.google-earth.kmz                 kmz;
    application/vnd.ms-excel                         xls;
    application/vnd.ms-fontobject                    eot;
    application/vnd.ms-powerpoint                    ppt;
    application/vnd.oasis.opendocument.graphics      odg;
    application/vnd.oasis.opendocument.presentation  odp;
    application/vnd.oasis.opendocument.spreadsheet   ods;
    application/vnd.oasis.opendocument.text          odt;
    application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    application/vnd.wap.wmlc                         wmlc;
    application/wasm                                 wasm;
    application/x-7z-compressed                      7z;
    application/x-cocoa                              cco;
    application/x-java-archive-diff                  jardiff;
    application/x-java-jnlp-file                     jnlp;
    application/x-makeself                           run;
    application/x-perl                               pl pm;
    application/x-pilot                              prc pdb;
    application/x-rar-compressed                     rar;
    application/x-redhat-package-manager             rpm;
    application/x-sea                                sea;
    application/x-shockwave-flash                    swf;
    application/x-stuffit                            sit;
    application/x-tcl                                tcl tk;
    application/x-x509-ca-cert                       der pem crt;
    application/x-xpinstall                          xpi;
    application/xhtml+xml                            xhtml;
    application/xspf+xml                             xspf;
    application/zip                                  zip;

    application/octet-stream                         bin exe dll;
    application/octet-stream                         deb;
    application/octet-stream                         dmg;
    application/octet-stream                         iso img;
    application/octet-stream                         msi msp msm;

    audio/midi                                       mid midi kar;
    audio/mpeg                                       mp3;
    audio/ogg                                        ogg;
    audio/x-m4a                                      m4a;
    audio/x-realaudio                                ra;
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$

这里只看到 nginx.conf 头部,还没看到真正的 server 配置(在 /etc/nginx/conf.d/*.conf)。

下一步直接把它打印出来并加 /api 代理。

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "ls -l /etc/nginx/conf.d && sed -n '1,260p' /etc/nginx/conf.d/default.conf"

面命令会给 default.conf 先备份,再在 server内插入 location /api/ 块。

复制代码
sudo docker exec -i docker-polaris-nginx-1 sh <<'SH'
set -e
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

awk '
BEGIN{inserted=0}
/^[ \t]*server[ \t]*\{/ && inserted==0 {
  print
  print "    location /api/ {"
  print "        proxy_pass http://docker-polaris-wvp-1:8080;"
  print "        proxy_http_version 1.1;"
  print "        proxy_set_header Host $host;"
  print "        proxy_set_header X-Real-IP $remote_addr;"
  print "        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;"
  print "        proxy_set_header X-Forwarded-Proto $scheme;"
  print "    }"
  inserted=1
  next
}
{print}
' /etc/nginx/conf.d/default.conf.bak > /etc/nginx/conf.d/default.conf

nginx -t
nginx -s reload
SH

curl -i "http://192.168.6.233:8080/api/server/system/info"

输出结果还是返回404 NOT FOUND

请求没有命中你刚改的这个 server 块(或被另一个 server 覆盖了)。

因为如果命中了 /api 代理但后端不存在,通常会是后端 JSON 404;如果 upstream 不通是 502,不会是 nginx 静态 404 页。当前目录里还有一个 /etc/nginx/conf.d/nginx.conf,很可能就是它在接管 8080。

先确认实际生效的 server 顺序

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "nginx -T 2>/dev/null | sed -n '/server {/,/}/p' | head -220"

再直接看另一个文件:

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "sed -n '1,260p' /etc/nginx/conf.d/nginx.conf"

最后再测试:

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "nginx -t && nginx -s reload"

/etc/nginx/conf.d/nginx.conf 内容贴出来

复制代码
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ sudo docker exec -it docker-polaris-nginx-1 sh -c "nginx -T 2>/dev/null | sed -n '/server {/,/}/p' | head -220"
server {
    listen       80;
    listen       [::]:80;
    server_name  localhost;

    location /api/ {
        proxy_pass http://docker-polaris-wvp-1:8080;
        proxy_http_version 1.1;
        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;
    }
server {
        listen 8080;
        server_name localhost;

    location / {
                root /opt/dist;
        index  index.html index.htm;
    }
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$

可以看出:外部访问的是 192.168.6.233:8080,而加代理的是 listen 80 的 server。

真正对外生效的是 listen 8080 这段(root /opt/dist 那个),所以 /api 必须加在 8080 server 里。

先看完整文件

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "sed -n '1,260p' /etc/nginx/conf.d/nginx.conf"

/etc/nginx/conf.d/nginx.conf 改成下面可用版(保留 8080 站点,并加 /api 反代):

复制代码
sudo docker exec -i docker-polaris-nginx-1 sh <<'SH'
cat > /etc/nginx/conf.d/nginx.conf <<'EOF'
server {
    listen 8080 default_server;
    server_name _;

    location /api/ {
        proxy_pass http://172.18.0.5:8080;
        proxy_http_version 1.1;
        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;
    }

    location / {
        root /opt/dist;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}
EOF

nginx -t && nginx -s reload
SH

验证:

复制代码
curl -i "http://192.168.6.233:8080/api/server/system/info"

输出:

复制代码
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ sudo docker exec -it docker-polaris-nginx-1 sh -c "sed -n '1,260p' /etc/nginx/conf.d/nginx.conf"
server {
        listen 8080;
        server_name localhost;

    location / {
                root /opt/dist;
        index  index.html index.htm;
    }
        location /record_proxy/{
                 proxy_set_header Host $http_host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header REMOTE-HOST $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 proxy_pass http://polaris-wvp:18978/;
        }
        location  /api/ {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://polaris-wvp:18978;


        # 从环境变量获取原始主机地址(x.x.x.x)
        set $original_host 127.0.0.1;

        # 执行字符串替换
        # 将媒体资源文件替换为Nginx输出的相对地址
        sub_filter "http://$original_host/index/api/downloadFile" "mediaserver/api/downloadFile";
        sub_filter "http://$original_host:80/index/api/downloadFile" "mediaserver/api/downloadFile";
        sub_filter "https://$original_host/index/api/downloadFile" "mediaserver/api/downloadFile";
        sub_filter "https://$original_host:443/index/api/downloadFile" "mediaserver/api/downloadFile";
        sub_filter "http://$original_host/mp4_record" "mp4_record";
        sub_filter "http://$original_host:80/mp4_record" "mp4_record";
        sub_filter "https://$original_host/mp4_record" "mp4_record";
        sub_filter "https://$original_host:443/mp4_record" "mp4_record";

        # 设置为off表示替换所有匹配项,而不仅仅是第一个
        sub_filter_once off;

        # 确保响应被正确处理
        sub_filter_types application/json;  # 只对JSON响应进行处理
    }

    # 将mediaserver/record转发到目标地址
    location /mediaserver/api/downloadFile {
        # 目标服务器地址
        proxy_pass http://polaris-media:80/index/api/downloadFile;

        # 以下是常用的反向代理设置
        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;

        # 超时设置,根据需要调整
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }

    # 仅允许代理/rtp/开头的路径
    location ^~ /rtp/ {
        # 代理到ZLMediakit服务
        proxy_pass http://polaris-media:80;

        # 基础HTTP代理配置
        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;

        # WebSocket支持配置
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 超时设置,根据实际需求调整
        proxy_connect_timeout 60s;
        proxy_read_timeout 3600s;
        proxy_send_timeout 60s;
    }

    # 仅允许代理/rtp/开头的路径
    location ^~ /mp4_record/ {
        # 代理到ZLMediakit服务
        proxy_pass http://polaris-media:80;

        # 基础HTTP代理配置
        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;

        # WebSocket支持配置
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 超时设置,根据实际需求调整
        proxy_connect_timeout 60s;
        proxy_read_timeout 3600s;
        proxy_send_timeout 60s;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ sudo docker exec -i docker-polaris-nginx-1 sh <<'SH'
nginx/conf.d/nginx.conf <<'EOF'
> cat > /etc/nginx/conf.d/nginx.conf <<'EOF'
> server {
>     listen 8080 default_server;
>     server_name _;
>
>     location /api/ {
>         proxy_pass http://172.18.0.5:8080;
>         proxy_http_version 1.1;
>         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;
>     }
>
>     location / {
>         root /opt/dist;
>         index index.html index.htm;
>         try_files $uri $uri/ /index.html;
>     }
> }
> EOF
&& nginx -s relo>
> nginx -t && nginx -s reload
> SH
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ curl -i "http://192.168.6.233:8080/api/server/system/info"
HTTP/1.1 401
Server: nginx/1.29.8
Date: Sat, 25 Apr 2026 08:53:04 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 45
Connection: keep-alive
Set-Cookie: JSESSIONID=7C48D39B64CD00987F7E204F2730B0DB; Path=/; HttpOnly
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY

{"code":401,"msg":"请登录后重新请求"}wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$

这个结果说明代理已经修好了:

之前:nginx HTML 404 Not Found

现在:后端 JSON 401 请登录后重新请求

这正是预期变化,表示 /api/* 已经正确转发到 WVP 后端。

你现在的状态,前端报错里的 404 根因已消除,剩下是鉴权:页面需要先登录,或接口调用时带上会话/token

===========================================

接下来对比前后端路径

直连后端(容器内IP)

复制代码
curl -i "http://172.18.0.5:8080/api/user/login?username=admin&password=e10adc3949ba59abbe56e057f20f883e"

走前端nginx代理

复制代码
curl -i "http://127.0.0.1:8080/api/user/login?username=admin&password=e10adc3949ba59abbe56e057f20f883e"

输出为:

复制代码
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ curl -i "http://172.18.0.5:8080/api/user/login?username=admin&password=e10adc3949ba59abbe56e057f20f883e"
HTTP/1.1 200
Set-Cookie: JSESSIONID=2113709E979DDACE66E1FB2EBC5D92CC; Path=/; HttpOnly
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
access-token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0.eyJqdGkiOiJRZ0pXUUJRZURzLXZCLUJrYmc3WTFBIiwiaWF0IjoxNzc3MTA3Njc2LCJleHAiOjE3NzcxMTEyNzYsIm5iZiI6MTc3NzEwNzY3Niwic3ViIjoibG9naW4iLCJhdWQiOiJBdWRpZW5jZSIsInVzZXJOYW1lIjoiYWRtaW4ifQ.0iJ6b_DNLXhgc9SUSkEnuRicHctc-g-vD9qFlBIS_0Bdyu3VZm93XT2E_Dmi_P4g4ov_C07AIQbxdvLAHQIyGcZDoyoYrktlE5cvNPGZe1WR_lgHUHHmC_j7M1QSypkClaJXV1WoqUz63Wuuxqf2gmuJg0XL5n2zFiiZaJlY3j4f2qPEW1sDoZarUnBmO0fTIiTgJS6D3KhyEG6m-3yo_N3OaKsr2CRBrHNBaP8urUTiMCDUKcUpPZo3CBGITiRElnLABBLdALw0nncNlF4wJ8LOltI1xt_4O2FOHsbmfmRZoAaVRvuWSsgFXDQDvIDIQGdAXYIv8qomM-HgI9bpPFraF0wwZPHrm2ibeZX5ERv_nt_lIJvoTBT0vRnV6UAaycRuDgU-E5xlYBnuXacVob2_Cp1kOCCyELJr4YAtWtkFknJv6lyl7SFRnUEKmz78U4EVzESfJerjn3F3m06ThgcJq9el1jWy14LwFtQkblTUm_j1pGTlHSJiyO-vHs0WTDQArMf5CMS-fu76rVYJPd_gVoLhVk14HvfbhtB2A_EyQ7y9g-lmaVbNwoQvYsZ7wifN4u861kno4hB17yegE5ZU7eUNC7aDZc_eVw7SvR4Uixy349VZv_TPgraUZ0ZssDFkt6RDbLFoeR_HQQOIS_X5k9zIC_jOc7P68LlEcoY
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 25 Apr 2026 09:01:16 GMT

{"code":0,"msg":"成功","data":{"accessToken":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjNlNzk2NDZjNGRiYzQwODM4M2E5ZWVkMDlmMmI4NWFlIn0.eyJqdGkiOiJRZ0pXUUJRZURzLXZCLUJrYmc3WTFBIiwiaWF0IjoxNzc3MTA3Njc2LCJleHAiOjE3NzcxMTEyNzYsIm5iZiI6MTc3NzEwNzY3Niwic3ViIjoibG9naW4iLCJhdWQiOiJBdWRpZW5jZSIsInVzZXJOYW1lIjoiYWRtaW4ifQ.0iJ6b_DNLXhgc9SUSkEnuRicHctc-g-vD9qFlBIS_0Bdyu3VZm93XT2E_Dmi_P4g4ov_C07AIQbxdvLAHQIyGcZDoyoYrktlE5cvNPGZe1WR_lgHUHHmC_j7M1QSypkClaJXV1WoqUz63Wuuxqf2gmuJg0XL5n2zFiiZaJlY3j4f2qPEW1sDoZarUnBmO0fTIiTgJS6D3KhyEG6m-3yo_N3OaKsr2CRBrHNBaP8urUTiMCDUKcUpPZo3CBGITiRElnLABBLdALw0nncNlF4wJ8LOltI1xt_4O2FOHsbmfmRZoAaVRvuWSsgFXDQDvIDIQGdAXYIv8qomM-HgI9bpPFraF0wwZPHrm2ibeZX5ERv_nt_lIJvoTBT0vRnV6UAaycRuDgU-E5xlYBnuXacVob2_Cp1kOCCyELJr4YAtWtkFknJv6lyl7SFRnUEKmz78U4EVzESfJerjn3F3m06ThgcJq9el1jWy14LwFtQkblTUm_j1pGTlHSJiyO-vHs0WTDQArMf5CMS-fu76rVYJPd_gVoLhVk14HvfbhtB2A_EyQ7y9g-lmaVbNwoQvYsZ7wifN4u861kno4hB17yegE5ZU7eUNC7aDZc_eVw7SvR4Uixy349VZv_TPgraUZ0ZssDFkt6RDbLFoeR_HQQOIS_X5k9zIC_jOc7P68LlEcoY","serverId":"000000","enabled":true,"id":1,"password":null,"role":{"id":1,"name":"admin","authority":"0","createTime":"2021-04-13 14:14:57","updateTime":"2021-04-13 14:14:57"},"username":"admin","pushKey":"3e80d1762a324d5b0ff636e0bd16f1e3","authorities":null,"accountNonExpired":true,"accountNonLocked":true,"credentialsNonExpired":true}}wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ curl -i "http://127.0.0.1:8080/api/user/login?username=admin&password=e10adc3949ba59abbe56e057f20f883e"
HTTP/1.1 404 Not Found
Server: nginx/1.29.8
Date: Sat, 25 Apr 2026 09:01:23 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.29.8</center>
</body>
</html>
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$

这组对比已经把问题钉死了:

172.18.0.5:8080 直连后端 200

127.0.0.1:8080 走 nginx 404

不是账号问题,是 nginx 上 8080 的生效 server 块没有命中 /api 代理(或命中了另一个 8080 server)。

确认哪个 server 在处理 8080

复制代码
sudo docker exec -it docker-polaris-nginx-1 sh -c "nginx -T 2>/dev/null | grep -nE 'server \\{|listen 8080|server_name|location /api/'"

输出证实又两个server

复制代码
wudaqing@admin:/mnt/shared/wvp-GB28181-pro/docker$ sudo docker exec -it docker-polaris-nginx-1 sh -c "nginx -T 2>/dev/null | grep -nE 'server \\{|listen 8080|server_name|location /api/'"
137:server {
140:    server_name  localhost;
184:server {
185:    listen 8080;
186:    server_name localhost;

直接修复(最短路径),把 8080 的配置文件改成唯一默认 server,并明确包含 /api/ 代理;同时把另一个 conf 先挪走避免冲突。

复制代码
sudo docker exec -i docker-polaris-nginx-1 sh <<'SH'
set -e

# 备份
cp /etc/nginx/conf.d/nginx.conf /etc/nginx/conf.d/nginx.conf.bak.$(date +%s) 2>/dev/null || true
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak.$(date +%s) 2>/dev/null || true

# 禁用 default.conf,避免额外 server 抢流量
[ -f /etc/nginx/conf.d/default.conf ] && mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled || true

# 写入唯一 8080 server
cat > /etc/nginx/conf.d/nginx.conf <<'EOF'
server {
    listen 8080 default_server;
    server_name _;

    location /api/ {
        proxy_pass http://172.18.0.5:8080;
        proxy_http_version 1.1;
        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;
    }

    location / {
        root /opt/dist;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}
EOF

nginx -t
nginx -s reload
SH

验证后:

复制代码
curl -i "http://127.0.0.1:8080/api/user/login?username=admin&password=e10adc3949ba59abbe56e057f20f883e"

网页可以登录,不再报错

相关推荐
byte轻骑兵2 小时前
【LE Audio】BASS精讲[4]: 控制点解析,广播接收指令交互全流程
人工智能·音视频·语音识别·le audio·低功耗音频
ai产品老杨2 小时前
告别协议碎片化:基于 GB28181 与 RTSP 的统一 AI 视频中台架构实现(附 Docker 源码交付方案)
人工智能·架构·音视频
code 小楊4 小时前
最新快乐马视频模型深度解析:特性、对比测试与完整使用教程
大数据·人工智能·音视频
ai产品老杨4 小时前
深度解析:如何构建兼容 X86/ARM 与 GPU/NPU 的异构 AI 视频中台架构?(含 GB28181/RTSP/Docker/源码交付方案)
arm开发·人工智能·音视频
jiejiejiejie_1 天前
Flutter for OpenHarmony 视频播放与本地身份验证萌系实战总结
flutter·华为·音视频·harmonyos
y小花1 天前
安卓音频子系统之AudioFlinger
音视频
拾-光1 天前
LTX-Video 2.3 实战:用图片生成视频,消费级显卡也能跑的开源 I2V 模型(GPT Image 2)
java·人工智能·python·深度学习·算法·机器学习·音视频
巴德鸟1 天前
DaVinci 常用技巧 关键帧 自动字幕 追踪 音频 冻结帧 快捷键 多轨道字幕 扩充边缘
android·编辑器·音视频·视频·davinci·davin
上善若水20201 天前
【定制开发】ENC设备视频矩阵功能介绍
线性代数·矩阵·音视频