目录
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服务器:HTTP(超文本)超媒体()超文本传输协议(),实际上就是请求html页面,存在服务器磁盘上面的一个路径。
web应用服务器:为客户端提供业务逻辑
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
/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
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四层代理、支持七层代理
1).四层负载均衡 所谓四层负载均衡指的是OSI七层模型中的传输层,那么传输层Nginx已经能支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载均衡,那么它的好处是性能非常快、只需要底层进行应用处理,而不需要进行一些复杂的逻辑。
2).七层负载均衡 七层负载均衡它是在应用层,那么它可以完成很多应用方面的协议请求,比如我们说的http应用的负载均衡,它可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则,所以在应用层的服务里面,我们可以做的内容就更多,那么Nginx则是一个典型的七层负载均衡SLB
1)轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
2)权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)fair(第三方):按后端服务器响应时间来分配,时间短的优先分配。
5)url_hash(第三方):按访问url的hash结果来分配请求,使同样的url定向到同一个后端服务器,后端服务器为缓存时比较有效。
session是用户的的一个会话信息,服务端和用户端通信需要一个访问认证,以及对健全处理的时候,给用户分配一串session信息。
解决方案 1:Session 保持
第一种方式是做 Session 保持,就是把负载均衡策略基于原有轮询数的基础上,改用 ip_hash、URL_hash 来解决。ip_hash 就是基于用户 IP 来做 hash,一个用户的请求统一分发到一台机器上。URL_hash 用于用户请求固定页面时,将用户请求固定到具体 后端 上,就保证了 Session 不会被丢失。
后端获取到的是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 信息,便可获取到用户地址。
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 模块.
该模块可以使你使用用户名和密码基于 HTTP 基本认证方法来保护你的站点或其部分内容.
gzip 开启或者关闭gzip模块 syntax: gzip on|off default: gzip off context: http, server, location, if (x) location
本模块可以针对条件,进行会话的并发连接数控制。(例如:限制每个IP的并发连接数。)
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)
root与alias路径匹配主要区别在于nginx如何解释location后面的uri,
这会使两者分别以不同的方式将请求映射到服务器文件上,alias是一个目录别名的定义,root则是最上层目录的定义。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias定义的路径
#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;
}
}
一、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(权重最小连接)
配置 复杂,对网络依赖比较大,稳定性很高。
集群:多台服务器在一起,实现同样的工作,当一台服务器出现故障,其他服务器继续提供服务。
负载均衡:将用户的请求平均的分配给后端的服务。
高可用:当一台机器不可用时,另一台接替它的工作,保证业务的高可用性
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模块添加