比如我访问 www.abc.com/aaa/,则转发到 http://aaa/
比如我访问 www.abc.com/bbb/,则转发到 http://bbb/
……
除了像这样一条一条写,还有啥别的办法吗?
location /wechat_qyw/ {
proxy_pass http://wechat_qyw/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /wechat_qyw/ {
proxy_pass http://wechat_qyw/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarde国外服务器d-For $proxy_add_x_forwarded_for;
}
location /wechat_sd/ {
proxy_pass http://wechat_sd/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
写个模版生成呗
正则表达式先试试,不行就上 lua 脚本喽
rewrite /wechat_(.*)$ http://wechat_$1 break;
rewrite 会返回 302 吧,wechat_XX 是内部域名,客户端访问不到的,一定需要 nginx 反代
location ~ \/(wechat_.*)\/ { proxy_pass http://$1/; } 这样?
有定数可以用 map 或 regexp
无定数可以用 regexp
我也有这个疑问,不定数的,怎么写 regexp ?
rewrite 返回 302 是什么鬼啊
rewrite 是重定向吧,这个场景需要的是路由
rewrite 不是重定向,建议自己试一下
我试了,会重定向
rewrite /wechat_(.*)$ http://wechat_$1 break;
浏览器会直接跳转到 http://wechat_xxx,然后就失败了
rewrite 到不同域名会返回 302
关注一下
那我是怎么用 Nginx 反代 Google 的?
subs_filter,请
灰常感谢
按自己需求稍改了下:
location ~ ^\/(wechat_.*)\/ {
proxy_pass http://$1/;
}
测试结果:
2018/01/16 09:37:39 [error] 7637*15 no resolver defined to resolve wechat_fafa, client: 121.35.***.***, server: sz.sangfor.site, request: "GET /wechat_fafa/awefaews HTTP/1.1", host: "*******"
2018/01/16 09:38:01 [error] 7637*15 no resolver defined to resolve wechat_fafa, client: 121.35.***.***, server: sz.sangfor.site, request: "GET /wechat_fafa/awefaews HTTP/1.1", host: "*******"
卧槽,码没打全……
参看这个: https://stackoverflow.com/questions/13706658/variable-capture-in-nginx-location-matching
只要 regex 规则写对了就行,如果有例外,写在这个 location 之前。
试了一下,出现了 15 楼一样的错误信息。
我也出现了你 15 楼的错误。你搞定了吗?
一般用 proxy_pass 要同时定义一个 resolver,如:
resolver 8.8.8.8;
国内酌情考虑境内 DNS 的 IP。
我也想加 resolver,但是我是 docker,其实后端是不同的 docker,所以其实是机器名。而且没有 dns 服务器。我试了用 resolver 127.0.0.1 会提示无法连接 127.0.0.1:53。
你的意思是这个 proxy_pass 都是不同的内部 docker container ?
docker compose 有相关的内部网络配置的
对,我一个个写死没问题的。改正则就不行了。
嗯,我也是 docker 环境,测试没问题,放到生产就炸了
15 楼那个错误对我来说是正常的,因为我环境里没那几个域名,瞎写的,解析不出来就对了
你看看这个:)
https://stackoverflow.com/questions/28028789/nginx-proxy-pass-to-a-linked-docker-container
resolver 127.0.0.11;
看下面的回答,是 11 而不是 1
写死的话能解决,但是可能会有问题
建议还是写个脚本去解析 /etc/resolv.conf
https://stackoverflow.com/questions/35744650/docker-network-nginx-resolver#comment68472082_37656784
多谢,今天再试试看。