upstream (创建集群)
proxy_pass (配置:调用集群)
weight=(权重默认为1)
max_fails=2 fail_timeout=30; //检测两次如果失败,则认为集群中的主机故障,之后等待30秒再次测试
down(临时调走某一个服务器)
ip_hash;(用户登陆服务器时使用)
------------------------------------------------------------------------------------------------------------------------------------------
upstream | proxy_pass的运用 (修改nginx配置文件实现集群功能)
[root@proxy nginx]# vim conf/nginx.conf
(创建集群)upstream (集群名称)web { //首先是34~37行,创建集群,集群名称叫web
server 192.168.2.100:80; //这里是集群中的服务器ip与端口
server 192.168.2.200:80; //第二台集群主机
}
(配置网络行)server {
listen 80;
。。。。
location / {
proxy_pass http://web; //在第47行,调用集群
root html;
index index.html index.htm;
}
之后开启nginx或者重加载nginx配置,用curl 192.168.2.5可以看到 web1
或web2页面轮询出现
weight=权重默认为1 (集群优化):
server 192.168.2.200:80 weight=2; //为性能较强的集群主机配置权重 (此地址在你配置的集群IP中),权重越大任务的分配量就越大
以下测试:
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web1~~
配置健康检查:max_fails=2 fail_timeout=30;(检查两次,三十秒启动)
server 192.168.2.200:80 max_fails=2 fail_timeout=30; //检测两次如果失败
,则认为集群中的主机故障,之后等待30秒再次测试
sbin/nginx -s reload
测试时,先将web2的httpd服务关闭,回到proxy访问集群页面curl 192.168.2.5
只会显示web1的页面,此时即使将web2的httpd服务开启也无效,因为要等
待30秒
3,相同客户机访问相同服务器 ip_hash;
upstream web {
ip_hash; //相同客户机访问相同服务器,让一个客户机访问集群时锁定
一个后台服务器,避免重复登陆的问题
server 192.168.2.100:80;
server 192.168.2.200:80;
}
sbin/nginx -s reload
curl 192.168.2.5 //重加载配置后访问2.5只会看到一个网站的页面
4,添加down标记
upstream web {
server 192.168.2.100:80;
server 192.168.2.200:80 down; //down标记可以让集群主机暂时不参与集群活动
}
sbin/nginx -s reload
curl 192.168.2.5
nginx功能
网站服务,网站代理(网站业务),四层代理(其他业务)
三,使用nginx创建其他业务集群(四层代理)
[root@proxy nginx]# cd ~/lnmp_soft/nginx-1.17.6/
[root@proxy nginx-1.17.6]# killall nginx
[root@proxy nginx-1.17.6]# rm -rf /usr/local/nginx/
./configure --with-stream --with-http_stub_status_module
//这里的--with-stream 是添加四层代理模块,可以用来创建其
他业务集群,--with-http_stub_status_module是后面实验所需模块
另外,如果更新模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall nginx 再重启即可
make //编译
make install //安装
cd /usr/local/nginx/
sbin/nginx -V //查看安装模块情况
打开nginx主配置文件,在16行左右(http上面),添加以下内容
stream { //创建新业务
upstream backend { //创建名叫backend的集群
server 192.168.2.100:22; //集群中的主机使用22端口对外提供服务
server 192.168.2.200:22;
}
server {
listen 12345; //监听端口号
proxy_pass backend; //调用集群
}
}
sbin/nginx //配置写好之后开启服务或者重加载配置文件
ssh 192.168.2.5 -p 12345 //尝试远程登录,第一次可能会连接集群的某一台主机比如web1
exit //退出
注意:如果配置没有错误,但无法反复登陆web1与web2,可以按下列方式解决
[root@proxy nginx]# rm -rf ~/.ssh/known_hosts //每登录一次之后在proxy中删除记录文件
ssh 192.168.2.5 -p 12345 //再次尝试登录,会连接到另外一台集群主机
ss命令可以查看系统中启动的端口信息,该命令常用选项如下:
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
注意:在RHEL7系统中可以使用ss命令替代netstat命令,功能一样,选
项一样。
---------------------------------------------------------------------
常见nginx问题处理
1,404报错
打开配置文件,在默认的虚拟主机里面的location下面修改
error_page 404 /test.jpg; //这里把#注释去掉,后面改成test.jpg
,效果是如果客户访问了不存在的页面就显示test.jpg的内容
sbin/nginx -s reload //重加载配置
然后找一个图片扔到/usr/local/nginx/html里面,命名为test.jpg
使用浏览器虽随意访问不存在的页面192.168.2.5/XXXX.html 就可以看到之前
那张图片的内容
如果真机是windows可以用mobaXterm传test.jpg文件到nginx的html目录
如果真机是linux可以用scp命令
2,查看网站后台数据
--with-http_stub_status_module //该功能利用的模块,之前配置nginx已经安装
打开配置文件
location /status { //在error_page行上面添加此内容
stub_status on; //显示后台的数据
allow 192.168.2.5; //只允许2.5查看
deny all; //拒绝其他
}
sbin/nginx -s reload //重加载配置