案例:
访问地址: abc.hello.com
反向代理到内网其中一台机器
192.168.1.12:8080/abc/
试了好多次, nginx 官网文档也没能看明白,我最后试出的结果是反向地址到了
abc.hello.com/abc/
请教大神解决方式,小生万分感谢!!!
相关问题 http://v2ex.com/t/239976 [可以无视]
1
ianisme 2016-04-20 23:06:20 +08:00
可以看看我最近写的一篇关于反代的文章
http://www.ianisme.com/it/2283.html |
2
fohnwind 2016-04-20 23:12:57 +08:00
贴配置出来看看?我觉得是不是 proxy_pass 的时候末尾有没有`/`导致的
|
4
doyel 2016-04-20 23:19:46 +08:00
@ianisme 除了帮助文档基本无视以外, NGINX 的确是现在最拔尖的静态服务器了。。。而且现在插件又多,玩法多。然后问题也来了,配置起来太蛋疼。。。
|
5
just1 2016-04-20 23:21:06 +08:00 via Android
|
6
brando OP |
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 } } |
8
ianisme 2016-04-20 23:41:25 +08:00
@just1 楼主说的貌似不是这个斜杠的问题 http://dmouse.iteye.com/blog/1880474
|
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; } |
10
brando OP @XiaoxiaoPu 关于 rewrite 我也想到了,但不知道怎么写,用了您的方式还是我的那个结果,跳回到了 http://abc.hello.com/abc/
|
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; } |
12
brando OP @kn007 感谢您在路上也在回复,不过您的配置我早就试过了,不行。还是返回第一个结果。
访问 http://abc.hello.com 之后返回结果是 http://abc.hello.com/abc/ |
13
XiaoxiaoPu 2016-04-21 00:07:19 +08:00
@brando 我在反代 Transmission 的 Web 界面时这么写是可以用的。会不会是你的应用跳转的?比如 302 ,前端 js 跳转,你可以执行 curl -vv http://abc.hello.com/ 看一下。
|
16
kn007 2016-04-21 00:13:19 +08:00
|
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; } } # 你试试这样写 |
18
ianisme 2016-04-21 00:15:10 +08:00
访问 http://abc.hello.com/abc/ 看看是不是就是 192.168.1.12:8080/abc/
|
21
kn007 2016-04-21 00:16:50 +08:00
|
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/了 |
28
brando OP |
29
brando OP |
31
brando OP rewrite "^/abc/(.*)" /$1 permanent;
其实是我写的路径的问题, cookies 提交不正确,不是您的写法配置问题: D |
32
xiaoz 2016-04-21 09:07:36 +08:00
@XiaoxiaoPu 正解,楼主可以试试。
|
33
brando OP 困惑了,今天发现还是跳回到了 abc.hello.com/abc/
|
34
brando OP 修改之后解决重定向,但又发现 Jessionid 获取有问题,天,,,都什么问题。
|