原文链接

https://www.g2022cyk.top/archives/nginx%E4%B8%8B%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86

前言

最近正在开发项目,即用到了Java的Spring Boot,又用到了Python的Flask,为了保证在同一域名下访问,我使用了Nginx做反向代理,只代理一个还比较好配置,代理的多了各种接口疯狂报错。为了防止以后再踩坑,写下这篇博客来记录最正确的配置。

第一个代理

主应用接口

使用SpringBoot开发的应用,指向域名的根目录,代理地址http://127.0.0.1:9000。

location /
{proxy_pass http://127.0.0.1:9000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;#Set Nginx Cacheadd_header Cache-Control no-cache;
}

静态文件

如果只有一个应用的话可以这样写,只会代理如下格式文件。

location ~* \.(gif|png|jpg|css|js|woff|woff2)$
{proxy_pass http://127.0.0.1:9000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;expires 12h;
}

第二个代理

后端接口

这个是使用Flask开发的应用,指向/query目录,代理地址http://127.0.0.1:9099。

location ^~ /query
{proxy_pass http://127.0.0.1:9099;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;#Set Nginx Cacheadd_header Cache-Control no-cache;
}

前面的^~一定要写,不然它只能指向代理地址的第一层路径,剩下其他的就全执行不了了。

前端目录

这个没有什么好说的,设定好目录之后会自动指向index文件。

location /app
{alias /www/your-path/app;
}

你要硬说有坑的话,那就参见alias和root区别。

前端静态文件

虽然前面已经引用过根目录了,但是static目录并没有被引用,访问的话会直接指向第一个代理程序,所以我们还需要再引用一次。

location ^~ /app/static/
{alias /www/your-path/app/assets/;
}

前面的^~一定要写,不然访问文件疯狂404。

第三种写法

前两种写法虽然能用,但是写了两个总感觉有些多余,本身前端静态文件和静待文件就是在一起的,我们把它合并成一个。

location ^~ /app/
{alias /www/your-path/app/;
}

指定目录后面加上/就可以直接引导到整个文件夹。

负载均衡

负载地址

如果你怕一个服务宕机,想拥有更稳定的服务,你可以同时在两个服务器上部署应用,然后使用Nginx做负载均衡。

upstream fzjh
{server 127.0.0.1:5000 weight=2;server 127.0.0.1:5000 weight=1;
}
location /
{proxy_pass http://fzjh;proxy_set_header Host zxwS;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;#Set Nginx Cacheadd_header Cache-Control no-cache;
}

weight代表权重,理论上权重越高,被分配到该服务器的几率越大。

静态文件

在Nginx服务器上存储一份静态资源,使用下面这行代码引导。

location  ~* \.(gif|png|jpg|css|js|woff|woff2)$
{root /www/your-path/static;
}

alias和root区别

alias

location /static/
{alias /www/your-path/static/;
}

此时Nginx会自动去/www/your-path/static/目录找文件

root

location /static/
{root /www/your-path/static/;
}

此时Nginx会自动去/www/your-path/static/static/目录找文件,等于说多了一层

Nginx下的反向代理 双层代理 负载均衡相关推荐

  1. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  2. nginx反向代理,实现负载均衡

    nginx反向代理,实现负载均衡 一,先启动nginx和php-cgi #启动 php-cgi /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 8000 -C 5 ...

  3. Nginx代理功能与负载均衡详解

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...

  4. NGINX配置基于Node.js服务的负载均衡服务器

    NGINX配置基于Node.js服务的负载均衡服务器 本部署指南说明了如何使用NGINX开源和NGINX Plus在Node.js应用程序服务器池之间平衡HTTP和HTTPS通信.本指南中的详细说明适 ...

  5. CentOS+Nginx一步一步开始配置负载均衡

    Nginx负载均衡的理解 Nginx是一个轻量级的.高性能的WebServer,他主要可以干下面两件事: 作为http服务器(和apache的效果一样) 作为反向代理服务器实现负载均衡 现在Nginx ...

  6. Nginx以及通过Nginx实现tomcat集群配置与负载均衡

    Nginx简介 启动,停止,和重新加载配置文件命令 Nginx功能 正向代理和反向代理的区别 反向代理 负载均衡 1.RR(默认) 2.权重 3.ip_hash 4.fair(第三方) 5.url_h ...

  7. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了"蔷薇Nina"的"Nginx 相关介绍(Nginx是什么?能干嘛?)"一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前 ...

  8. tomcat7+nginx+memcached 配置tomcat 集群以及负载均衡

    首先:配置tomcat集群 nginx+ tomcat7 1 安装jdk (可以选择6或者7都可以) 此处不用多说. 2 下载nginx-1.2.5 (下载附件) 3 下载 memcached(下载附 ...

  9. Nginx源码实现的细枝末节 11个阶段的实现丨Nginx Filter|中间件开发|惊群效应|负载均衡丨组件丨c/c++linux服务器开发

    Nginx源码实现的细枝末节 11个阶段的实现 视频讲解如下,点击观看: Nginx源码实现的细枝末节 11个阶段的实现丨Nginx Filter|中间件开发|惊群效应|负载均衡丨组件丨c/c++li ...

  10. Nginx反向代理 实现Web负载均衡

    实现负载均衡的方式有很多种,DNS.反向代理.LVS负载均衡器(软件实现).F5(负载均衡器,硬件,非常昂贵)这里我们只提到基于DNS,以及反向代理的方式来实现负载均衡Web服务       DNS服 ...

最新文章

  1. c语言函数之间互相调用符号,如何实现C和C++函数互相调用
  2. python有没有三元运算符_Python基础入门:从变量到异常处理(1)
  3. 软考网络工程师--计算机硬件基础
  4. java 上传 进度条_Ajax上传文件并显示进度条
  5. Java泛型详解:<T>和Class<T>的使用,泛型类
  6. 更轻易地实现 Jwt Token
  7. bootstrap-select控件全选,全不选,查询功能实现
  8. php+分针和时针重合,时钟问题—两针重合
  9. 蔚来召回4803辆ES8电动汽车 自燃原因找到了?
  10. CIDR的IP地址与可分配的IP地址辨析
  11. 【X240 QQ视频对方听不到声音】解决方法
  12. linux ls-la/boot,CentOS系统启动/boot/vmlinuz修复(实验)
  13. win7虚拟磁盘服务器,深度Win7 64位旗舰版系统如何创建虚拟磁盘
  14. Globle.asax错误:异常详细信息: S…
  15. java特殊字符大全_java 字符串特殊符号
  16. oracle dbms_utility.get_time,dbms_utility如何使用?
  17. 算法设计题3.34-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
  18. Android 屏幕旋转的处理
  19. 浏览器开发者模式下你不可错过的Network面板知识
  20. 【原创】《矩阵的史诗级玩法》连载十六:二元二次方程一般式和圆锥曲线的关系(下)

热门文章

  1. 用计算机写作文主题,《用计算机写作文》教学设计(周未定)
  2. 基于Matlab的数字水印设计—基于DCT域的水
  3. 全文检索服务 _ ElasticSearch
  4. transforms操作
  5. ajax中的callback,ajax callback是什么
  6. 保龄球计分c语言程序,保龄球的积分计分规则
  7. sql内外连接的区别
  8. csgo怎么一直连接服务器失败,CSGO提示连接到官方任意服务器失败怎么办?
  9. python小白进阶之路三——七段数码管的绘制+做一个酷炫的倒计时(函数的复用)
  10. C:编译错误:error: array subscript is not an integer