课前回顾
proxy_buffer代理缓冲区实际上就是代理内存 (开辟一个内存空间)
nginx多重代理,服务端返回数据是一点一点返回给用户的 (返回的速度与缓冲区的大小有关)
proxy_模块可以写到文件中(自己创建名字随意,位置随意 vim /etc/nginx/proxy_params),然后再在server中include,这样可以在不同的location中多次include
[root@web01 ~]# vim /etc/ssh/sshd_config +115 #优化ssh(:115)
[root@web01 ~]# systemctl restart sshd
nginx一个代理机不能代理多台代理机或者服务器
一个集群必须要有负载均衡
生产环境web等,常用不同的端口
proxy_set_header Host $host; Host就是一个变量名
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; X-Forwarded-For就是一个变量名
变量名也只是一个变量名,随便写
更改日志格式 x_forwarded_for 前面加个% 以%为分隔符 ,这样方便取出来日志IP
'"浏览器配置$http_user_agent" --- %"$http_x_forwarded_for"'; 可以不加双引号
server里面的端口只针对当前的server
浏览器使用IP访问服务器或代理机得到的页面 与服务器server配置有关,服务器配置和浏览器反馈结果如下:
使用IP访问:
1.server层没有配置server_name 10.0.0.53;----->默认页面(本质上还是访问第一个.conf)
2.server层没有配置server_name 10.0.0.53;同时删除default.conf----->默认页面
3.server层配置了server_name 10.0.0.53;----->指定的html页面
使用域名访问:
4.server层没有配置server_name cs.ym.com;------>访问第一个location,得到默认页面
5.server层配置了server_name cs.ym.com;和index index.html;------>指定页面
6.server层配置了server_name cs.ym.com;没有配置index index.html;------>访问第一个location,得到默认页面
rpm -qa 查看已经安装过的包
使用scp传输文件,文件属主属组改变
502 bad gateway 无法找到后端的主机
代理机(外网IP)
server {
listen 80;
server_name cs.ip.com;
location / {
# 代理后端的机器(代理机或者代理服务器)
proxy_pass http://10.0.0.7:80;
# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
proxy_set_header Host $host;
# 显示客户端的真实ip(和代理的所有IP)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 60s;
#nginx代理等待后端服务器的响应时间
proxy_read_timeout 60s;
#后端服务器数据回传给nginx代理超时时间
proxy_send_timeout 60s;
#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
proxy_buffering on;
#设置nginx代理保存用户头信息的缓冲区大小
proxy_buffer_size 4k|8k;
#proxy_buffers 缓冲区
proxy_buffers 8 4k|8k;
#使用http 1.1协议版本
proxy_http_version 1.1;
}
}
代理机 proxy代理模板
端口号可以修改,80端口可以省略
server {
listen 80;
server_name cs.ip.com;
location / {
# 代理后端的机器(代理机或者代理服务器)
proxy_pass http://10.0.0.7:80;
include proxy_params;
}
}
vim /etc/nginx/proxy_params
# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
proxy_set_header Host $host;
# 显示客户端的真实ip(和代理的所有IP)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 60s;
#nginx代理等待后端服务器的响应时间
proxy_read_timeout 60s;
#后端服务器数据回传给nginx代理超时时间
proxy_send_timeout 60s;
#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
proxy_buffering on;
#设置nginx代理保存用户头信息的缓冲区大小
proxy_buffer_size 4k|8k;
#proxy_buffers 缓冲区
proxy_buffers 8 4k|8k;
#使用http 1.1协议版本
proxy_http_version 1.1;
服务器模板
server {
listen 80;
server_name cs.zh.com;
root /code/wordpress;
index index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
负载均衡服务器配置模板
ngx_http_upstream_module模块
7层负载均衡只能做http协议的负载均衡
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server 10.0.0.7;
server 10.0.0.8;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
}
server {
listen 80;
server_name cs.zh;
location / {
proxy_pass http://backend;
include proxy_params;
}
}
#include后面的相对路径指定就是/etc/nginx/ 下
vim /etc/nginx/proxy_params
# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
proxy_set_header Host $host;
# 显示客户端的真实ip(和代理的所有IP)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 60s;
#nginx代理等待后端服务器的响应时间
proxy_read_timeout 60s;
#后端服务器数据回传给nginx代理超时时间
proxy_send_timeout 60s;
#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
proxy_buffering on;
#设置nginx代理保存用户头信息的缓冲区大小
proxy_buffer_size 4k|8k;
#proxy_buffers 缓冲区
proxy_buffers 8 4k|8k;
#使用http 1.1协议版本
proxy_http_version 1.1;
#解决集群单点故障的反馈页面影响用户体验,自动跳转到下一个负载均衡主机
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
Nginx负载均衡调度算法
调度算法 | 概述 |
---|---|
轮询(RR) | 按时间顺序逐一分配到不同的后端服务器(默认) |
weight(WRR) | 加权轮询,weight值越大,分配到的访问几率越高(默认是1) |
ip_hash | 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器(公网IP),作用于用户登录后 |
url_hash | 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器 |
least_conn | 最少链接数,那个机器链接数少就分发(链接数不等于请求数) |
服务器配置不同的时候 负载均衡服务器(lb)可以使用加权轮询,
ip_hash:(session共享)会话保持
缺陷:同一个公网IP,访问量异常的时候
cookie:F12删除cookie,可导致需要再次登录
session:user_login文件里面记录着在网站中登录的信息
#配置ip_hash,可能会导致某一台服务器连接过多,优点是会话保持
upstream load_pass {
ip_hash;
server 10.0.0.7:80 weight=5;
server 10.0.0.8:80;
}