V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
brando
V2EX  ›  NGINX

Nginx 反向代理问题之二

  •  
  •   brando · 2016-04-20 23:03:52 +08:00 · 4920 次点击
    这是一个创建于 3140 天前的主题,其中的信息可能已经有所发展或是发生改变。

    案例:
    访问地址: abc.hello.com
    反向代理到内网其中一台机器
    192.168.1.12:8080/abc/ 试了好多次, nginx 官网文档也没能看明白,我最后试出的结果是反向地址到了
    abc.hello.com/abc/

    请教大神解决方式,小生万分感谢!!!

    相关问题 http://v2ex.com/t/239976 [可以无视]

    34 条回复    2016-04-22 22:48:23 +08:00
    ianisme
        1
    ianisme  
       2016-04-20 23:06:20 +08:00
    可以看看我最近写的一篇关于反代的文章
    http://www.ianisme.com/it/2283.html
    fohnwind
        2
    fohnwind  
       2016-04-20 23:12:57 +08:00
    贴配置出来看看?我觉得是不是 proxy_pass 的时候末尾有没有`/`导致的
    YUX
        3
    YUX  
       2016-04-20 23:14:49 +08:00
    @ianisme 申请个友链 已发申请邮件
    doyel
        4
    doyel  
       2016-04-20 23:19:46 +08:00
    @ianisme 除了帮助文档基本无视以外, NGINX 的确是现在最拔尖的静态服务器了。。。而且现在插件又多,玩法多。然后问题也来了,配置起来太蛋疼。。。
    just1
        5
    just1  
       2016-04-20 23:21:06 +08:00 via Android
    location /abc/ {
    proxy_pass http://xxx.com/;
    }
    记得加 /
    brando
        6
    brando  
    OP
       2016-04-20 23:28:08 +08:00
    https://gist.github.com/Mutsuki/cdbdd200a85b74e61dbeb7d5e871fb8c

    贴出来了,不过我也同时在搜索 V2EX 内相同的帖子。
    DesignerSkyline
        7
    DesignerSkyline  
       2016-04-20 23:35:43 +08:00
    如果是只是简单使用反代可以试试配置文件更加好写的 caddy 就像这样:

    https://xxx.com {
    log /caddy/access.log
    gzip
    tls /root/startssl/fullchain.pem /root/startssl/privkey.pem
    proxy / localhost:port {
    policy round_robin##这是负载均衡使用的类型
    proxy_header Host xxx.com
    proxy_header X-Real-IP 127.0.0.1
    proxy_header X-Forwarded-Proto https
    websocket
    }
    }
    ianisme
        8
    ianisme  
       2016-04-20 23:41:25 +08:00
    @just1 楼主说的貌似不是这个斜杠的问题 http://dmouse.iteye.com/blog/1880474
    XiaoxiaoPu
        9
    XiaoxiaoPu  
       2016-04-20 23:43:24 +08:00
    试试下面的

    server
    {
    listen 80;
    server_name abc.hello.com;

    location / {
    rewrite ^/(.*)$ /abc/$1 break;
    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_pass http://192.168.1.12:8080/;
    }
    access_log /var/log/nginx/abc_access.log;
    error_log /var/log/nginx/abc_error.log;
    }
    brando
        10
    brando  
    OP
       2016-04-20 23:56:34 +08:00
    @XiaoxiaoPu 关于 rewrite 我也想到了,但不知道怎么写,用了您的方式还是我的那个结果,跳回到了 http://abc.hello.com/abc/
    kn007
        11
    kn007  
       2016-04-20 23:58:47 +08:00
    有这么麻烦么?在外面现在,略微改了下你提供的代码,你看看返回的结果。。

    server
    {
    listen 80;
    server_name abc.hello.com;

    location /{
    proxy_redirect off;
    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_pass http://192.168.1.12:8080/abc/;

    }
    access_log /var/log/nginx/abc_access.log;
    error_log /var/log/nginx/abc_error.log;
    }
    brando
        12
    brando  
    OP
       2016-04-21 00:04:10 +08:00
    @kn007 感谢您在路上也在回复,不过您的配置我早就试过了,不行。还是返回第一个结果。
    访问 http://abc.hello.com 之后返回结果是 http://abc.hello.com/abc/
    XiaoxiaoPu
        13
    XiaoxiaoPu  
       2016-04-21 00:07:19 +08:00
    @brando 我在反代 Transmission 的 Web 界面时这么写是可以用的。会不会是你的应用跳转的?比如 302 ,前端 js 跳转,你可以执行 curl -vv http://abc.hello.com/ 看一下。
    kn007
        14
    kn007  
       2016-04-21 00:09:29 +08:00
    @brando 你确信你照做也不行?

    刚到家,本地环境 test 通过。
    kn007
        15
    kn007  
       2016-04-21 00:10:15 +08:00
    @brando 你 abc 下什么应用,你单纯弄个 index.html ,写个 ok 在里边。其他的先不放试试。
    kn007
        16
    kn007  
       2016-04-21 00:13:19 +08:00


    ianisme
        17
    ianisme  
       2016-04-21 00:13:43 +08:00
    upstream abc.hello.com {
    server 192.168.1.12:8080;
    }

    server{
    listen 80;
    server_name abc.hello.com;
    location / {
    proxy_pass http://abc.hello.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

    # 你试试这样写
    ianisme
        18
    ianisme  
       2016-04-21 00:15:10 +08:00
    访问 http://abc.hello.com/abc/ 看看是不是就是 192.168.1.12:8080/abc/
    kn007
        19
    kn007  
       2016-04-21 00:15:17 +08:00
    @ianisme 他要到目录 abc 。。。
    ianisme
        20
    ianisme  
       2016-04-21 00:16:26 +08:00
    @kn007 额 不好意思
    kn007
        21
    kn007  
       2016-04-21 00:16:50 +08:00
    @ianisme 哦,你想让楼主试试。。

    理论上
    abc.hello.com -> 192.168.1.12:8080/abc/
    这种应该不麻烦。
    kn007
        22
    kn007  
       2016-04-21 00:17:29 +08:00
    @ianisme 莫非我理解错了, 23333 ,最近怎么样?
    ianisme
        23
    ianisme  
       2016-04-21 00:20:13 +08:00
    @kn007 楼主已经没回话了。话说 V2EX 圈子好小,好几次碰到你 O(∩_∩)O 哈哈~
    kn007
        24
    kn007  
       2016-04-21 00:22:22 +08:00
    @ianisme 估计楼主睡着了。
    相对活跃吧,已经被几个好友说我整天泡 v2 时间过长。
    ianisme
        25
    ianisme  
       2016-04-21 00:23:03 +08:00
    @kn007 你的出镜率好高
    kn007
        26
    kn007  
       2016-04-21 00:23:36 +08:00
    @ianisme 主要是头像黑麻麻。。哈哈哈
    zcw159357
        27
    zcw159357  
       2016-04-21 00:47:19 +08:00   ❤️ 1
    server
    {
    listen 80;
    server_name abc.hello.com;

    location / {
    proxy_redirect off;
    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_pass http://192.168.1.12:8080/abc/;

    }

    location /abc/ {
    proxy_redirect off;
    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_pass http://192.168.1.12:8080/abc/;
    rewrite "^/abc/(.*)" /$1 permanent;
    }

    access_log /var/log/nginx/abc_access.log;
    error_log /var/log/nginx/abc_error.log;
    }

    试下这个 感觉是你 /abc/ 那个站点里的 url 都写了 /abc/aa.htm 这种 搞个重定向 应该就可以不会出现 /abc/了
    brando
        28
    brando  
    OP
       2016-04-21 01:05:33 +08:00
    楼主去画拓扑图去了。
    brando
        29
    brando  
    OP
       2016-04-21 01:31:47 +08:00
    27 楼是正解!

    @zcw159357 谢谢您的 config ,稍改配置也解决了我的 500 的错误!
    另外也谢谢其他的朋友们!!!这么晚了还都在奋斗~~
    zcw159357
        30
    zcw159357  
       2016-04-21 02:05:58 +08:00
    @brando 咦 啥 500 错误....居然还有这种效果么...
    brando
        31
    brando  
    OP
       2016-04-21 02:19:15 +08:00
    rewrite "^/abc/(.*)" /$1 permanent;
    其实是我写的路径的问题, cookies 提交不正确,不是您的写法配置问题: D
    xiaoz
        32
    xiaoz  
       2016-04-21 09:07:36 +08:00
    @XiaoxiaoPu 正解,楼主可以试试。
    brando
        33
    brando  
    OP
       2016-04-22 12:38:54 +08:00
    困惑了,今天发现还是跳回到了 abc.hello.com/abc/
    brando
        34
    brando  
    OP
       2016-04-22 22:48:23 +08:00
    修改之后解决重定向,但又发现 Jessionid 获取有问题,天,,,都什么问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4490 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:09 · PVG 09:09 · LAX 17:09 · JFK 20:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.