深度学习Nginx第一章:Nginx架构和工作流程、简单搭建、如何作为反向代理和缓存服务器以及分析access日志

Nginx源码目录

auto->cc:用于编译的,剩下的是来帮助nginx的config脚本执行的时候,nginx支持哪些模块,当前操作系统有什么特性供给nginx使用

CHANGES:nginx版本有哪些版本和bug fix

man:帮助文件

src:nginx的源代码

通过执行./configure  --help查看参数

如果没有变动的话指定prefix就可以默认在prefix目录的文件下,通常前面--with的模块是不会编译到nginx的,如果--without意味着默认会编译进去的,加入这个参数是移出

./configure --prefix=/home/nginx

当config执行完成后会生成一些中间文件,在objs中有一个ngx_modules.c里面有我们进行编译的时候有哪些模块会被编译到nginx中,

make 编译

其中nginx的目标文件是在objs/里面可以看到,如果做nginx的版本升级,这个时候我们不能执行make install,这里需要把目标文件拷贝在安装目录中,c语言生成所以中间文件放在src/

扩展:

热点部署版本升级:

 在linux中当替换一个正在运行的文件的时候,需要cp -f

然后看到最新的文件时第一个:

接下来给master发送-USR2这个信号,告诉他要进行版本部署

然后执行 kill -WINCH 32169 关闭老的worker进程,但是老的master进程还存在,主要用于回退版本使用,可以对老的master进程发送reload命令把老的woker进程拉起来,把新版本关掉

make install 首次安装时使用

其中进入到nginx的目录下

主要二进制文件在sbin目录下,功能配置文件在conf

 

Nginx配置文件语法:

Nginx命令行:

http配置的指令块:

http大模块下说明所以的指令都是由http进行解析执行的,一个非http模块无法解析里面的指令的

upstream:表示上游服务   server:对应的一组域名  location: url表达式

进行日志切割:

执行../sbin/nginx -s reopen,这个方法往往不好用,通常是使用crontab执行脚本

Nginx搭建静态资源:

location后的/:让所有的请求都访问dlib下的文件  

1 如果让url后缀和文件后缀一一对应有两种用法,一个是alias,一个是root,root有一些问题,它会把uri的路径带到文件中来,一般使用alias

root实例:

如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。

alias实例:

如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。

注意:

1> 使用alias时,目录名后面一定要加"/"。
3.>alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
4.>alias只能位于location块中。(root可以不放在location中)

2 对于小于gzip_min_length的字段就不进行压缩,因为有的字段一个tcp报文段就发送过去了,压缩的话会额外消耗系统cpu

3 当我们进行文件共享的时候可以使用autoindex,可以显示该目录下文件

4 因为我们公网带宽是有限的,当有许多并发用我们带宽的时候会产生一个竞争关系,我们可能为了当有些用户访问大文件的时候显示他们的速度,期望分离出必要带宽来访问必要的小文件,如css、js,这个时候可以使用set命令和内置的变量来实现这个功能

这样可以限制我们nginx向客户端发送响应的一个速度,这个limit_rate,相关资料在官网

用Nginx搭建一个具备缓存功能的反向代理服务

  由于上游服务要处理非常复杂的业务逻辑,而且强调开发效率,所以它的性能并不怎么样,我们可以使用nginx反向代理把请求负载均衡到多台上游服务器上,这样的话在用户无感知的情况下实现了水平扩展,而当上游服务器出现问题的时候,那么nginx把请求从有问题的服务器转交给正常的服务器(上游服务器一般对公网不提供访问的)

1、上游服务器:加上127.0.0.1表示只有本机的进程才能进行访问

2、搭建反向代理:配置好反向代理的域名,对所有的请求 使用proxy_pass代理到所有的上游服务里

   因为一台反向代理,我们再去拿一些变量,一些值就会出错,比如说一个TCP连接有对应地址,但是有反向代理以后,那么我们的反向代理和客户端是一个TCP连接,反向代理与上游服务器又是一个TCP链接,所以如果取原先的变量 $remote_addr,也就是TCP连接的原端地址,这个时候在上游服务器取到的其实是反向代理的这个地址,如果我拿浏览器的地址做一个进行访问限制、速度的功能时候,是拿不到,所以通过proxy_set_header值添加一个新的值发送给上游 比如X-Real-IP选择从TCP拿到的原端的IP地址,Host也是一样的,客户端访问的域名是在浏览器输入的,我们可以让上游服务器处理这个域名,也可以让反向代理来处理这个域名,所有的这些配置特性都可以在这里查看

  其中关于proxy_cache,当我们nginx作为反向代理的时候,通常只有动态的请求,这个时候才会交给上游处理,但是一些静态资源是不太发生改变的,我们通过nginx进行缓存一段时间,因为nginx的性能远远领先于上游服务器的性能,使用这个特性对小的站点有一个非常大的性能提升

1>通过设置proxy_cache_path去设置我们缓存写在哪一个文件下,其中我们的关键字是放在共享内存中的,我们设置了10m的命名为my_cache,

2>这个使用是我们在需要做缓存的url路径下,添加proxy_cache,后面跟的参数就是我们刚才开辟的共享内存,那么在共享内存中设置的key是同一个url访问时对不同的用户展示是不一样的,所以用户这个变量就放在key中,其中proxy_cache_key 里用户作为一个变量是放在key中,我们通过host、uri、以及访问的参数这些作为整体的key,那么多余那些响应不返回也是做了一些简单的设定(200 304)

使用GoAccess分析access日志:图形化的形式,实时把access的变迁反应

发布了83 篇原创文章 · 获赞 87 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/ligupeng7929/article/details/94457708