nginx 跳转到本机其他端口问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hdp5252
V2EX    NGINX

nginx 跳转到本机其他端口问题

  •  
  •   hdp5252 2022-03-22 16:35:27 +08:00 3352 次点击
    这是一个创建于 1307 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想要实现访问 http://aaa.com/abc 实现访问 http://aaa.com:8080 的效果。 但是浏览器上显示 http://aaa.com/abc nginx 的配置文件怎么写

    location /abc/ { proxy_pass http://aaa.com:8080 } 不行啊?

    16 条回复    2022-03-23 18:30:05 +08:00
    Elissa
        1
    Elissa  
       2022-03-22 16:55:40 +08:00
    location /abc
    最后别带 /试试,或者访问的时候也带着 /,总之访问时和配置文件保持完全一致
    hdp5252
        2
    hdp5252  
    OP
       2022-03-22 17:02:50 +08:00 via Android
    配置文件是 /abc
    浏览器访问自动加上 / 是 aaa.com/abc/
    提示找不到网页 浏览器直接访问 aaa.com:8080 可以访问
    linfx7
        3
    linfx7  
       2022-03-22 17:22:34 +08:00
    getenforce 看看,selinux 会拦截 nginx 到本机其他端口的请求
    dier
        4
    dier  
       2022-03-22 17:31:59 +08:00   1
    location /abc/ {
    ...
    proxy_pass http://localhost:8080/;
    ...
    }
    dier
        5
    dier  
       2022-03-22 17:37:48 +08:00   1
    解释一下我上面的配置,浏览器访问 abc.com/abc/index.html ,nginx 代理的 URL 是 localhost:8080/index.html 。理论上就是你要的效果,但是这种配法可能会有部分静态资源显示 404 。
    zxw567
        6
    zxw567  
       2022-03-22 17:49:58 +08:00
    hdp5252
        7
    hdp5252  
    OP
       2022-03-22 18:11:20 +08:00 via Android
    @dier 感谢,可以跳转到 8080 端口,但是输入密码后还是无法显示网页
    8080 端口是阿里云的 webdav 。
    hdp5252
        8
    hdp5252  
    OP
       2022-03-22 18:15:33 +08:00 via Android
    @dier 搭建的是这个 https://github.com/messense/aliyundrive-webdav
    可以输入密码
    输入密码后还是显示找不到网页 404
    adoal
        9
    adoal  
       2022-03-22 19:04:05 +08:00   1
    反向代理(不要把这个称为转跳,301/302 那种才是转跳)其实是一件挺复杂的事。前面的代理服务器的配置就已经挺麻烦了,有时候仅仅配对前面,后面的业务系统没有“意识到”自己处在反代后面从而做出一些行为调整,也会导致反代的效果不太对。

    Nginx 的`proxy_pass`后面参数,写完主机名和端口号,如果不跟路径就结束,那它的意思其实是把传进来的 URI 的全路径直接附加到指定的主机后面,并不会剥掉`location`里指定的前缀`/abc`,所以 8080 上的业务系统就找不到了,所以需要按#4 的写法。

    但是这样写了之后,后面的业务系统仍然是按照自己服务在根路径下来运行的,也就是说生成的页面内绝对 URL 并不会多一个`/abc`,这样对前端浏览器(或走 HTTP 协议的其它客户端)来说就错掉了。所以一个业务系统要运行在反代后面,其实是要跟前面的反代约定好,如何让业务系统知道自己要服务的子路径等信息。有的 web 框架会通过特定的 HTTP header 来做这事,有的则提供了通过配置参数来指定的方法,如果什么都没有,那就得在业务系统里自己实现这个逻辑了。

    看了一眼你用的这个软件……注意到有个参数:`--root <ROOT>`,看起来像你需要的东西。
    yin1999
        10
    yin1999  
       2022-03-22 19:26:40 +08:00   1
    @adoal #9 这个 root 好像是用来将阿里云盘的指定目录作为根目录的(没仔细研究逻辑),并不是楼主的想弄的。

    我也有和楼主一样的问题,网上找了一圈没找到解决方法,就弄了子域名来专门挂载阿里云盘:

    1. 在 DNS 服务商那边设置 CNAME ,为用于 webdav 的子域名设置 CNAME ,记录值为 服务器主要域名。
    2. 在 Nginx 上为子域名配置规则,就转发所有流量到 localhost 的 webdav 端口( HTTPS 是用 acme.sh 申请的泛域名 SSL 证书,同时给服务器的主域名和子域名使用)

    这样,访问这个子域名也是能正常将流量转发到 webdav 的
    kokutou
        11
    kokutou  
       2022-03-22 21:11:12 +08:00
    看看 nginx 的日志你就知道了
    实际请求的路径哪里不对改哪里...
    TenRice
        12
    TenRice  
       2022-03-22 22:18:42 +08:00   2
    location /abc/ {

    proxy_pass http://127.0.0.1:8080/;
    sub_filter 'href="/' 'href="/abc/';
    sub_filter_once off;
    sub_filter_types *;
    }
    TenRice
        13
    TenRice  
       2022-03-22 22:23:21 +08:00   1
    @TenRice location 和 proxy_pass 结尾都需要有 / 。配置 sub_filter 后可以让文件夹可以正常打开,sub_filter 需要在 Nginx 编译时手动指定 --with-http_sub_module 模块。
    hdp5252
        14
    hdp5252  
    OP
       2022-03-23 05:29:02 +08:00 via Android
    @TenRice 感谢老哥,照着配置成功连接。
    去找找文档再学习学习。
    dier
        15
    dier  
       2022-03-23 11:13:06 +08:00   1
    这种反代我一般都是建议 nginx 单独配置一个 server ,用一个独立的二级域名,反代到 location / 不要加额外的路径,减少问题,方便排错。
    server {
    ...
    server_name webdav.domain.com;
    ...

    location / {
    proxy_pass http://ip:port/;
    }

    }
    hdp5252
        16
    hdp5252  
    OP
       2022-03-23 18:30:05 +08:00 via Android
    @dier 这也是个好方法
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2213 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 16:02 PVG 00:02 LAX 09:02 JFK 12:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86