请教一个 nginx 的端口转发问题

2021-08-02 15:03:29 +08:00
 weichengwu

前言

本人是一个不懂后端的 iOS 开发,对 nginx 略知一二,知道它是做反向代理的,知道在哪改 nginx.conf,知道改完怎么 reload

问题描述

现有一太内网机器,领导帮我配置了一个可外网访问的域名,并用 nginx 配置了一个 ssl 证书,端口是 8088 ;

我用 docker 部署了一个服务,暴露的端口是 3000 。

现在希望能将 3000 端口映射到 8088 端口的一个路径下,比如 https://xxx.com:8088/yyy,从而实现外网能访问 3000 端口的目的。

网络上搜索了几个结果,但都没有效果,现在的配置:

location /yyy/ {
    proxy_set_header        Host $http_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_pass http://0.0.0.0:3000/;
}

现在能实现的效果是能进首页,但是无法加载 css/js 等资源文件,提示 404,但是我不知道该怎么改了。

3196 次点击
所在节点    NGINX
29 条回复
XiaoxiaoPu
2021-08-02 15:13:34 +08:00
proxy_pass 这一行,去掉 ";" 前面的 "/"
AoEiuV020
2021-08-02 15:24:59 +08:00
仅供参考,我自己配置过同样作用的,

location ^~/clash/ {
proxy_pass http://127.0.0.1:9090/;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
dablwow
2021-08-02 15:32:01 +08:00
应该不是斜杠的问题,楼主发一下报错的 css/js 的请求路径吧,有可能是写死的,等于在读 8088 的资源(实际不存在)
weichengwu
2021-08-02 15:38:50 +08:00
@XiaoxiaoPu #1 "/" 去掉之后首页都打不开
weichengwu
2021-08-02 15:43:10 +08:00
@AoEiuV020 #2 也不行
weichengwu
2021-08-02 15:43:51 +08:00
@dablwow #3 "GET /assets/application-1b7c2119d0cc0be69a0e6705ee19d5bf859cc64e949a0faf412286a8a53db169.js HTTP/1.1" 404 153 "https://xx x.com:8088/yyy/"
AoEiuV020
2021-08-02 15:54:04 +08:00
@weichengwu 基本上确定是 html 问题,你希望整个网站都在 /yyy/下,但 html 请求了绝对路径的 js,要改成相对路径才行,
XiaoxiaoPu
2021-08-02 16:19:27 +08:00
抱歉看错了,没注意到 location 里有 /yyy/

错误原因应该是如 AoEiuV020 所说。
defunct9
2021-08-02 16:21:19 +08:00
开 ssh,让我上去看看
weichengwu
2021-08-02 16:26:46 +08:00
@AoEiuV020 #7 感谢,那我估计要改一下服务的源码了
weichengwu
2021-08-02 16:27:39 +08:00
@defunct9 #9 这个不太方便😂 整个设备是在内网的,公网访问是领导帮我配置的,这一块我也不会弄
AllenHua
2021-08-02 17:26:03 +08:00
404 就是没有读取到 css/js 资源

建议把所有资源都通过 lcation / 匹配 反代

然后 server 块定义一个 root dir

另外既然有域名了,可以再配置一个子域名,使用 https://abc.example.com 访问服务,这样 url 不更优雅么
ryd994
2021-08-02 17:30:42 +08:00
你再看看前端请求的资源文件是在根路径下还是在 /sss/下?
你可能需要 proxy_redirect 和 subs_filter 。
但是更正确的做法是修改后端,让后端正确配置到 /sss/
yufeng0681
2021-08-02 17:39:23 +08:00
建议用不同的二级域名实现
aaa.xxx.com >> A 网站
bbb.xxx.com >> local:3000
fdppzrl
2021-08-02 17:48:45 +08:00
改改静态资源的访问路径或者 14 楼的方法
bipy
2021-08-02 18:36:18 +08:00
盲猜一个常见坑,加一条配置试试

absolute_redirect off;
ik
2021-08-02 19:22:50 +08:00
0.0.0.0:3000

不知道你是不是故意改了的

应该是 127.0.0.1:3000
kkidou
2021-08-02 19:26:24 +08:00
静态资源加载的问题, 楼上也都说了,可以看下把所需要的静态资源一并放到一个目录下
v2clay
2021-08-02 22:08:09 +08:00
我也遇到过这个问题,其实就是 静态文件路径问题。因为多了一个 yyy 。
你需要通匹配,把 js css 文件 匹配到 一个目录下 如 /opt/yyy, 然后把 web 资源下所有的文件 copy 过去就行了(其实只会匹配 js css 文件,全 copy,主要是因为懒)。
v2clay
2021-08-02 22:18:30 +08:00
@AoEiuV020 # 跟相对绝对没关系,看描述本来就是相对路径。

主要问题是 请求的 uri 里多了一个 yyy 。如果是相对路径,匹配的是 /yyy/xx.js ,肯定找不到。
如果是绝对路径,ip:8088/xx.js 匹配到 location / 下,肯定也找不到。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793160

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX