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 相关文章推荐
ImageFlow可鼠标控制图片滚动
Jan 30 Javascript
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
JavaScript 对象的属性和方法4种不同的类型
Mar 19 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
jQuery实现搜索页面关键字的功能
Feb 16 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
Vue响应式原理深入解析及注意事项
Dec 11 Javascript
详解Vue中watch的详细用法
Nov 28 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
Jul 24 Javascript
javascript头像上传代码实例
Sep 28 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 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各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
python验证码识别的实例详解
2016/09/09 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
python分布式环境下的限流器的示例
2017/10/26 Python
python构建深度神经网络(DNN)
2018/03/10 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
pytorch梯度剪裁方式
2020/02/04 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
美国最大网上鞋店:Zappos
2016/07/25 全球购物
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
注塑工厂厂长岗位职责
2013/12/02 职场文书
电钳工人个人求职信
2014/05/10 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
普通话演讲稿
2014/09/03 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python