Nginx 学习笔记总结

Posted IT_Holmes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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命令来查看,会从最后往上一段时间看。

以上是关于Nginx 学习笔记总结的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 学习笔记总结

python全栈学习总结更新字符串:字符串格式化方法

Swift学习笔记——基本运算符

Nginx学习笔记~目录索引

Nginx运行原理和配置详解(个人总结笔记)

Nginx学习笔记