一.需要了解实现反向代理(负载均衡)
1.在http里添加集群
upstream webs {
server 192.168.2.100:80;
server 192.168.2.200:80;
}
2.在location中添加
location / {
proxy_pass webs;
root html;
index index.html;
}
二.需要了解配置upstream服务器机群池属性
1.weight //权重
2.max_fails //设置最大失败次数
3.fails_timeout //设置失败超时时间,单位为秒
4.down //标记服务器已经关机,不参与集群调度
三.配置upstream服务器集群的调度算法
例如:
upstream webs {
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;
}
四.熟悉TCP/UDP调度器
1.需要安装nginx的–with-stream(开启4层反向代理功能) --with_ssl-_module(开启SSL加密功能)
2.配置nginx.conf文件
例如:
stream {
upstream sshs {
server 192.168.2.100:22;
server 192.168.2.200:22;
}
server {
listen 12345;
proxy_pass sshs;
}
}
五.nginx常见问题处理
1.如何自定义返回给客户端的404的报错页面
-配置nginx.conf配置文件,并解除其注释
error_page 404 /40x.html //自定义错误页面
2.如何查看服务器状态信息
-安装--with-http_stub_status_module模块
-配置nginx.conf文件
location /status {
stub_status on;
allow 192.168.4.10;
deny all; //只能本机服务器访问
}
禁用所有外网ip,仅允许内网ip
例如:
location / {
allow 192.168.1.0/24;
deny all;
}
3.如何设置与客户端的连接时间
问题:在http1.1的版本中,实现了一次连接多次请求,这样会出现,用户没有将服务退出,导致服务器不断的返回信息,增加了服务器的负担,所以需要设置一定的时间,可以让服务器单方面的断开连接
-在nginx.conf配置文件中
keepalive_timeout ; //设置时间,到达一定的时间客户端没有反应就会断开连接
4.优化nginx并发量
可以使用 ab 测试工具,在httpd-tools软件包中
例如:
ab -c 200 -n 200 http://192.168.4.10/ //模拟测试200人同时点击200下进行访问,结尾必须添加/
在nginx.conf配置文件中
-worker_processes ; //设置工作的进程数量,需要与主机的cup数量匹配
-events {
worker_connections 65535; //每个进程最大的并发数量,可以写多一些
}
在配置完上面的操作之后,需要搭配设置linux系统本身能够打开文件的数量限制,此操作是在服务器上进行
-ulimit -Sn 100000 (硬限制,临时规则,一定不能超过)
-ulimit -Hn 100000 (软限制,临时规则,可以超过,会有提醒)
永久配置:
/etc/security/limits.conf
* soft nofile 100000 //*代表任意ip可以进行访问,soft代表硬连接,hard代表软连接
* hard nofile 100000
5.优化nginx数据包头缓存(进行该实验时需要取消掉反向代理的调度器)
在nginx.conf文件的http模块中添加
例如:
http {
client_header_buffer_size 1k; //为每个用户通过1k的缓存
large_client_header_buffers 4 1m; //如果1k不够的话,还可以提供4个1m的容量
}
6.对静态页面的缓存
配置nginx.conf文件
添加:
location ~* \.(jpg|jpeg|gif|png|css|js|ocl|xml) $ {
expires 30d; //定义客户端缓存时间为30天
}
7.日志文件的切割
利用脚本实现日志文件的切割
#! /bin/bash
Date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs/
mv ${logpath}/access.log ${logpath}/access-$Date
mv ${logpath}/error.log ${logpath}/error-$Date
kill -USR1 $(cat $logpath/nginx.pid)
*USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改
crontab -e -uroot
03 03 * * 5 /usr/local/nginx/logback.sh
8.对页面进行压缩处理 //其原理是将图片进行压缩后再发送
http{
gzip on; //开启压缩
gzip_min_length 1000; //设置最小的压缩大小为1000字节,小文件越压越大,
gzip_comp_level 4; //1-9的比例,数字越大,压缩越好,速度越慢,反之则压缩差,速度更慢
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; //设置压缩的类型
}
9.服务器内存缓存
http{
open_file_cache max=2000 inactive=20s; //最大缓存2000个文件 关闭20s内没有人访问的文件
open_file_cache_valid 60s; //每个每件的有效时间为60s,60s之后过期
open_file_cache_min_uses 5; //只有访问次数超过5次才会被缓存
open_file_cache_errors off; //关闭缓存报错,因为缓存很容易过期,会导致一直报错
}
六.netstat 或 ss 命令使用
-a:显示所有端口的信息
-n:以数字格式显示端口号
-t:显示TCP连接的端口
-u:显示UDP连接的端口
-l:显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p:显示监听端口的服务名称是什么(也就算程序名)
七.常见的http状态码
状态码 功能描述
200 一切正常
301 永久重点向
302 临时重点向
401 用户名或密码错误
403 禁止访问(客户端IP地址被拒绝)
404 文件不存在
414 请求URI头部过长
500 服务器内部错误
502 Bad Gateway