V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mingl0280
V2EX  ›  问与答

求问一个 nginx 或 apache 反向代理的配置问题

  •  
  •   mingl0280 · 2023-03-27 12:41:11 +08:00 · 752 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我最近在公司里部署一个反向代理的服务器,要求是让内网 172.16 网段的部分设备(在白名单里面的)能访问同样是内网 10.0 的一些网站,这些网站是带域名的。172.16 这边的站只需要使用 http (不是 https )。目前我的目标是让这个 http://服务器 IP/svc1/的目录提供 10.0 的 A 网站,然后 http://服务器 IP/svc2/提供 B 网站的服务。

    现在问题是,10.0 网段的一些网站,其返回的网页里面要么是有 301 绝对地址跳转,要么是有一些类似于 /s/12345 这种从根目录开始的 url ,一般的 ProxyPass 好像不能处理这两种情况,而且 301 也不知道怎么搞。

    我对 Nginx 确实不熟悉,请问有什么方案可以处理这两种情况吗?如果没有办法的话,可能我就只能搞成多台虚拟机,每台虚拟机处理一个域名的映射了。

    请问有什么 nginx 或者 apache 的方案可以处理这些情况吗?

    谢谢。
    10 条回复    2023-03-28 10:06:52 +08:00
    jifengg
        1
    jifengg  
       2023-03-27 13:18:31 +08:00
    我的建议是:每个网站通过不同的域名映射。nginx 里,只需要每个域名单独配置一个 server 即可。
    mingl0280
        2
    mingl0280  
    OP
       2023-03-27 13:29:23 +08:00 via Android
    @jifengg 我之前用这个方案,但是好像不能处理服务器发送的 301 跳转到 https 这个问题。
    mingl0280
        3
    mingl0280  
    OP
       2023-03-27 13:29:36 +08:00 via Android
    @jifengg 我之前试过这个方案,但是好像不能处理服务器发送的 301 跳转到 https 这个问题。
    zhanlanhuizhang
        4
    zhanlanhuizhang  
       2023-03-27 14:34:24 +08:00
    用 stream 模块试试。
    zhanlanhuizhang
        5
    zhanlanhuizhang  
       2023-03-27 14:34:59 +08:00
    同时,用 1 楼的方案:每个网站通过不同的域名映射
    jifengg
        6
    jifengg  
       2023-03-27 16:36:23 +08:00
    @mingl0280 “301 到 https”是必要的吗?你问题里不是说不使用 https 么?强制跳转 https 是哪里配置的就在哪里关掉了
    mingl0280
        7
    mingl0280  
    OP
       2023-03-27 19:59:18 +08:00 via Android
    @jifengg 服务器那边网站返回 301 不是我能控制的……301 内容是一个完整的 location ,这个肯定得 nginx 改 header ,不然肯定不工作。
    jifengg
        8
    jifengg  
       2023-03-28 08:48:28 +08:00
    @mingl0280 那就搞清楚服务器是因为什么而 301 ,是因为访问的是 80 端口不是 443 端口,要求强制跳转 https ?还是访问什么页面没权限导致 301 到其他页面?
    如果是 80 跳 443 ,那么你可以考虑 proxy_pass 的时候用 https 。
    如果是业务跳转,那就需要用 proxy_redirect 替换一下跳转地址。比如
    proxy_redirect https://1.2.3.4/ /;
    表示,如果代理要求 301 到“https://1.2.3.4/**”,那么替换成“/**”后放到 location header 里给到用户,用户浏览器就能够正常跳转了.用法你可以自己再 google
    mingl0280
        9
    mingl0280  
    OP
       2023-03-28 09:54:52 +08:00 via Android
    @jifengg 今天仔细试了下,搞定了。就是两个问题都有,升级了下 nginx 版本给弄好了,proxy_redirect 和 proxy_cookie_flags 都设置了一下就好了。谢谢!
    jifengg
        10
    jifengg  
       2023-03-28 10:06:52 +08:00
    @mingl0280 不客气,问题解决了就好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2800 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 11:47 · PVG 19:47 · LAX 04:47 · JFK 07:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.