今天接到一个配置nginx的需求是:需要访问某个域名时,nginx可以去掉前缀去代理访问到后端

正常配置情况下:
在nginx配置文件中中设置了 location /prod-api/api 时 浏览器访问 /prod-api/api 反向代理到后端服务后,后端服务接收到的url地址实际还是 /prod-api/api

需要实现的功能需求:
访问url路径/prod-api/api经过nginx反向代理后,到达后端服务的实际url地址为/api

以下是原nginx配置文件中location部分的配置内容:

server {listen 80;server_name localhost;charset utf-8;location / {root /usr/share/nginx/html/cashier;try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/ {proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-NginX-Proxy true;proxy_pass http://127.0.0.1:9076;}access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;
}

将上述代码修改为如下nginx location代码:

server {listen 80;server_name localhost;charset utf-8;location / {root /usr/share/nginx/html/cashier;try_files $uri $uri/ /index.html;index index.html index.htm;}location ^~/prod-api/ {proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-NginX-Proxy true;proxy_pass http://127.0.0.1:9076/;}access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log warn;
}

注意点:

  • 在proxy_pass 反向代理地址最后加一个/
  • 在location匹配的url路径前添加^~/

location ^~/prod-api/:匹配任何以 /prod-api/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条

  • 不可以使用:proxy_set_header Host $http_host;

我在现有环境的nginx里添加这段配置之后,访问会转不过去,查看nginx日志也只能看到是404信息,并没有更多定位问题的信息。检查了许久也没找到原因,于是注释掉location 里面所有配置,里面只加proxy_pass这段配置,结果nginx是能够转发成功的,这说明单独来看这条location的配置是没有问题的,很有可能是现有环境nginx里的某些配置影响到了这个转发。

为了定位问题原因,location下的配置逐个注释来定位问题,最后发现当注释掉proxy_set_header Host $http_host ;这条配置之后,就能成功转发了。这才注意到是反向代理配置的问题。

此配置的作用是:把原http请求的Header中的Host字段也放到转发的请求里。
如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。

但是现有环境中原有的配置也不能随便删掉,所以可以进行如下设置:

即,在location里面添加一条 proxy_set_header Host $proxy_host;配置。

设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404

nginx代理去掉URl前缀相关推荐

  1. Spring Cloud Gateway去掉url前缀

    主要是增加一个 route,其他配置不变 routes:- id: service_customeruri: lb://CONSUMERorder: 0predicates:- Path=/custo ...

  2. nginx 代理去掉#_Nginx proxy_pass详解

    假设server_name为www.test.com 当请求URL为http://www.test.com/zabbix/index.html时,以下示例的访问结果是 示例1: location /z ...

  3. php 去掉url中的index.php,php 去掉url中的index.php

    php去掉url中的index.php的方法:首先打开相应的代码文件:然后将if代码块嵌套在server代码块中:最后重启nginx服务器即可. 本文操作环境:nginx1.0.4系统.PHP7.1版 ...

  4. Nginx反向代理多个应用时,通过BluePring使Flask支持二级路径(URL前缀)

    1. 预期 最近陆续基于Nginx,完成了三个应用的部署: 应用A:<在Ngnix上部署Flask应用> 应用B:<PaddleOCR加载chinese_ocr_db_crnn_mo ...

  5. nginx反向代理替换URL

    系列文章目录 nginx反向代理替换URL 文章目录 系列文章目录 前言 一.location作用 二.直接替换location 匹配部分 前言 nginx 提供反向代理服务,日常开发过程中有时候我们 ...

  6. Nginx实现通过不同的url前缀访问不同的前后端项目

    ,所以目前就可以通过给网页访问链接增加不同的url前缀,来让Nginx去实现同一端口下访问不同的前后端项目.具体配置如下: (我这里是前端两个项目各自对应后端的两个服务) server {#这里默认监 ...

  7. tp6隐藏省略去掉url里的index.php路由前缀

    tp6隐藏省略去掉url里的index.php路由前缀方法 修改TP6框架public中.htaccess文件 <IfModule mod_rewrite.c>Options +Follo ...

  8. Web集群案例实战 -- Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战

    Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战 前言 一.需求背景 前言 本环境是基于 Centos 7.8 系统构建Nginx学习环境 具体构建,请参考 Nginx-1.18 ...

  9. PHP、Tomcat获取Nginx代理后的客户端真实IP

    PHP.Tomcat获取Nginx代理后的客户端真实IP 文章目录 PHP.Tomcat获取Nginx代理后的客户端真实IP 一.PHP获取Nginx代理后客户端真实IP Nginx配置 PHP配置 ...

最新文章

  1. Linxu安装Tomcat与Jdk并卸载自带OpenJdk
  2. canvas在舞台上点击后图片旋转_View绘制系列(10)Canvas基础变换
  3. python之turtle库(画图)
  4. ubuntu不显示壁纸,桌面右键无反应
  5. binder,hwbinder,vndbinder之间的关系
  6. python读取枚举_在python中枚举(enumerate in python)
  7. JS中配置打开邮箱的链接
  8. 利用Word2Vec模型训练Word Embedding,并进行聚类分析
  9. Java计算两个时间段的天数_java计算两个时间段的精确天数
  10. python分段函数编写程序_python分段函数如何编写?
  11. apple pencil有买的必要吗?便宜的平替电容笔推荐
  12. 中学校长在开学典礼上的讲话
  13. win7系统mscomctl.ocx不能注册
  14. java 教学大纲_Java程序设计课程教学大纲
  15. 你真正做到敏捷了吗?
  16. HTML-做一个网页的注册登记表单
  17. 【docker】docker介绍
  18. LaTex笔记:参考文献、常用公式符号、图表、注释
  19. 输入三个数字比较大小
  20. jQuery - Chaining

热门文章

  1. SpringAOP学习--SpringAOP简介及原理
  2. 负责任的告诉你:读完这5本书,你的智慧和颜值会上升一个台阶
  3. 软件测试周刊(第70期):让你遇到麻烦的不是未知,而是你确信的事,并非如你所想。
  4. 乐视加装ROS-IMU变身Astra520I
  5. onscroll事件与onscrollTop
  6. 网站优化的过程中,站长就是父母
  7. 长沙Uber优步司机奖励政策(3月28日)
  8. 为什么我国电网交流电是50Hz?
  9. [oeasy]python0097_苹果诞生_史蒂夫_乔布斯_沃兹尼亚克_apple_I
  10. thinkphp5使用phpword生成固定模板