nginx反向代理地址是域名时请求不通的情况
使用nginx的反向代理,是解决跨域的一个重要方法。在nginx的配置文件中,我们通常可以看到这么一段:
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_set_header
可以看出,这些语句是设置请求头的。
在我们的项目代理中,配置的代理地址都直接是服务器ip地址,如:
location ^~ /proxy/v1/ {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.5.85:8080/v1/;}
最近在写一个mock服务,想要通过mock服务来改变请求结果等,但是将proxy_pass改为mock服务的域名后,却发现请求失败了。
域名my.test.com的相关代理设置如下:
location ^~ /proxy/v1/ {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://test.mock.com/v1/;}
请求接口为http://test.mock.com/v1/user/info
test.mock.com通过host绑定另一台电脑上。
因为在浏览器中直接访问http://test.mock.com/v1/user/info可以直接得到返回结果,所有判断代理地址设置是没有错的。保证试一试的态度,将代理中proxy_set_header
三行设置删除后,发现请求http://my.test.com/proxy/v1/user/info成功。
nginx中proxy_set_header:
语法:proxy_set_header field value
默认值:
proxy_set_header Host $proxy_host
proxy_set_header Connection close
Host的值有三种:$proxy_host
、$host
、$http_host
。
http_host是http请求中的host host是http请求中的host,如果请求中没传,那就是虚拟主机的主域名 $proxy_host是被代理的主机的域名,而非本nginx的。如果发送请求时,请求头中携带了host,则以请求头中的host为主。
当proxy_set_header
设置为$host
时,通过http://my.test.com/proxy/v1/user/info请求时,host是my.test.com,而当删除了代理中设置的Host时,默认为$proxy_host即test.mock.com。
要代理到其他网站, HTTP Header 里的 Host 就要设置成目标站点的域名,这样请求发到目标站点,目标站点的 Web 服务器才能正确处理请求。
参考:What is the difference between Nginx variables $host, $http_host, and $server_name?
nginx反向代理地址是域名时请求不通的情况相关推荐
- Nginx反向代理多个域名
简介 由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80 ...
- Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
2019独角兽企业重金招聘Python工程师标准>>> Nginx 反向代理可以缓存 HTTP POST 请求页面吗? 2017-09-05 景峯 Netkiller 本文节选自&l ...
- Nginx反向代理,通过域名直接访问指定的端口,比如8080
Nginx反向代理,通过域名直接访问指定的端口,比如8080 今天写微信公众号开发网络授权的时候,通过域名加接口url的方式,始终访问不到指定的接口,最后想了很久,发现是Nginx反向代理没有配置! ...
- nginx 反向代理配置二级域名正确姿势!!!
1. 先解释下什么是反向代理? 反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代 ...
- 简单配置nginx反向代理,实现跨域请求
简单配置nginx去做反向代理,实现跨域请求 简单介绍nginx的nginx.conf最核心的配置,去做反向代理,实现跨域请求. 更多详细配置,参考nginx官方文档 先介绍几个nginx命令 打开n ...
- nginx反向代理实现二级域名转一级域名
需求场景: 有两个大项目交互必须在一级域名下,每个项目有多个前端,之前采用二级或三级域名的方式导致域名过多不好维护,故由project1.service1.city.com.project1.serv ...
- 在一台win10系统的电脑里安装虚拟机运行CentOS7并实现nginx反向代理从而用域名访问本机的微服务项目
在虚拟机里的CentOS7安装配置nginx,之前需要一些依赖库作为编译安装的条件,具体作用和命令详情跳转我之前的博客. 安装并使用VMware-workstation-full-15.5.0安装Ce ...
- Nginx反向代理 设置二级域名 (CentOS)
nginx 配置 whereis nginx /usr/sbin/nginx -> 执行文件 /etc/nginx/conf.d -> 自定义.conf文件的存放位置 ...
- nginx 反向代理web应用将https请求转成http请求时,必须注意事项
通过nginx可以实现将https请求转成http请求.具体方法这里暂且不表. 但有一项配置必须要添加(查看大多数配置均为对此进行提及): proxy_set_header WL-Proxy-SSL ...
最新文章
- ExtJS4.x动态加载js文件
- 快速启动程序的工具软件都比不了Win+R-转
- iOS之深入解析UmbrellaFramework的封装与应用
- java 继承多态的一些理解和不理解
- 【linux】学习2
- 瞬间读懂什么是互联网思维、大数据、O2O、众筹、红海
- 研究js特效巩固JavaScript知识
- android 打开SD卡文件夹,并获得选中文件的路径怎么实现?
- Android开源项目汇总
- AutoResetEvent 与 ManualResetEvent
- 3.调试与配置,控制器
- fetch与axios
- 073:【Django数据库】ORM聚合函数详解-Count
- keil4/5官网最新版及其覆盖安装方法
- 随机森林算法原理梳理
- Photoshop将图片转为RGB颜色模式 您还不会吗?
- Ubuntu16.04 解决外置USB蓝牙模块链接蓝牙耳机没有声音输出问题
- Mastermind游戏
- TypeScript——理解 infer 关键字!
- 【python】身份证识别
热门文章
- 点关于任意直线的对称点
- 问题解决:VScode高CPU占有率 Microsoft.VSCode.CPP.Extension.darwin
- cortex-M3/cortex-M4架构
- SAS中创建分组变量
- 华为公有云认证培训认证体系- HCIA,HCIP ,HCIE
- 史上最直白的ICA教程之一
- 成都理工大学计算机基础考试题型,成都理工大学计算机基础作业.doc
- 一字一句的搞懂vue-cli之vue webpack template配置
- SQLserver未发现数据源名称并且未指定默认驱动程序
- 沪江网校SWF课件打开后叹号问题的解决方案