无敌菜鸡 2024-04-25 09:38 采纳率: 71.4%
浏览 21
已结题

nginx配置同IP端口,根据访问路径志向不同项目出现的问题

我想要配置nginx实现,同IP端口监听,根据访问路径不同,进入不同的项目,其中一个是web项目(a),一个是纯接口项目(b),没有前台,根据网上其他帖子设置,没有成功,访问web(a)项目会报错:项目路径/webep/core/is/js文件 isnet::ERR CONNECTION TIMED OUT这类报错,都说是静态访问原因,配置如下:

server {
        listen       8808;
        server_name  localhost;

        location /a/ {
            proxy_pass http://localhost:8081/a/;
            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 /b/ {
            proxy_pass http://localhost:7001/b/;
            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   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }


但我这配置我看也有加载路径,我个人理解应该是localhost:8081/a/项目下相应路径去找,
接口(b)项目直接就是访问不上,postman访问就是连接不上,在服务器本地访问还能访问到。
第一次配置nginx,有不对的地方,希望各位能指点一二,先感谢了

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 09:38
    关注

    引自免费微信小程序:皆我百晓生

    看起来您的Nginx配置有一些小问题。为了确保Web项目(a)和API项目(b)都能正常工作,我们需要对配置进行一些调整。这里有一个修改后的配置示例,您可以尝试一下:

    server {
        listen       8808;
        server_name  localhost;
    
        # Web项目(a)
        location /a/ {
            proxy_pass http://localhost:8081/;
            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 ~* \.(jpg|jpeg|gif|png|css|js|ico|html)$ {
                proxy_pass http://localhost:8081/a/$uri;
            }
        }
    
        # API项目(b)
        location /b/ {
            proxy_pass http://localhost:7001/;
            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;
        }
    
        # 如果访问的不是/a/或/b/下的内容,可以将请求转发到一个默认页面
        location / {
            return 301 /a/index.html;  # 或者您期望的默认页面
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    

    在这个配置中,我们做了以下几个更改:

    1. 对于Web项目(a),我们只在根路径设置了一个proxy_pass,然后添加了一个额外的location块来处理静态资源。这样做的原因是,当用户访问 /a/core/is/js 这样的静态资源时,Nginx 可以正确地代理到 http://localhost:8081/a/core/is/js
    2. 对于API项目(b),我们也只在根路径设置了proxy_pass,这样所有的请求都会被转发到 http://localhost:7001/,无论它们是什么。
    3. 我们还添加了一个新的location块,当用户访问的路径既不是 /a/ 开头也不是 /b/ 开头时,将其重定向到 /a/index.html。您可以根据实际需求替换这个重定向目标。

    请注意,这个配置可能还需要根据您的实际应用结构进行微调。保存并重启Nginx服务后,请检查是否解决了问题。如果还有任何问题,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 4月25日

悬赏问题

  • ¥15 bat批处理,关于数据复制问题
  • ¥50 同步两个不同结果的array中某些属性
  • ¥15 悬赏15远程操控解决问题
  • ¥15 CST复制的模型无法单独修改参数?
  • ¥15 前端页面想做个定时任务,但是使用requestAnimationFrame,setinterval和settimeout都不行
  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)