proxy client web1 web2
1.nginx反向代理
  使用Nginx实现Web反向代理功能,实现如下功能:
  后端Web服务器两台(web1 192.168.2.100 web2 192.168.2.200,使用httpd实现
  Nginx采用轮询的方式调用后端Web服务器 
  两台Web服务器的权重要求设置为不同的值
  最大失败次数为1,失败超时时间为30秒
1.1 配置两台web服务器,首先访问页面分别为:192.168.2.100 192.168.2.200
]# yum -y install httpd
]# systemctl start httpd
]# systemctl enable httpd
web1
]# echo "192.168.2.100" > /var/www/html/index.html
web2
]# echo "192.168.2.200" > /var/www/html/index.html
web1测试:
]# firefox 192.168.2.100
]# firefox 192.168.2.200
 
1.2 配置proxyHttp调度
]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
#使用upstream定义后端服务器集群,集群名称任意(如webserver)
#使用server定义集群中的具体服务器和端口
upstream webserver {
       server 192.168.2.100:80;
       server 192.168.2.200:80;
        }
.. ..
server {
        listen     80;
        server_name  www.a.com;
            location / {
#通过proxy_pass将用户的请求转发给webserver集群
            proxy_pass http://webserver;
        }
...
]# nginx -s reload
client测试:(默认轮询)
192.168.2.100
192.168.2.200
192.168.2.100
192.168.2.200
]#  curl http://192.168.4.5  
192.168.2.100
 
1.3 配置upstream服务器集群池属性
设置失败次数,超时时间,权重
weight可以设置后台服务器的权重,
max_fails可以设置后台服务器的失败次数,
fail_timeout可以设置后台服务器的失败超时时间。
]# vim /usr/local/nginx/conf/nginx.conf
http...
upstream webserver {
  server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30;
  server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30;
  server 192.168.2.101 down;
 }
server...
#weight设置服务器权重值,默认值为1
#max_fails设置最大失败次数
#fail_timeout设置失败超时时间,单位为秒
#down标记服务器已关机,不参与集群调度
.. ..
1.3.1 client测试权重:
192.168.2.100
192.168.2.200
192.168.2.200
192.168.2.100
192.168.2.200
192.168.2.200
1.3.2 关闭一台后端服务器(如web1)
]# systemctl stop httpd
client测试轮询(只有192.168.2.200)
开启web1测试轮询
]# systemctl start httpd (正常)
 
1.4 配置upstream服务器集群的调度算法
]# vim /usr/local/nginx/conf/nginx.conf
http...
upstream webserver {
#通过ip_hash设置调度规则为:相同客户端访问相同服务器
   ip_hash;
   server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
   server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
server...
]# nginx -s reload
client测试:(只有192.168.4.200)
192.168.2.200
192.168.2.200
 
2.Nginx的TCP/UDP调度器(源码安装的时候要with-stream)
# vim /usr/local/nginx/conf/nginx.conf
...
stream {
  upstream backend {
    server 192.168.2.100:22;
    server 192.168.2.200:22;
     }
  server {
    listen 12345;
    proxy_connect_timeout 1s;
    proxy_timeout 3s;
    proxy_pass backend;
     }
}
http...
]# nginx -s reload
client检测:
]# ssh 192.168.4.5 -p 12345
root@192.168.4.5's password: 
web2 ~]# 
]# ssh 192.168.4.5 -p 12345
root@192.168.4.5's password: 
web1 ~]#
 
3.Nginx常见问题处理
3.1 修改Nginx配置文件,自定义报错页面
client:
]# firefox http://192.168.4.5/xxxxx  //访问一个不存在的页面
proxy本机:
...
 error_page  404     /404.html;(去掉#)
...
]# echo "Lossing..." > /usr/local/nginx/html/404.html
]# firefox 192.168.4.5/txxxxxx(查看效果)
**********************
常见http状态码:
200 一切正常
301 永久重定向
302 临时重定向
401 用户名或密码错误
403 禁止访问(客户端IP地址被拒绝)
404 文件不存在
414 请求头过长
500 服务器内部错误
502 Bad Gateway
*************************
3.2 修改Nginx配置文件,定义状态页面,查看状态页面信息
需要:--with-http_stub_status_module //开启status状态页面
]# vim /usr/local/nginx/conf/nginx.conf
...
location /status {
   stub_status on;
   #allow IP地址;
   #deny IP地址;
...
]# nginx -s reload
***************************
ss命令可以查看系统中启动的端口信息,该命令常用选项如下:
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
注意:在RHEL7系统中可以使用ss命令替代netstat命令,功能一样,选项一样。
**************************
优化后,查看状态页面信息(本机)
Active connections: 1 
server accepts handled requests
 6 6 11 
Reading: 0 Writing: 1 Waiting: 0 
****************************
Active connections:当前活动的连接数量。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量。
(一般与accepts一致,除非服务器限制了连接数量)。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。
*******************************
3.3 优化Nginx并发量
3.3.1 ab高并发测试
]# ab -n 2000 -c 2000 http://192.168.4.5/
...
socket: Too many open files (24)
3.3.2 修改Nginx配置文件,增加并发量
]# vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes  2; //与CPU核心数量一致
events {
worker_connections 65535; //每个worker最大并发连接数
use epoll;
}
.. ..
]# nginx -s reload
优化Linux内核参数(最大文件数量)
临时修改:
]# ulimit -a  //查看所有属性值
]# ulimit -Hn 100000 //设置硬限制(临时规则)
]# ulimit -Sn 100000 //设置软限制(临时规则
]# ab -n 2000 -c 2000 http://192.168.4.5/
永久修改:
vim /etc/security/limits.conf
  .. ..
#用户或组  硬限制或软限制  需要限制的项目 限制的值
*  soft nofile 100000
*  hard nofile 100000
测试:
]# ab -n 99999 -c 2000 http://192.168.4.5/
Active connections: 1 
server accepts handled requests
 285718 285718 282548 
Reading: 0 Writing: 1 Waiting: 0 
 
4. 优化Nginx数据包头缓存
问题:414 Request-URI Too Large
]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size    1k;  //默认请求包头信息的缓存    
large_client_header_buffers  4 6m;  //最大请求包头部信息的缓存个数与容量,生产环境4k足以
.. ..
]# nginx -s reload
 
5.浏览器本地缓存静态数据
查看firefox缓存信息
浏览器输入:about:cache
清空全部历史记录后
]# vim /usr/local/nginx/conf/nginx.conf
新增加一个location
location...
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
    expires  30d; //定义客户端静态缓存时间为30天,一定要有;号
}
...
]# nginx -s reload
client访问:
]# firefox http://192.168.4.5/1.png(先有1.png)
查看图片缓存
 
6.日志切割
]# vim /usr/local/nginx/logbak.sh
#!/bin/bash
date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs
mv $logpath/access.log $logpath/access-$date.log
mv $logpath/error.log $logpath/error-$date.log
kill -USR1 $(cat $logpath/nginx.pid)
]# crontab -e
03 03 * * 5  /usr/local/nginx/logbak.sh
 
7.对页面进行压缩处理
]# vim /usr/local/nginx/conf/nginx.conf
   http {...
   gzip on;        //开启压缩
   gzip_min_length 1000;  //小文件不压缩
   gzip_comp_level 4;     //压缩比率
   gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; //对特定文件压缩,类型参考mime.types
]# nginx -s reload
 
8.服务器内存缓存
]# vim /usr/local/nginx/conf/nginx.conf
http {
...
open_file_cache  max=2000  inactive=20s;
    open_file_cache_valid    60s;
    open_file_cache_min_uses 5;
    open_file_cache_errors   off;
//设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄
//文件句柄的有效时间是60秒,60秒后过期
//只有访问次数超过5次会被缓存
]# nginx -s reload

二十.Nginx反向代理、Nginx的TCP/UDP调度器、Nginx常见问题处理的更多相关文章

  1. Nginx反向代理,Nginx的TCP/UDP调度器以及Nginx常见问题处理

    nginx反向代理: 方案 使用4台RHEL7虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.4.5和192.168.2.5,两台Web服务器IP地址 ...

  2. nginx反向代理实现均衡负载及调度方法

    http upstream配置参数: ngx_http_upstream_module模块将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用 upstrea ...

  3. Nginx的TCP/UDP调度器

    安装nginx [root@proxy ~]# yum –y install gcc pcre-devel openssl-devel //安装依赖包 [root@proxy ~]# .tar.gz ...

  4. 八、Nginx的TCP/UDP调度器

    nginx 1.9后才可以调用其他应用 1.9前只能调用web 部署nginx服务器----配置----起服务.验证 部署nginx服务器: [root@proxy ~]# yum –y instal ...

  5. nginx反向代理配置(conf文件中的nginx)

    ########### 每个指令必须有分号结束.##################user administrator administrators;  #配置用户或者组,默认为nobody nob ...

  6. iperf测试流量转发(nginx反向代理tcp/udp)

    一.准备工作 服务器1:192.168.33.102     搭建nginx服务,作为反向代理的中转站 服务器2:192.168.33.103    nginx要反向代理的服务器 服务器3:192.1 ...

  7. Linux系统——Nginx反向代理与负载均衡

    集群集群是指一组(若干个)相互独立的计算机,利用高速通信网路组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运用各自服务的独立服务器.这些服务器之间可以彼此通信,协同向用户提供 ...

  8. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  9. Nginx反向代理部署指南

    一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...

随机推荐

  1. AVR单片机教程——随机点亮LED

    之前我们做的闪烁LED和流水灯,灯效都是循环的.这次我们来尝试一些不一样的——每一次随机选择一个LED并点亮. 要实现随机的效果,我们要用C语言标准库中的相关设施: #define RAND_MAX ...

  2. Linux 进程地址空间及原理

    1.程序地址空间      首先,我们先看学c/c++时候学到的程序内存布局: 准确地说,程序地址空间其实就是进程的地址空间,实际就是pcb中的mm_struct. 接下来,我们用fork()演示一下 ...

  3. NodeJS的环境搭建+传统ELmentui+vue开发

    ElementUI简介 我们学习VUE,知道它的核心思想式组件和数据驱动,但是每一个组件都需要自己编写模板,样式,添加事件,数据等是非常麻烦的, 所以饿了吗推出了基于VUE2.0的组件库,它的名称叫做 ...

  4. 3_PHP表达式_5_数据类型转换_类型强制转换

    以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP类型转换分为类型自动转换和类型强制转换. 3.5.2 类型强制转换 类型强制转换允许编程人员手动将变量的数据 ...

  5. Go part 7 反射,反射类型对象,反射值对象

    反射 反射是指在程序运行期间对程序本身进行访问和修改的能力,(程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分,在运行程序时,程序无法获取自身的信息) 支持反射的语言可以在程序编 ...

  6. 远程 Linux(Ubuntu 18)添加字体

    安装 xshell与xftp 连接xshell 点击 xshell上方工具栏中的xftp图标, 自动连接xftp linux下创建字体目录 su cd / cd usr/share/fonts mkd ...

  7. js展开循环

    当要对一个大数组进行循环时,通常会通过局部变量缓存数组长度来提高性能,例: for(var i=0,len=arr.len;i<len;i++){} 光是缓存数组长度或使用倒序遍历来减少判断外, ...

  8. 记录一下JProfiler的使用

    刚入职实习,第四天了,昨晚老大安排我在公司机器上装个JProfiler看一情况. 然后网上都是什么跟tomcat一起使用的,所以折腾了很久才搞出来. 我这里没用什么服务器,因为公司用的是Play!框架 ...

  9. RT-Thread--线程间同步

    线程间同步 一个线程从传感器中接收数据并且将数据写到共享内存中,同时另一个线程周期性的从共享内存中读取数据并发送去显示,下图描述了两个线程间的数据传递: 如果对共享内存的访问不是排他性的,那么各个线程 ...

  10. 理解serverless无服务

    理解serverless无服务 阅读目录 一:什么是serverless无服务? 二:与传统模式架构区别? 三:serverless优缺点? 四:使用serverless的应用场景有哪些? 回到顶部 ...