本人是一个不懂后端的 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,但是我不知道该怎么改了。
1
XiaoxiaoPu 2021-08-02 15:13:34 +08:00
proxy_pass 这一行,去掉 ";" 前面的 "/"
|
2
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; } |
3
dablwow 2021-08-02 15:32:01 +08:00
应该不是斜杠的问题,楼主发一下报错的 css/js 的请求路径吧,有可能是写死的,等于在读 8088 的资源(实际不存在)
|
4
weichengwu OP @XiaoxiaoPu #1 "/" 去掉之后首页都打不开
|
5
weichengwu OP @AoEiuV020 #2 也不行
|
6
weichengwu OP @dablwow #3 "GET /assets/application-1b7c2119d0cc0be69a0e6705ee19d5bf859cc64e949a0faf412286a8a53db169.js HTTP/1.1" 404 153 "https://xx x.com:8088/yyy/"
|
7
AoEiuV020 2021-08-02 15:54:04 +08:00
@weichengwu 基本上确定是 html 问题,你希望整个网站都在 /yyy/下,但 html 请求了绝对路径的 js,要改成相对路径才行,
|
8
XiaoxiaoPu 2021-08-02 16:19:27 +08:00
抱歉看错了,没注意到 location 里有 /yyy/
错误原因应该是如 AoEiuV020 所说。 |
9
defunct9 2021-08-02 16:21:19 +08:00
开 ssh,让我上去看看
|
10
weichengwu OP @AoEiuV020 #7 感谢,那我估计要改一下服务的源码了
|
11
weichengwu OP @defunct9 #9 这个不太方便😂 整个设备是在内网的,公网访问是领导帮我配置的,这一块我也不会弄
|
12
AllenHua 2021-08-02 17:26:03 +08:00
404 就是没有读取到 css/js 资源
建议把所有资源都通过 lcation / 匹配 反代 然后 server 块定义一个 root dir 另外既然有域名了,可以再配置一个子域名,使用 https://abc.example.com 访问服务,这样 url 不更优雅么 |
13
ryd994 2021-08-02 17:30:42 +08:00 via Android
你再看看前端请求的资源文件是在根路径下还是在 /sss/下?
你可能需要 proxy_redirect 和 subs_filter 。 但是更正确的做法是修改后端,让后端正确配置到 /sss/ |
14
yufeng0681 2021-08-02 17:39:23 +08:00
|
15
fdppzrl 2021-08-02 17:48:45 +08:00 via Android
改改静态资源的访问路径或者 14 楼的方法
|
16
bipy 2021-08-02 18:36:18 +08:00
盲猜一个常见坑,加一条配置试试
absolute_redirect off; |
17
ik 2021-08-02 19:22:50 +08:00 via iPhone 1
0.0.0.0:3000
不知道你是不是故意改了的 应该是 127.0.0.1:3000 |
18
kkidou 2021-08-02 19:26:24 +08:00
静态资源加载的问题, 楼上也都说了,可以看下把所需要的静态资源一并放到一个目录下
|
19
v2clay 2021-08-02 22:08:09 +08:00
我也遇到过这个问题,其实就是 静态文件路径问题。因为多了一个 yyy 。
你需要通匹配,把 js css 文件 匹配到 一个目录下 如 /opt/yyy, 然后把 web 资源下所有的文件 copy 过去就行了(其实只会匹配 js css 文件,全 copy,主要是因为懒)。 |
20
v2clay 2021-08-02 22:18:30 +08:00
@AoEiuV020 # 跟相对绝对没关系,看描述本来就是相对路径。
主要问题是 请求的 uri 里多了一个 yyy 。如果是相对路径,匹配的是 /yyy/xx.js ,肯定找不到。 如果是绝对路径,ip:8088/xx.js 匹配到 location / 下,肯定也找不到。 |
21
cpstar 2021-08-02 22:23:32 +08:00
相对路径、绝对路径
看到问题,猜了大概,看到 6#确定了猜测。 但是解决这个问题,很大情况下源头不太好修改——因为如果他容易修改的话,他就不会用绝对路径这个 SB 的策略了——于是解决办法很有可能需要挨个 URL 做反代。 然后不知道 proxy_reverse 另外,location 最好用 2#的匹配,当然写你那样也没啥问题。然后结尾斜杠的问题,保持统一,要有都有,要没有都没有,/xxx 和 /xxx/是两个 URL 。 |
22
tqyq88 2021-08-02 22:25:01 +08:00
不用改路径,加一行 rewrite /yyy/(.*) /$1 break;
|
23
weichengwu OP 感谢楼上各位的回复,今天下午一直在开会,明天去公司一一尝试。
|
24
weichengwu OP 感觉主要还是不懂 nginx 的工作方式,但是仅仅为了配置一个服务把 nginx 整个过一遍太吃精力了 😂
|
25
awker 2021-08-02 22:49:08 +08:00
可以参考:Nginx proxy_pass 后出现部分请求 404 的解决办法 https://www.jianshu.com/p/55bfbba45fed
|
26
AoEiuV020 2021-08-03 09:13:09 +08:00
@v2clay 你这是在讲什么,#6 楼日志看了没有,问题就是 uri 里没有 yyy,到你这里还 uri 里多了一个 yyy,
要匹配的就是 /yyy/xx.js 才能被匹配反代到内网 /xx.js , |
27
Chieh 2021-08-03 13:14:38 +08:00
$http_host 试试 https://xxx.com:8088/
|
28
abccccabc 2021-08-05 19:19:22 +08:00
楼主,解决了没有?最终答案是什么?
|
29
weichengwu OP @abccccabc #28 解决了哈,路径的方式没走通,换多级域名了
|