1、概述

之前介绍过Nginx的简单使用,今天来聊聊Nginx的一些高级使用。

2、使用Nginx解决跨域问题

当公司存在多个域名时,两个不同的域名相互访问就会存在跨域问题。

或者在进行前端开发时,通常前端代码在本地启动,而后端代码会部署在一台专用的后端开发服务器上,此时前端去调用后端接口时,就会出现跨域问题。

解决跨域的方法有很多,今天来说一下如何使用Nginx来解决跨域问题。

假设后端服务器,是使用Nginx作为对外统一入口的,在Nginx配置文件的server块中增加如下配置:

# 允许跨域请求的域名,*代表所有
add_header 'Access-Control-Allow-Origin' *;
# 允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
# 允许请求的方法,例如:GET、POST、PUT、DELETE等,*代表所有
add_header 'Access-Control-Allow-Methods' *;
# 允许请求的头信息,例如:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent等,*代表所有
add_header 'Access-Control-Allow-Headers' *;

重新加载Nginx,便发现,已经可以跨域访问了。

3、验证头信息中的 referer 参数

请求头信息中的 referer 参数,记录了上一个页面的地址,Nginx可以对其进行校验,达到防盗链的目的。

通常在配置文件的location块中增加配置。

server {
listen 80; # 端口
server_name www.zhuifengren.cn; # 服务名,可以是IP地址或者域名 location / { # 根路径
      root html; # 对应nginx安装目标下的html文件夹
index hello.html; # 指定首页为 hello.html
} location ~* \.(GIF|PNG|jpg|bmp|jpeg) { # *代表不区分大小写
# 校验请求是否来自于zhuifengren.cn这个站点,不是则返回404页面
  valid_referers *.zhuifengren.cn;
  if ($invalid_referer) {
return 404;
  }
      root /home/img;
    } error_page 500 502 503 504 /50x.html; # 指定这些状态码跳转的错误页
location = /50x.html {
root html;
} }

4、Nginx构建Tomcat集群

Nginx最常用的一个功能,就是为Tomcat构建集群,以达到实现高并发、高可用的目的。

首先在 upstream 块中,配置Tomcat集群中的服务地址,然后在location块中配置转发请求到此 upstream。

# 配置Tomcat集群中的服务器
upstream zhuifengren {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080; server {
listen 80;
server_name www.zhuifengren.cn; location / {
proxy_pass http://zhuifengren;
} }

默认按所有机器权重为1的轮询方式对集群服务进行访问,每个服务访问1次,然后访问下一个服务,适合集群中每台服务器性能差不多的情况。

权重配置也是经常用的,适用于机器性能有差异的情况。

upstream zhuifengren {
  server 192.168.1.101:8080 weight=1;
  server 192.168.1.102:8080;
  server 192.168.1.103:8080 weight=3;
}

weight 就是权重配置,不配默认是1,按照以上配置,在5次请求中,101和102会被访问1次,103会被访问3次。

使用down,可以标识某个服务已停用,Nginx便不会去访问他了。

    upstream zhuifengren {
server 192.168.1.101:8080;
server 192.168.1.102:8080 down;
server 192.168.1.103:8080;
}

使用backup,可以标识101是备用机,当102、103宕机后,101会进行服务。

  upstream zhuifengren {
server 192.168.1.101:8080 backup;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}

使用 max_failsfail_timeout 将服务动态停用

max_fails 默认是1,fail_timeout默认是10s

  upstream zhuifengren {
server 192.168.1.101:8080 max_fails=2 fail_timeout=10s;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}

如此配置,101服务器在10秒内如果失败次数达到2次,会停用10秒。10秒后,会尝试连接101服务器,如果连接成功则恢复轮询方式,如果不成功,再等待10秒尝试。

5、使用keepalive设置长链接数量,提高吞吐量

  upstream zhuifengren {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080; keepalive 50;
} server {
listen 80;
server_name www.zhuifengren.cn; location / {
proxy_pass http://zhuifengren; proxy_http_version 1.1;
proxy_set_header Connection "";
} }

需要在upstream块中增加 keepalive 配置,在server的location块中增加 proxy_http_version 和 proxy_set_header 配置。

这样设置可以减少连接断开、新建的损耗,增加吞吐量。

6、其他负载均衡策略

除了前面说到的轮询方式,Nginx在负载均衡时,还有其他策略。

ip_hash:以客户端IP地址为依据,匹配服务器。
hash $request_uri:以请求的URL为依据,匹配服务器。
least_conn:以服务器连接数为依据,哪个服务器连接数少,匹配哪台服务器。

配置在upstream块中。

  upstream zhuifengren {

        # ip_hash;
# hash $request_uri;
least_conn; server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080; }

7、综述

今天介绍了一些Nginx的高级使用,希望大家多多沟通交流,共同成长。

Nginx的高级使用的更多相关文章

  1. nginx的高级配置和优化

    Nginx的高级配置(优化) 针对内核的配置优化 1)net.core.netdev_max_backlog 表示当网络接口接收数据包的速度大于内核处理这些包块的时候,允许发送到队列的数据包的最大数目 ...

  2. nginx篇高级之优化整理

    优化思路: 一.修改连接数和工作线程让其支持更多的并发量. worker_processes 2;                    //与CPU核心数量一致 worker_connections ...

  3. nginx篇高级用法之基于TCP/UDP的四层调度

    nginx 从1.9版本开始支持基于TCP/UDP的四层调度,在编译nginx时使用--with-stream开启该模块 支持TCP/UDP调度时,支持给所有的软件做调度器,例如:nfs smb ft ...

  4. nginx 之高级模块

    secure_link_module 模块 作用: 制定并允许检查请求的链接的真实性以及保护资源免遭未经授权的访问 限制链接生效周期 配置语法 Syntax:secure_link expressio ...

  5. nginx一些高级配置

    参数: https://www.wangbokun.com/%E8%BF%90%E7%BB%B4/2018/07/21/Nginx.html   免费证书等 1/ nginx代理hue限制上传文件大小 ...

  6. nginx的高级用法

    一.根据url中的参数来确定缓存的key set_by_lua_block $dataArg { local enc = ngx.req.get_uri_args()["enc"] ...

  7. [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  8. nginx系列 2 概述

    一. nginx功能概述 nginx 提供的基本功能服务归纳为:基本HTTP服务.高级HTTTP服务.邮件代理服务.TCP/UDP 代理服务等四大类. (1) Nginx提供基本HTTP服务,可以作为 ...

  9. [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

随机推荐

  1. proteus8.1 pro 中文版安装破解教程

    Proteus8 Pro是非常有名的EDA工具(仿真软件),从原理图布图.代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计.是唯一将电路仿真软件.PCB设计软 ...

  2. PHP:字符串转数组,数组转字符串;字符串截取、替换、查找

    字符串转数组$str = 'one|two|three|four'; print_r(explode('|', $str)); //explode 以字符串分割字符串到数组 $str = 'one t ...

  3. 适合普通大学生的 Java 后端开发学习路线

    大家好,我是帅地. 接下来的一段时间,帅地会总结各种技术栈的学习路线,例如 Java 开发,C++ 开发,python 开发,前端开发等等,假如你没有明确的目标,或许可以按照我说的学习路线来学习一波, ...

  4. anyRTC Web SDK 实现音视频呼叫功能

    前言 大家好,今天小编带给大家一个基于 anyRTC Web SDK 实现音视频呼叫的功能(本项目采用vue开发). 前提条件 在开始写代码之前还需要做一些准备工作,如果你之前没有使用过 anyRTC ...

  5. Linux下的Vim文本编辑器(入门)

    引言 vim filename:打开名为filename的文件,如果不存在就会创建一个filename文件 Vim的三种使用模式 1. 命令模式 启动Vim时,就进入了命令模式 在该模式下: i:切换 ...

  6. Android音视频开发(1):H264 基本原理

    前言 H264 视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的.随着 x264/openh264 以及 ffmpeg 等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大 ...

  7. TextLineCodecFactory笔记

    Mina的TextLineCodecFactory将字符串编码为字节流,将字节流解码为字符串,下面是使用中遇到的两个问题. TextLineCodecFactory改变了message的类型 acce ...

  8. 解决SecureCRT中删除会话后无法重建问题

    SecureCRT和SecureFX中创建一个会话(例如名为"10.0.2.47")后,如果删除这个会话,然后再创建一个同样名字的会话,就会报错,原因是SecureCRT在C盘上创 ...

  9. 不懂Ribbon原理的可以进来看看哦,分析SpringBoot自动装配完成了Ribbon哪些核心操作

      前面详细的给大家介绍了SpringBoot的核心内容,有了这部分的基础支持的话,我们再来分析SpringCloud中的相关组件就很容器了,本文我们来给大家开始介绍Ribbon的相关内容,首先来介绍 ...

  10. linux虚拟机环境快速搭建redis5.x版本的主从集群总结

    文/朱季谦 我在阿里云服务器上曾参与过公司redis集群的搭建,但时间久了,都快忘记当时的搭建过程了,故而决定在虚拟机centOS 7的环境,自行搭建一套redis5.x版本的集群,该版本集群的搭建比 ...