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 相关文章推荐
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
ExtJs中简单的登录界面制作方法
Aug 19 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
Jun 20 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
js修改table中Td的值(定义td的单击事件)
Jan 10 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
js事件绑定快捷键以ctrl+k为例
Sep 30 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
Sep 06 Javascript
AngularJs  unit-testing(单元测试)详解
Sep 02 Javascript
微信小程序之前台循环数据绑定
Aug 18 Javascript
详解一个小实例理解js原型和继承
Apr 24 Javascript
JavaScript中的this妙用实例分析
May 09 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上传文件参考配置大文件上传
2015/12/16 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
Python 从相对路径下import的方法
2018/12/04 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
python关于变量名的基础知识点
2020/03/03 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
司机检讨书
2014/02/13 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
电力培训心得体会
2014/09/02 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
关于nginx 实现jira反向代理的问题
2021/09/25 Servers