使用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反向代理地址是域名时请求不通的情况相关推荐

  1. Nginx反向代理多个域名

    简介 由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口.非80 ...

  2. Nginx 反向代理可以缓存 HTTP POST 请求页面吗?

    2019独角兽企业重金招聘Python工程师标准>>> Nginx 反向代理可以缓存 HTTP POST 请求页面吗? 2017-09-05 景峯 Netkiller 本文节选自&l ...

  3. Nginx反向代理,通过域名直接访问指定的端口,比如8080

    Nginx反向代理,通过域名直接访问指定的端口,比如8080 今天写微信公众号开发网络授权的时候,通过域名加接口url的方式,始终访问不到指定的接口,最后想了很久,发现是Nginx反向代理没有配置! ...

  4. nginx 反向代理配置二级域名正确姿势!!!

    1. 先解释下什么是反向代理? 反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代 ...

  5. 简单配置nginx反向代理,实现跨域请求

    简单配置nginx去做反向代理,实现跨域请求 简单介绍nginx的nginx.conf最核心的配置,去做反向代理,实现跨域请求. 更多详细配置,参考nginx官方文档 先介绍几个nginx命令 打开n ...

  6. nginx反向代理实现二级域名转一级域名

    需求场景: 有两个大项目交互必须在一级域名下,每个项目有多个前端,之前采用二级或三级域名的方式导致域名过多不好维护,故由project1.service1.city.com.project1.serv ...

  7. 在一台win10系统的电脑里安装虚拟机运行CentOS7并实现nginx反向代理从而用域名访问本机的微服务项目

    在虚拟机里的CentOS7安装配置nginx,之前需要一些依赖库作为编译安装的条件,具体作用和命令详情跳转我之前的博客. 安装并使用VMware-workstation-full-15.5.0安装Ce ...

  8. Nginx反向代理 设置二级域名 (CentOS)

    nginx 配置 whereis nginx /usr/sbin/nginx     ->    执行文件 /etc/nginx/conf.d  ->    自定义.conf文件的存放位置 ...

  9. nginx 反向代理web应用将https请求转成http请求时,必须注意事项

    通过nginx可以实现将https请求转成http请求.具体方法这里暂且不表. 但有一项配置必须要添加(查看大多数配置均为对此进行提及): proxy_set_header WL-Proxy-SSL ...

最新文章

  1. ExtJS4.x动态加载js文件
  2. 快速启动程序的工具软件都比不了Win+R-转
  3. iOS之深入解析UmbrellaFramework的封装与应用
  4. java 继承多态的一些理解和不理解
  5. 【linux】学习2
  6. 瞬间读懂什么是互联网思维、大数据、O2O、众筹、红海
  7. 研究js特效巩固JavaScript知识
  8. android 打开SD卡文件夹,并获得选中文件的路径怎么实现?
  9. Android开源项目汇总
  10. AutoResetEvent 与 ManualResetEvent
  11. 3.调试与配置,控制器
  12. fetch与axios
  13. 073:【Django数据库】ORM聚合函数详解-Count
  14. keil4/5官网最新版及其覆盖安装方法
  15. 随机森林算法原理梳理
  16. Photoshop将图片转为RGB颜色模式 您还不会吗?
  17. Ubuntu16.04 解决外置USB蓝牙模块链接蓝牙耳机没有声音输出问题
  18. Mastermind游戏
  19. TypeScript——理解 infer 关键字!
  20. 【python】身份证识别

热门文章

  1. 点关于任意直线的对称点
  2. 问题解决:VScode高CPU占有率 Microsoft.VSCode.CPP.Extension.darwin
  3. cortex-M3/cortex-M4架构
  4. SAS中创建分组变量
  5. 华为公有云认证培训认证体系- HCIA,HCIP ,HCIE
  6. 史上最直白的ICA教程之一
  7. 成都理工大学计算机基础考试题型,成都理工大学计算机基础作业.doc
  8. 一字一句的搞懂vue-cli之vue webpack template配置
  9. SQLserver未发现数据源名称并且未指定默认驱动程序
  10. 沪江网校SWF课件打开后叹号问题的解决方案