Nginx 学习笔记总结(三)

1. 在nginx中配置静态资源防盗链


如果不想让其它网页来访问到我们的nginx服务器,我们可以配置防盗链的效果。

server {
    listen       89;
    server_name  localhost;

    # 允许跨域请求的域,*代表所有。
    add_header 'Access-Control-Allow-Origin' *;
    # 允许带上cookie请求
    add_header 'Access-Control-Allow-Credentials' 'true';
    # 允许请求的方法,比如:get,post,put,delete
    add_header 'Access-Control-Allow-Methods' *;
    # 允许请求的header请求头
    add_header 'Access-Control-Allow-Headers' *;

    #对源站点验证
    valid_referers *.itholmes.com;
    #非法引入会进入下方判断
    if ($invalid_referer) {
        return 404;
    }

    # 如果上面匹配成功,就会走下面的location映射去;如果不匹配的话,就会返回404。

    location ^~ /static/img {
        root   /opt;
    }

}

当通过别的域名来访问进来时,就会拿不到数据了。
在这里插入图片描述

2. Nginx的模块化体系


在这里插入图片描述
在这里插入图片描述

3. 四层和七层负载均衡


首先,集群的效果是1+1大于2的效果。

在这里插入图片描述
在这里插入图片描述

(一般四层负载均衡是转发请求返回响应的。而七层的负载均衡是一般是处理请求响应的。)

在这里插入图片描述


注意:proxy_pass代理转发指令作用!

在这里插入图片描述

4. 使用JMeter测试集群的并发异常率

4.1 Jmeter介绍


Jmeter是一个性能测试工具,可以在apache官方上面看到:https://jmeter.apache.org/download_jmeter.cgi

在这里插入图片描述

4.2 Jmeter的使用


启动jmeter,双击jmeter.bat文件。
在这里插入图片描述


先创建一个线程组:
在这里插入图片描述
定义好线程数量(其实这里的线程数量就是用户的数量):
在这里插入图片描述
在这里插入图片描述


在线程组里面添加http请求:(注意Sampler取样器)
在这里插入图片描述
在这里插入图片描述


添加Listener监听器:
在这里插入图片描述
在这里插入图片描述


开始测试和清除测试信息:
在这里插入图片描述

5. 负载均衡的实现

5.1 负载均衡 轮询


轮询是nginx默认的一种策略,如果不设置weight那么默认都是1,也就是轮询。
在这里插入图片描述

5.2 负载均衡 加权轮询


在这里插入图片描述

5.3 upstream指令参数


max_conns参数:每一台服务器的最大连接数。使用此参数,记得看nginx.conf的worker_processes是否为1。使用单个工作进程,就不会使用到共享内存。
在这里插入图片描述


slow_start:使服务器在指定时间内慢慢启动。(注意:此参数在商业版nginx才有效)
在这里插入图片描述


down:告知nginx此集群中的这台server服务器已经不可用。

在这里插入图片描述


backup:备份server服务器。当集群中的其他服务器全部宕机时,会启用设置了backup参数的服务器。平常状态不启用

在这里插入图片描述


max_fails和fail_timeout:最大失败次数和失败时间段, max_fails次失败后,暂停fail_timeout时间。
在这里插入图片描述

5.4 使用keepalived提高吞吐量


Jmeter查看吞吐量。
在这里插入图片描述


keepalive配置:定义最大长连接的数量。长连接的好处就是大大减少了连接的创建维护损耗等情况。

因为nginx默认http协议是1.0,1.0长连接目前是不适用的。因此要在虚拟主机location中设置proxy_http_version 1.1;版本,要设定http协议版本为1.1才可以。

proxy_set_header Connection “”;1.1不需要,所以清空Connection响应头。

在这里插入图片描述

5.5 负载均衡 ip_hash


对于不同的ip根据hash算法求模,从而访问不同的服务器。
在这里插入图片描述


ip_hash指定服务器,它是有一个hash算法的,通过hash算法取模来获取对应服务器的索引。
在这里插入图片描述


配置就是在upstream中添加一个ip_hash参数就可以了。
在这里插入图片描述


我们可以在原来的源码包中,获取它的ip_hash源码。首先,进入nginx-1.20.2/src/http/modules的目录下:
在这里插入图片描述


一致性哈希算法大体流程:
在这里插入图片描述

5.6 负载均衡 url_hash


url_hash算法:

在这里插入图片描述
在这里插入图片描述

5.7 负载均衡 least_conn


least_conn算法:
在这里插入图片描述
在这里插入图片描述

6. Nginx控制浏览器缓存


在这里插入图片描述
我们要实现的是前半部分,缓存到浏览器。


缓存设置是在location指令模块下配置,学习下面的内容要注意响应头的cache-control响应头。

通过expires [time]指令,设置过期时间:
在这里插入图片描述
浏览器端可以看到一些响应头中的信息,过期时间等:
在这里插入图片描述
在这里插入图片描述


expires @[time] 指令:这个指令是设置指定时间。@22h30m就是22点30分过期。
在这里插入图片描述


expires -[time] 指令:负号代表已经过期了
在这里插入图片描述


expires epoch指令:也就是nocache,没有缓存。
在这里插入图片描述
在这里插入图片描述


expires off指令:不设置缓存,缓存机制就使用浏览器默认的。

在这里插入图片描述
在这里插入图片描述


expires max指令:设置一个最长最大的过期时间。
在这里插入图片描述
在这里插入图片描述

7. Nginx反向代理缓存


在这里插入图片描述
具体配置见下图:
在这里插入图片描述

8. 使用Nginx配置SSL证书提供HTTPS访问

8.1 SSL证书的获取


https是安全的!

现在很多网站如果不是https的话,审核不通过的!

SSL(Secure Sockets Layer)证书,中文含义为安全套接层。

首先,需要有一个域名,我们可以在自己不同的云服务器上面使用免费的SSL证书,然后下载就可以。
在这里插入图片描述
(别忘记配置对应域名和提交基本信息。)


拿到对应的SSL证书。
在这里插入图片描述


下载拿到的文件解压后,发送到我们的云服务器上面去:
在这里插入图片描述

8.2 使用Nginx配置Https域名证书


之后在就是在nginx中使用这两个文件(证书和秘钥)。

第一步:安装SSL模块。

要在nginx中配置https,就必须安装ssl模块,也就是:http_ssl_module。

  • 进入到我们nginx的解压目录下面,执行./configure --with-http_ssl_module命令,新增ssl模块。
  • 之后在进行make编译和make install安装。

在这里插入图片描述


第二步:修改nginx.conf配置文件,配置HTTPS。

这里有个端口对应http协议默认对应端口是80,https默认对应端口是443。

# 配置https
server {
    # https默认是443
    listen       443 ssl;
    server_name  localhost;

    # 开启ssl
    # ssl on; 这里经过说ssl指示已经弃用了。用上面ssl方式。

    # 配置ssl证书,注意这里我们的证书和秘钥和nginx.conf文件同级目录下,因此直接使用名字。
    ssl_certificate      7336736_www.itholmes.top.pem;
    # 配置证书秘钥
    ssl_certificate_key  7336736_www.itholmes.top.key;
    # ssl会话cache
    ssl_session_cache    shared:SSL:1m;
    # ssl会话超时时间
    ssl_session_timeout  5m;

    # 配置加密套件,写法遵循openssl标准。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

   location / {
        proxy_pass http://itholmes/;
        index  index.html index.htm;
    }
}

配置好后,重新reload一下nginx。这样我们的ssl就配置完成。

还是要注意云端服务器要开启443端口才可以!
在这里插入图片描述

最后,最好是重启一下nginx服务器,让443端口能够被master进程监听到!
在这里插入图片描述

9. Nginx 之 动静分离


动静分离就是静态数据和动态数据分离开来。

  • 静态数据:css/js/html/images/audios/videos … 等静态资源。
  • 动态数据:得到的响应可能会和上一次不同。

动静分离的方式CDN:

cdn加速服务是内容分发网络(Content Delivery Network,CDN),这些cdn服务器提供的都是第三方要使用的静态资源。


动静分离的方式Nginx

一般服务器有二级域名之类的,例如:api.itholmes.com专门掉接口的域名等等。

静态资源:

  • 直接放到nginx服务器中,用户请求直接在nginx服务器上面发送。
  • 也可以在upstream里面引入多台服务器,这几台服务器专门用于处理静态资源。(也就是静态资源服务器的集群效果)

在这里插入图片描述

动态数据:

  • 对于动态数据的一些操作参数,那就直接通过server和upstream走进专门业务的tomcat服务器集群就可以。

在这里插入图片描述


动静分离的问题:

  • 跨域问题(解决办法:SpringBoot和Nginx支持跨域,jsonp形式接受)。
  • 分布式会话,保证用户一直是同一个用户操作(解决办法:分布式缓存中间件Redis)

10. Nginx需要安装的依赖环境


安装nginx需要依赖的环境:

  • 1.安装gcc环境:yum install gcc-c++
  • 2.安装pcre库,用于解析正则表达式:yum install pcre pcre-devel
  • 3.zlib压缩和解压缩依赖:yum install -y zlib zlib-devel
  • 4.SSL安装的加密的套接字协议层,用户HTTP安全传输,也就是https:yum install -y openssl openssl-devel

11. Nginx云端实现动静分离


第一步:动静分离很简单,将所有的前端静态资源项目放到一个目录中,这里放到了/website/fooie-shop下。
在这里插入图片描述

第二步:然后,配置虚拟主机作为静态资源服务器,来进行接收访问:
在这里插入图片描述

12. Nginx查看日志使用tail命令


我们查看日志通常使用vim命令,但是这个vim是打开全部日志,这样查看日志很麻烦。可以通过tail命令来查看,会从最后往上一段时间看。

13. 前端服务器 和 后台服务器


如果有前端服务器和后台服务器,像Vue这种前后端分离的项目。

  • 直接写两个location,一个匹配Vue打包后的前段页面;一个匹配后台服务器的相关信息。
  • 此外要注意最下面两个location:rewrite,有斜杆和没斜杆的区别!
    在这里插入图片描述

14. nginx遇到的一些细节问题

14.1 server的 / 优先级是最低的


在nginx.conf文件总,server的 / 优先级是最低的。

14.2 -c 参数来指定配置文件


# 检测指定配置文件
nginx -t -c ./conf/nginx.conf 的-c是指定配置文件。
# 指定配置文件启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# 指定配置文件重启
/usr/local/nginx/sbin/nginx -s reload -c /usr/local/nginx/conf/nginx.conf

14.3 反向代理


在这里插入图片描述

在这里插入图片描述

针对location的匹配规则:

  • 对应上面的~符号来查看。
    在这里插入图片描述

14.4 判断是nginx的404还是tomcat的404


其实就是遇到错误,首先判断是nginx的错误页面,还是tomcat或者其他服务器的页面等等。

14.5 ip_hash的负载均衡策略解释


ip_hash定位服务器,来达到始终访问同一台服务器。

这样像什么session会话机制就解决了。

固定的ip始终访问一台服务器。像一些session会话,一些特定的业务要求在同一台服务器上的逻辑啥的,可以考虑这种策略方式。

14.6 proxy_pass加不加 " / "的问题


proxy_pass加不加 " / "的区别如下:
在这里插入图片描述


注意事项:

  • location后面没有正则表达式就可以加斜杆。
  • location后面有正则表达式就不可以加斜杆。
    在这里插入图片描述

14.7 推荐Ajax的url要拼接绝对路径


有时候,Ajax可能使用相对路径,也可使用绝对路径。
在这里插入图片描述

如果使用了nginx做了动静分离,就必须要加上绝对路径了。因为nginx是根据url来走server的location,因此必须要加上绝对路径是最好的。

在这里插入图片描述
tomcat的一个特点,每一个ajax的url都加上项目名才能搭配nginx使用,就是因为路径拼接问题。

再个就是特别情况向tomcat的root文件下,就不需要项目名来搭配了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值