nginx 详解

目录

web服务器和web应用服务器的区别

1、nginx的安装

一、安装所需要的依赖包

二、编译、安装

三、启动nginx、开机自启、查看nginx版本

2、nginx 平滑升级

3、四层代理和七层代理的区别?

4、Nginx负载均衡调度算法

5、负载均衡导致session丢失问题。

6、nginx负载均衡后端获取不到真实的客户端IP

7、Nginx常用模块类型

Nginx模块之HttpAuthBasic

Nginx模块之HttpGzip模块

Nginx模块之HttpGzipStatic

Nginx模块之HttpLimitReqest

8、nginx优化 

8、Nginx的root和alias

9、nginx优雅的显示错误界面

10、常见的负载均衡模块

11、名词介绍

12、nginx 日志优化


web服务器和web应用服务器的区别

web服务器:HTTP(超文本)超媒体()超文本传输协议(),实际上就是请求html页面,存在服务器磁盘上面的一个路径。

web应用服务器:为客户端提供业务逻辑

1、nginx的安装

一、安装所需要的依赖包

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

二、编译、安装

./configure --with-http_stub_status_module --with-http_ssl_module

make

make install

三、启动nginx、开机自启、查看nginx版本

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

nginx 本身启动 默认配置文件就是 /usr/local/nginx/conf/nginx.conf (不加-c也可以)。

echo "//usr/local/nginx/sbin/nginx" >> /etc/rc.local

chmod 755 /etc/rc.d/rc.loacl    

/usr/local/nginx/sbin/nginx -V

2、nginx 平滑升级


https://nginx.org/download/  nginx 下载地址

一、升级前工作:备份、记得一定要备份,为了安全。。。

    1、mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_`date +%Y_%m_%d`_bak

    2、cp -r /usr/local/nginx /usr/local/nginx_`date +%Y_%m_%d`.bak

二、基本上面两部分备份完成之后,就可以准备升级工作了。。。。 

wget https://nginx.org/download/nginx-1.20.1.tar.gz

tar -xvf  nginx-1.20.1.tar.gz

#./configure --prefix=/usr/local/nginx --with-http_ssl_module
 

#./configure --prefix=/usr/local/nginx/  

#./configure --with-http_ssl_module

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

这是在不添加模块的情况下。。

make   

make之后不要执行make install 要不然会覆盖之前的配置文件。

三、进入下载新的nginx里面将objs 下面的nginx  cp 到 /usr/local/nginx/sbin/  下

cp /software/nginx/nginx-1.22.0/objs/nginx  /usr/local/nginx/sbin/

/usr/local/nginx/sbin/nginx -t  

检测配置文件是否正常

发送信号user2给nginx老版本对应的进程

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

发送信号quit给nginx老版本的进程

 kill -quit `more /usr/local/nginx/logs/nginx.pid.oldbin`

看是否升级成功

/usr/local/nginx/sbin/nginx -V 

nginx四层代理、支持七层代理

3、四层代理和七层代理的区别?

1).四层负载均衡 所谓四层负载均衡指的是OSI七层模型中的传输层,那么传输层Nginx已经能支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载均衡,那么它的好处是性能非常快、只需要底层进行应用处理,而不需要进行一些复杂的逻辑。

2).七层负载均衡 七层负载均衡它是在应用层,那么它可以完成很多应用方面的协议请求,比如我们说的http应用的负载均衡,它可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则,所以在应用层的服务里面,我们可以做的内容就更多,那么Nginx则是一个典型的七层负载均衡SLB

4、Nginx负载均衡调度算法

1)轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2)权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3)ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4)fair(第三方):按后端服务器响应时间来分配,时间短的优先分配。

5)url_hash(第三方):按访问url的hash结果来分配请求,使同样的url定向到同一个后端服务器,后端服务器为缓存时比较有效。

5、负载均衡导致session丢失问题。

session是用户的的一个会话信息,服务端和用户端通信需要一个访问认证,以及对健全处理的时候,给用户分配一串session信息。

解决方案 1:Session 保持

第一种方式是做 Session 保持,就是把负载均衡策略基于原有轮询数的基础上,改用 ip_hash、URL_hash 来解决。ip_hash 就是基于用户 IP 来做 hash,一个用户的请求统一分发到一台机器上。URL_hash 用于用户请求固定页面时,将用户请求固定到具体 后端 上,就保证了 Session 不会被丢失。

6、nginx负载均衡后端获取不到真实的客户端IP

后端获取到的是nginx的ip,如何解决呢,只需要加三行代码

配置后端代码可以获取到客户端的真实IP

location{

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

remote_addr 是一个 Nginx 的内置变量,它获取到的是 Nginx 层前端的用户 IP 地址,这个地址是一个 4 层的 IP 地址

TCP/IP 协议的用户 IP 地址(源地址)以 remote_addr 变量的方式赋值给 X-Real_IP 的自定义变量,后端直接通过 X-Real 获取 X-Real IP 信息,便可获取到用户地址。

7、Nginx常用模块类型

Nginx模块名称 模块作用
ngx_http_autoindex_module 用于自动生成目录列表.
ngx_http_access_module 四层基于IP的访问控制,可以通过匹配客户端源IP地址进行限制
ngx_http_auth_basic_module 可以使你使用用户名和密码基于 HTTP 基本认证方法来保护你的站点或其部分内容
ngx_http_stub_status_module 状态统计模块
ngx_http_gzip_module 文件的压缩功能
ngx_http_gzip_static_module 静态压缩模块
ngx_http_ssl_module nginx 的https 功能
ngx_http_rewrite_module 重定向模块,解析和处理rewrite请求
ngx_http_referer_module 防盗链功能,基于访问安全考虑
ngx_http_proxy_module 将客户端的请求以http协议转发至指定服务器进行处理
ngx_stream_proxy_module tcp负载,将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module 将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module 将客户端对Python的请求以uwsgi协议转发至指定服务器处理
ngx_http_headers_module 可以实现对头部报文添加指定的key与值
ngx_http_upstream_module 负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_stream_upstream_module 后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_fastcgi_module 实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理
ngx_http_flv_module 为flv伪流媒体服务端提供支持

Nginx模块之HttpAccess模块

ngx_http_access_module 模块使有可能对特定IP客户端进行控制. 规则检查按照第一次匹配的顺序

.allow 描述的网络地址有权直接访问

deny 描述的网络地址拒绝访问

location / {

root /code;

index index.html;

allow 10.0.0.0/24;

deny 10.0.0.1;

deny all; 

上面的例子中,仅允许网段 10.0.0.0/24中除 10.0.0.1之外的ip访问。当执行很多规则时,最好使用 ngx_http_geo_module 模块.

Nginx模块之HttpAuthBasic

该模块可以使你使用用户名和密码基于 HTTP 基本认证方法来保护你的站点或其部分内容.

Nginx模块之HttpGzip模块

gzip 开启或者关闭gzip模块 syntax: gzip on|off default: gzip off context: http, server, location, if (x) location

Nginx模块之HttpGzipStatic

Nginx模块之HttpLimitReqest

本模块可以针对条件,进行会话的并发连接数控制。(例如:限制每个IP的并发连接数。)

8、nginx优化 

1、CPU亲和、worker进程数、调整nginx进程打开的文件句柄数

2、使用Epool网络模型、调整每个worker进程的最大连接数

3、文件的高效读取sendfile、nopush

4、文件的传输实时性、nodealy

5、开启tcp长连接,以及长连接超时时间keepalive_timeout

6、开启文件传输压缩gzip

7、开启静态文件expires缓存

8、隐藏nginx版本号

9、禁止通过ip地址访问,禁止恶意域名解析,只允许域名访问

10、配置防盗链、以及跨域访问

11、防DDOS、cc攻击,限制单IP并发连接,以及http请求

12、优雅显示nginx错误页面

13、nginx加密传输https优化

14、nginx proxy_cache、fastcgi_cache、uwsgi_cache 代理缓存,第三方工具(squid、varnish)

8、Nginx的root和alias

root与alias路径匹配主要区别在于nginx如何解释location后面的uri,

这会使两者分别以不同的方式将请求映射到服务器文件上,alias是一个目录别名的定义,root则是最上层目录的定义。

root的处理结果是:root路径+location路径

alias的处理结果是:使用alias定义的路径

9、nginx优雅的显示错误界面

#error_page配置的是http这种的网络地址

[root@666 conf.d]# cat error.conf

server { listen 80;

server_name linux.error.com;

location / {

root /code/error;

index index.html;

error_page 404 http://www.baidu.com;

}

}

10、常见的负载均衡模块

一、Nginx

工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
Nginx安装和配置比较简单,测试起来比较方便;
可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
对后端服务器的健康检查,只支持通过端口来检测,不支持通过curl来检测。
Nginx对请求的异步处理可以帮助节点服务器减轻负载;
Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
不支持Session的直接保持,但能通过ip_hash来解决。对Big request header的支持不是很好,
支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
Nginx还能做Web服务器即Cache功能.

二.Haproxy

支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
支持url检测后端的服务器出问题的检测会有很好的帮助。
更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
不能做Web服务器即Cache。

三、LVS

抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
工作在网络第4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
应用范围比较广,可以对所有应用做负载均衡;
不支持正则处理,不能做动静分离。
支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
配置 复杂,对网络依赖比较大,稳定性很高。

11、名词介绍

集群:多台服务器在一起,实现同样的工作,当一台服务器出现故障,其他服务器继续提供服务。

负载均衡:将用户的请求平均的分配给后端的服务。

高可用:当一台机器不可用时,另一台接替它的工作,保证业务的高可用性 

12、nginx 日志优化

log_format  main_exp '{"时间":"$time_iso8601",'
              '"客户端外网地址":"$http_x forwarded for",'
              '"客户端内网地址":"$remote_addr",'
              '"状态码":$status,'
              '"传输流量":$body_bytes_sent,'
              '"跳转来源":"$http_referer",'
              '"URL": "$request",'
              '"浏览器":"$http_user_agent",'
              '"请求响应时间":$request_time,'
              '"后端地址":"$upstream_addr"]';

这个在http模块添加
 

你可能感兴趣的:(nginx,nginx,linux,运维)