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 相关文章推荐
JS获取各种浏览器窗口大小的方法
Jan 14 Javascript
JavaScript 实现鼠标拖动元素实例代码
Feb 24 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
May 31 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
Aug 05 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
Mar 01 Javascript
解读vue生成的文件目录结构及说明
Nov 27 Javascript
微信小程序使用二次贝塞尔曲线画波浪
Dec 25 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
Feb 17 Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 08 Javascript
JavaScript实现登录窗体
Jun 22 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
模拟xcopy的函数
2006/10/09 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
python logging设置level失败的解决方法
2020/02/19 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
python实现控制台输出颜色
2021/03/02 Python
德国综合购物网站:OTTO
2018/11/13 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
社团活动总结
2014/04/28 职场文书
公司联欢会策划方案
2014/05/19 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
同学会演讲稿
2019/04/02 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis