nginx的proxy_pass到$host的问题
今天在配置一个location的时候,希望使用一个变量如$host来指示nginx代理:
- location /test/
- {
- proxy_pass http://$host;
- }
如你想不到,这个配置是不能使用的,查看error.log,打出来的信息也无法帮助解决问题。
但相同情况下,root标签就工作得很好:
- locatin /test/
- {
- root /dev/shm/$host;
- }
令人匪夷所思,估计这是nginx的一个bug,或者是一个搅不清的逻辑?
把上面的错误配置改成
- location /test/
- {
- proxy_pass http://$host/;
- }
或者
- set $vhost "test.sudone.com";
- location /test/
- {
- proxy_pass http://$vhost;
- }
等等,都不能解决问题,最后是用了个奇怪的配置方式,居然能工作……
- location /test/ {
- proxy_pass http://127.0.0.1:80;
- proxy_set_header Host $host;
- }
这个配置就能工作正常,但上面这个配置只支持单ip的后端,能不能支持upstream呢?
再改一下测测
- upstream backend.sudone.com
- {
- server 127.0.0.1:80;
- }
- location /test/
- {
- proxy_pass http://backend.sudone.com;#固定写的后端upstream
- proxy_set_header Host $host;#$host=test.sudone.com;
- }
嗯?能用!
有了这个办法,我便不用在数十个主机配置内把/test/这个location贴上数十次,另外,它也可以支持这样的写法:
- location /test/
- {
- proxy_pass http://127.0.0.1:80;
- proxy_set_header Host fetch.$host;
- }
还可以用正则表达式对host进行匹配:
- set $vhost $host;
- if ($host ~* "([^\.]+)\.92csz\.com")
- {
- set $vhost $1.92csz.com;
- }
- location /test/
- {
- proxy_pass http://127.0.0.1:80;
- proxy_set_header Host fetch.$host;
- }
可用的方面就广了。
---------------------------------------------------
补充:
在这个配置里,我的nginx代理的后端(backend)也是nginx,目前尚不清楚其它的web服务器如apache等是否能在这样的配置下工作正常。
nginx的proxy_pass到$host的问题的更多相关文章
- Nginx配置proxy_pass转发的/路径问题
Nginx配置proxy_pass转发的/路径问题 在nginx中配置proxy_pass时,如果是按照^~匹配路径时,要注意proxy_pass后的url最后的/,当加上了/,相当于是绝对根路径,则 ...
- Nginx的proxy_pass及upstream的小型负载均衡
proxy_pass Nginx的proxy_pass将请求代理到其他的后端服务器.例如 listen 9999; server_name wyc.com; location /test/aaa { ...
- nginx中proxy_pass小斜杠
nginx中proxy_pass小斜杠 1. 故事背景 相信做微信公众号开发的朋友都知道,要想在微信中预览效果,必须使用域名访问.很多朋友使用内网穿透工具.不仅不好用还不稳定.所以,发挥脸厚吃天下的态 ...
- 记录一次 Nginx 配置 proxy_pass 后 返回404问题
一. Nginx 配置 proxy_pass 后 返回404问题 故障解决和定位 1.1. 问题 在一次生产涉及多次转发的配置中, 需求是下面的图: 在配置好了 proxy_pass 之后,请求 ww ...
- Nginx配置proxy_pass
nginx配置proxy_pass,需要注意转发的路径配置 1.location /test/ { proxy_pass http://t6:8300; } 2.location /test/ { p ...
- nginx 设置默认虚拟 host
nginx 设置默认虚拟 host listren 80 default_server
- nginx 之 proxy_pass
nginx中有两个模块都有proxy_pass指令 ngx_http_proxy_module的proxy_pass 语法: proxy_pass URL; 场景: location, if in l ...
- 解决nginx使用proxy_pass反向代理时,cookie丢失的问题
1. 如果只是host.端口转换,则cookie不会丢失.例如: location /project { proxy_pass http://127.0.0.1:8080/pr ...
- 解决nginx中proxy_pass到tomcat的session丢失问题
之前在配置tomcat的时候都是一个项目对应一个tomcat,也就是一个端口.最近需要把两个项目整合到同一个tomcat中,通过配置nginx让两个域名指向同一tomcat的不同项目.整合完毕后发现其 ...
随机推荐
- [Lydsy1710月赛] 小B的数字
神TM 又又又又是构造题..... 很简单的化简就是,把2^k[i]都换成k[i] ,然后就可以得出 对于任意的i,k[i] * a[i] >= ∑k[]. 最优的构造肯定是使 k[i] = ...
- 【OpenJudge7624】【区间DP】山区建小学
山区建小学 总时间限制: 1000ms 内存限制: 65536kB [描述] 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两 ...
- Jackson反序列化提示:Can not deserialize instance of Task out of START_ARRAY token
解决方法: 1.没有绝对的方法,只能不断的测试和排查. 2.检查一下JSON数据和实体的字段结构是不是不一致导致的.比如JSON数据是数组,而实体字段为非数组. 参考: https://stackov ...
- WinForm-SQL查询避免UI卡死
使用委托,呵呵. Func<List<VM>> act = () => { SqlDataReader reader = DBHelper.ExecuteReader(s ...
- 怎样从server获取图片
今天写了安卓程序与server通信.当中须要从server获取图片.本来以为下载流.处理文件流非常复杂.结果几句话就轻松搞定了.如今记在这里. // (2014.5.1第一种方法)通过server返回 ...
- 论坛中不同类型的贴的排序问题(涉及数据库的:CASE... END)
在论坛中,会有不同类型的帖子,比如说:普通贴.精华帖.置顶帖: 论坛的这些贴子会根据不同的类型进行排序,当然不仅仅只是看帖子类型,还有贴子的动态情况来进行排序. 在这里演示一下简单的帖子排序,我们只关 ...
- 2017.6.30 IDEA插件--gsonfomat的安装与使用
参考来自:http://www.cnblogs.com/1024zy/p/6370305.html 1.安装 2.使用 (1)新建一个空类 (2)在空类里按快捷键:alt+s,打开gsonformat ...
- ElasticSearch高级查询
ElasticSearch高级查询 https://www.imooc.com/video/15759/0 ElasticSearch查询 1,子条件查询:特定字段查询所指特定值 1.1query c ...
- Intellij output 中文乱码
使用intellij有一段时间了,intellij output中文乱码,每次使用这两点解决,就可以解决乱码问题. 1.修改启动参数 修改安装Intellij目录下的C:\Program Files ...
- [PWA] Access the Camera in a PWA built with React
It's possible to access some, but not all, of the native device features from a PWA. One that we can ...