Nginx 反向代理问题之二

2016-04-20 23:03:52 +08:00
 brando

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

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

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

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

贴出来了,不过我也同时在搜索 V2EX 内相同的帖子。
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
2016-04-20 23:41:25 +08:00
@just1 楼主说的貌似不是这个斜杠的问题 http://dmouse.iteye.com/blog/1880474
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
2016-04-20 23:56:34 +08:00
@XiaoxiaoPu 关于 rewrite 我也想到了,但不知道怎么写,用了您的方式还是我的那个结果,跳回到了 http://abc.hello.com/abc/
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
2016-04-21 00:04:10 +08:00
@kn007 感谢您在路上也在回复,不过您的配置我早就试过了,不行。还是返回第一个结果。
访问 http://abc.hello.com 之后返回结果是 http://abc.hello.com/abc/
XiaoxiaoPu
2016-04-21 00:07:19 +08:00
@brando 我在反代 Transmission 的 Web 界面时这么写是可以用的。会不会是你的应用跳转的?比如 302 ,前端 js 跳转,你可以执行 curl -vv http://abc.hello.com/ 看一下。
kn007
2016-04-21 00:09:29 +08:00
@brando 你确信你照做也不行?

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


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
2016-04-21 00:15:10 +08:00
访问 http://abc.hello.com/abc/ 看看是不是就是 192.168.1.12:8080/abc/
kn007
2016-04-21 00:15:17 +08:00
@ianisme 他要到目录 abc 。。。
ianisme
2016-04-21 00:16:26 +08:00
@kn007 额 不好意思

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

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

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

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

© 2021 V2EX