如何让多个不同类型的后端网站用一个nginx进行反向代理实际场景分析

news/2024/5/20 15:48:10/文章来源:https://blog.csdn.net/mezheng/article/details/103974602

前段时间公司根据要求需要将聚石塔上服务器从杭州整体迁移到张家口,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完

成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今零零散散部署在生产上一些可视化UI:apollo,kibana,grafana,jenkins 等等要么采用80端口,要

么对公开放了其他端口,为了安全,现在不再开放非80之外的公网端口,由于机器少了,80端口不够,这些可视化UI不再能直接访问到了。所以需另寻其他出路。

 

一:用nginx做反向代理

      为了解决这两个问题,自然第一反应想到的就是使用反向代理,我的理想构思下应该是下图这样的。

     既用户所有的请求都经过nginx,让nginx来判断当前url需要跳转到哪一个后端代理上,比较好的策略应该是让nginx来判断当前的host是什么来决定跳转到后端

的哪一个webserver上,比如a.mip.com 就跳转到apollo,j.mip.com 就跳转到jenkins. 以此类推,这样就可以完美解决了,是吧? 在nginx中你完全可以使用rewrite

模块下if指令来进行判断。

 

二:使用if指令

 

      这里要提一下,nginx比较原始化,如果需使用第三方module,你还需要重新编译nginx,用起来很麻烦,所以这里干脆使用OpenResty,它扩展了nginx,并且

集成了很多成熟的lua模块,自行下载最新的1.15.8,安装方式和nginx一模一样。

 

默认是安装到/usr/local/目录下,当你看到有一个openresty目录表示你安装成功。

[root@localhost local]# ls
bin  etc  games  include  lib  lib64  libexec  openresty  sbin  share  src
[root@localhost local]# pwd
/usr/local

 

接下来你可以使用 nginx  -v 来看一下openresty版本号啥的。

[root@localhost sbin]# pwd
/usr/local/openresty/nginx/sbin
[root@localhost sbin]# 
[root@localhost sbin]# ./nginx -v
nginx version: openresty/1.15.8.1

 

为了方便,我就直接使用nginx开启三个server:

<1>  192.168.23.129:80       nginx上开启的第一个网站,就是proxy了。

<2>  192.168.23.129:8001      nginx上开启的第二个网站,模拟apollo。

<3>  192.168.23.129:8002      nginx上开启的第三个网站,模拟jenkins。

 

1.  apollo的模拟:

复制代码

    server {listen       8001;server_name  somename  alias  another.alias;location / {root   html;index  apollo.html;}}

复制代码

 

    8001端口网站的默认页是apollo.html,这个apollo.html所在路径就是在nginx下的html目录,如下所示。

[root@localhost html]# pwd
/usr/local/openresty/nginx/html
[root@localhost html]# ls
50x.html  apollo.html  index.html  jenkins.html

 

2. jenkins的模拟

复制代码

    server {listen       8002;server_name  somename  alias  another.alias;location / {root   html;index  jenkins.html;}}

复制代码

   

      jenkins.html的文件所在路径如上所示哈。不再赘述。

 

3. proxy的模拟

复制代码

    server {listen       80;server_name  localhost;location / {if ($host = "a.mip.com") {proxy_pass http://localhost:8001;}if ($host = "j.mip.com") {proxy_pass http://localhost:8002;}}

复制代码

 

      可以看到,只需要使用rewrite模块下的if条件语句,通过$host系统变量判断当前的url中的host的值跳转到相应的网站。

 

4. host映射

       好了,接下来只需要将a.mip.com 和 j.mip.com 映射到nginx的ip地址192.168.23.129即可。因为这些域名方便记忆而不是真实存在的。

192.168.23.129 a.mip.com
192.168.23.129 j.mip.com

 

5. 启动nginx

复制代码

[root@localhost sbin]# ./nginx 
[root@localhost sbin]# 
[root@localhost sbin]# 
[root@localhost sbin]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      3802/nginx: master  
tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN      3802/nginx: master  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3802/nginx: master  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1172/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1724/master         
tcp6       0      0 :::22                   :::*                    LISTEN      1172/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1724/master  

复制代码

    

    通过上图可以看到,80,8001,8002 端口都已经开启了,接下来大家可以到浏览器去验证一下了。

 

 

          可以看到这个问题已经很完美的解决了,好了,这就是本篇和大家聊到的实际场景中遇到的一个问题,希望本篇对你有帮助,以下是全部的nginx.conf。

 

复制代码

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;log_format  main  '$host ----> $remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;# location = /get {#     set_unescape_uri $key $arg_key;  # this requires ngx_set_misc#     redis2_query get $key;#     redis2_pass 10.105.13.174:6379;# }location / {if ($host = "a.mip.com") {proxy_pass http://localhost:8001;}if ($host = "j.mip.com") {proxy_pass http://localhost:8002;}root   html;index  index.html index.htm;   }#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration#server {listen       8001;server_name  somename  alias  another.alias;location / {root   html;index  apollo.html;}}server {listen       8002;server_name  somename  alias  another.alias;location / {root   html;index  jenkins.html;}}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_850854.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

色情网站的光棍节“福利”:加密式挂马玩转流氓推广

结语&#xff1a;攻击者对相关加密算法比较了解&#xff0c;选用了较为少见的Rabbit对称加密算法&#xff1b;攻击者具备一定的前端开发经验&#xff0c;代码容错性强&#xff0c;兼容性高了&#xff1b;后台不再是静态文件&#xff0c;而采用了动态生成内容&#xff0c;生成的…

docker搭建网站详细

远程连接centos7 这里我用的是xshell连接centos7 下载docker 这里我用的是阿里的Docker CE 镜像源站 这里我用的是centos7搭建的,如果是ubuntu的可以进上面那个网站上看 step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lv…

GoDaddy网站程序根目录 网站文件上传到虚拟主机哪个目录

用的linux虚拟主机&#xff0c;网站根目录为public_html&#xff0c;(window主机的目录为httpdocs)我们需要把本地做好的网站上传到此目录下 cPanel控制面板 - 文件管理器 - public_html 转载于:https://www.cnblogs.com/bubuchu/p/10216970.html

论文网站及使用方法(ResearchGate、Sci-Hub等)

文章目录1 浏览器准备1.1 Microsoft Edge1.2 Google Chrome2论文网站2.1 ResearchGate2.2 SCI-HUB2.3 谷歌学术2.4谷粉学术3.数据网站3.1镝数聚3.2国泰安数据库1 浏览器准备 ✨ 这两个浏览器不是必需的&#xff0c;只是这两个浏览器适配大多数的网站&#xff0c;其中chrome已成…

大型网站技术架构:大型网站架构演化

这是《大型网站技术架构》的系列读书记录。 一&#xff0c;大型网站软件系统的特点 1&#xff0c;高并发&#xff0c; 大流量。 每秒7亿次请求&#xff0c;阿里新一代数据库如何支撑&#xff1f; PV&#xff08;Page View&#xff09;访问量&#xff0c;即页面浏览量或点击量…

vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别(上)

http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361558.html 一&#xff1a;先来看看 新建网站 里面的 ASP.NET 网站的建立过程 我们采用 3层架构 如果我们想把整个项目放到 D:\web网站建设 这个文件夹来&#xff0c;那么我们建立Web层的时候&#xff0c;Web层的地…

vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)

地址&#xff1a;http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361686.html 二&#xff1a;下面是 通过 新建项目 来创建 ASP.NET web 应用程序 下面我们创建 数据库DAL层 和 实体类层 Model 他会自动生成 DAL 文件夹 我们继续 Model 层。方法同上&#xff0c;就不…

部署网站出错,定义了重复的“entityFramework”节点

网站在本地运行正常&#xff0c;部署到服务器&#xff0c;访问出现以下 “entityFramework”节点只定义了一个&#xff0c;但它认为是有多个&#xff0c;最终把该节点屏蔽后网站才能正常运行。没弄明白原理。。。

说说大型高并发高负载网站的系统架构

转载请保留出处&#xff1a;俊麟 Michael’s blog (http://www.toplee.com/blog/?p71) Trackback Url : http://www.toplee.com/blog/wp-trackback.php?p71 我在CERNET做过拨号接入平台的搭建&#xff0c;而后在Yahoo&3721从事过搜索引擎前端开发&#xff0c;又在MOP处理…

MySQL在大型网站的应用架构演变

MySQL在大型网站的应用架构演变 http://www.tuicool.com/articles/VZF3aiF 【编者按】作为最流行的开源数据库&#xff0c;MySQL被广泛应用在Web应用程序以及其它中小型项目上。然而不可忽视的是&#xff0c;在许多大型IT公司中&#xff0c;MySQL在高度优化和定制化后&#x…

MySQL 在大型网站的应用架构演变

写在最前: 本文主要描述在网站的不同的并发访问量级下&#xff0c;Mysql架构的演变 可扩展性 架构的可扩展性往往和并发是息息相关&#xff0c;没有并发的增长&#xff0c;也就没有必要做高可扩展性的架构&#xff0c;这里对可扩展性进行简单介绍一下&#xff0c;常用的扩展手段…

Android开发中混淆后Gson序列化、反序列化的那些坑,网站开发前后端分离

为什么呢? 因为反序列化创建对象本质还是利用反射, 会根据 json 字符串的 key 作为属性名称, value 则对应属性值. 如何解决 将序列化和反序列化的类排除混淆 使用 SerializedName 注解字段 SerializedName(parameter) 通过注解属性实现了 序列化的结果中, 指定该属性 ke…

Hexo+Coding搭建自己的博客网站系列1-本地环境部署

前言 我的博客&#xff1a;https://fitz1318.top/ 最近我终于实现了自己很久之前关于搭建自己专属的博客网站的目标&#xff0c;现在把搭建期间的过程和走过的坑记录下来&#xff0c;如果你对搭建自己的网站有兴趣&#xff0c;不妨可以参考一下我的文章。 首先我说下自己的版本…

Hexo+Coding搭建自己的博客网站系列2-部署博客到Coding上

前言 欢迎浏览我的网站https://fitz1318.top/ 最初&#xff0c;我是选择部署到Github上的&#xff0c;但是最后在弄百度收录时出现了问题&#xff0c;Github Pages屏蔽了百度爬虫&#xff0c;这样子你的博客就没办法被百度收录了。 注册并新建仓库 Coding的网址 &#xff0c…

Hexo+Coding搭建自己的博客网站系列3-详述站点全局配置文件

Hexo 目录如下图 欢迎浏览我的博客&#xff1a;https://fitz1318.top/ 这是Blog文件的目录。从上到下依次解释 node_modules:hexo整个项目的环境依赖&#xff0c;hexo初始化时自动生成的。public:存放的是整个项目的页面&#xff0c;样式&#xff0c;及逻辑代码。scaffolds:s…

【教程】Hexo+Coding搭建自己的博客网站系列5-Next6.7版本主题深度美化

在我进行主题优化的时候&#xff0c;参考了网上很多文章&#xff0c;但是随着Next版本的变迁&#xff0c;越来越多个性化设置已经被集成到Next中。所以我写了这篇关于Next6.7版本主题优化的方案。有时间和精力的话&#xff0c;这篇文章也会随着Next版本变迁持续更新.欢迎浏览我…

前端开发值得收藏的网站

工作空闲时间&#xff0c;作为前端开发人员&#xff0c;还是希望利用好这段宝贵的时间多学习一些前端资源&#xff0c;了解当前前端知识体系&#xff0c;从整体上对当前行业有一个由浅入深的了解和掌握。后续还会慢慢更新好用的前端相关网站&#xff0c;加油&#xff01; 1.Co…

服务器电脑无限重启,win10电脑蓝屏无限重启_网站服务器运行维护

win10电脑锁屏时间设置_网站服务器运行维护win10电脑锁屏时间设置方法是&#xff1a;1、首先点击【windows】&#xff0c;点击【设置】&#xff1b;2、然后点击【系统】选项&#xff0c;选择【电源和睡眠】选项&#xff1b;3、最后设置锁屏时间即可。第一步&#xff1a;进入Win…

设计响应式网站-Bootstrap(1)

1.Bootstra介绍 2011年&#xff0c;twitter的“一小撮”工程师为了提高他们内部的分析和管理能力&#xff0c;用业余时间为他们的产品构建了一套易用、优雅、灵活、可扩展的前端工具集--BootStrap。Bootstrap由MARK OTTO和Jacob Thornton所设计和建立&#xff0c;在github上开…

财经资讯网站--某联社参数破解

本文仅供学习&#xff0c;如有侵权或问题联系博主&#xff0c;感谢阅读 目标链接&#xff1a;aHR0cHM6Ly93d3cuY2xzLmNuL2RlcHRoP2lkPTEwMDA 抓包分析&#xff1a; 可以看到加密参数只有一个sign&#xff0c;像这种sign的一搜肯定一堆。所以我拿sv去搜了&#xff0c;看着像m…