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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
JS 学习笔记 防止发生命名冲突
Jul 30 Javascript
jquery中ajax学习笔记4
Oct 16 Javascript
js创建子窗口并且回传值示例代码
Jul 02 Javascript
页面按钮禁用与解除禁用的方法
Feb 19 Javascript
node.js中的fs.readlink方法使用说明
Dec 17 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
Dec 04 Javascript
详解vue-Resource(与后端数据交互)
Jan 16 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
vue+element树组件 实现树懒加载的过程详解
Oct 21 Javascript
如何正确理解vue中的key详解
Nov 02 Javascript
ant design实现圈选功能
Dec 17 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 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
如何完美的建立一个python项目
2020/10/09 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
经理管理专业自荐信范文
2013/12/31 职场文书
服装店营销方案
2014/03/10 职场文书
初三开学计划书
2014/04/27 职场文书
机电一体化专业求职信
2014/07/22 职场文书
公司周年庆典标语
2014/10/07 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers