nginx配置域名后的二级目录访问不同项目的配置操作


Posted in Javascript onNovember 06, 2020

场景描述:

通过二级目录(虚拟目录,应用程序)的方式访问同一ip+端口的不同应用,例如location是用户使用页面,location/admin/是管理页面,location部署在192.168.1.100的80端口,location/admin部署在172.20.1.32的8080端口上。

解决方案:

使用nginx反向代理,配置如下:

server {
    listen 80;
    server_name demo.domain.com;
    #通过访问service二级目录来访问后台
  location /service {
      #DemoBackend1后面的斜杠是一个关键,没有斜杠的话就会传递service到后端节点导致404
      proxy_pass   http://DemoBackend1/;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    #其他路径默认访问前台网站
    location / {
      proxy_pass http://DemoBackend2;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
 
#简单的负载均衡节点配置
upstream DemoBackend1 {
   server 192.168.1.1;
   server 192.168.1.2;
   ip_hash;
 }
upstream DemoBackend2 {
   server 192.168.2.1;
   server 192.168.2.2;
   ip_hash;
}

但是这种方式,二级目录的样式文件都不会正常显示,他们不会自动在二级目录下查找,而是在根目录中查找,在跳转页面的时候也会报404错误。不知道是不是配置有误,在server块中配置了root或是rewrite都不能解决。

试着在proxy_pass后面加上二级目录,并且和location块的二级目录相同,配置如下:

server {
    listen 80;
    server_name demo.domain.com;
    #通过访问service二级目录来访问后台
  location /service {
      #DemoBackend1后面的斜杠是一个关键,没有斜杠的话就会传递service到后端节点导致404
      proxy_pass   http://DemoBackend1/service;#DemoBackend1网站中要配置一个名称为service的虚拟目录,并且和location的二级目录名称一致
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    #其他路径默认访问前台网站
    location / {
      proxy_pass http://DemoBackend2;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
 
#简单的负载均衡节点配置
upstream DemoBackend1 {
   server 192.168.1.1;
   server 192.168.1.2;
   ip_hash;
 }
upstream DemoBackend2 {
   server 192.168.2.1;
   server 192.168.2.2;
   ip_hash;
}

问题解决

另外,在实际应用中,我使用了asp.net 的mvc,将mvc设置为网站的方式没有问题,如果是虚拟目录的方式就会找不到路径,是因为自己在网站中的地址很多写的都不规范,正确的方式应该是:

Here's a typical example of what you should never do:

<script type="text/javascript">
  $.ajax({
    url: '/home/index'
  });
</script>
and here's how this should be done:

<script type="text/javascript">
  $.ajax({
    url: '@Url.Action("index", "home")'
  });
</script>
Here's another typical example of something that you should never do:

<a href="/home/index" rel="external nofollow" >Foo</a>
and here's how this should be written:

@Html.ActionLink("Foo", "Index", "Home")
Here's another example of something that you should never do:

<form action="/home/index" method="opst">

</form>
and here's how this should be written:

@using (Html.BeginForm("Index", "Home"))
{

}

补充知识:使用nginx服务器,实现同一IP同一端口访问不同项目,以域名区分所访问项目

这里我使用了两台nginx服务器,一台服务器将不同项目绑定到不同端口,一台服务器将不同域名分发到不同端口的项目上。

第一台nginx的conf文件server部分:

server {
    listen    8000;
    server_name localhost;
    root  E:/test/pro1;
    location / {
      index  index.html index.htm; 
    }
  }

  server {
    listen    8001;
    server_name localhost;
    root  E:/test/pro2;
    location / {
     index  index.html index.htm;  
    }
  }

第二台nginx的conf文件的server部分:

server {
    listen    80;
    server_name www.testpro01.com testpro01.com;
    location / {
      proxy_pass  http://127.0.0.1:8000;
    }
  }

  server {
    listen    80;
    server_name www.testpro02.com testpro02.com;
    location / {
     proxy_pass  http://127.0.0.1:8001/;
    }
  }

最后用bat文件用以对两个nginx服务器进行操作

启动文件如下:start.bat

@echo off
echo [start...]
cd /d E:
cd spiovnet\nginx-1.16.1
call start nginx.exe
cd /d D:
cd nginx-1.16.1
call start nginx.exe
echo [end...]
@pause

其他的雷同,只是命令不一样

nginx启动命令:start nginx.exe 或者 nginx

nginx重新加载配置命令:nginx -s reload

ngin重启命令:nginx -s reopen

ngin关闭命令:nginx -s stop

以上这篇nginx配置域名后的二级目录访问不同项目的配置操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
去除链接虚线全面分析总结
Aug 15 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
js实现点击添加一个input节点
Dec 05 Javascript
ECMAScript6中Map/WeakMap详解
Jun 12 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
详解vue-router和vue-cli以及组件之间的传值
Jul 04 Javascript
PHP自动加载autoload和命名空间的应用小结
Dec 01 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 Javascript
解决Element中el-date-picker组件不回填的情况
Nov 07 Javascript
JS+CSS实现动态时钟
Feb 19 Javascript
Jquery Fade用法详解
Nov 06 #jQuery
nuxt静态部署打包相对路径操作
Nov 06 #Javascript
全网小程序接口请求封装实例代码
Nov 06 #Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 06 #Javascript
微信小程序自定义tabBar的踩坑实践记录
Nov 06 #Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 #Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
Nov 06 #Javascript
You might like
十天学会php之第二天
2006/10/09 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
了解重排与重绘
2019/05/29 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
Python验证码识别的方法
2015/07/10 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
详解python中的 is 操作符
2017/12/26 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
总经理司机职责
2014/02/02 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
升职自荐信怎么写
2015/03/05 职场文书
廉政承诺书范文
2015/04/28 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python