Contents
Nginx的反向代理
准备工作:
两台机器IP分别为192.168.2.100/200
安装httpd
修改配置文件启动服务
测试
修改配置文件:
vim /usr/local/nginx/conf/nginx.conf
+=======================================
http {
.....
upstream 自定义名称 { #定义集群
server 192.168.2.100:80;
server 192.168.2.200:80;
}
server {
listen 80;
server_name www.aa.com;
location / {
proxy_pass http://sbweb; #调用集群
}
}
+=======================================
测试:
proxy上:curl http:proxy-ip #轮询模式
统计一下次数:
echo >a.txt;for i in `seq 1000`;do echo `curl http://192.168.4.5`>>a.txt;done;cat a.txt|grep web1|wc -l;cat a.txt|grep web2|wc -l
Nginx配置upstream服务器集群池属性
weight权重 max_fails最大的失败次数 fail_timeout超时时间
+===================================================+
upstream webserver {
server 192.168.2.100 weight=1 max_fails=1 fail_timeout=10;
server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
}
+===================================================+
访问方式:
|-----> web1
client -----> Proxy --> -
|-----> web2
集群的调度算法
ip_hash; #相同的客户端访问相同的Web服务器,不会再通过调度算法分配。
统计一下次数:
echo >a.txt;for i in `seq 1000`;do echo `curl http://192.168.4.5`>>a.txt;done;cat a.txt|grep web1|wc -l;cat a.txt|grep web2|wc -l
Nginx的TCP/UDP调度器
步骤:
- 4台基础服务器,测试用
- 必须Nginx版本在1.09以上版本才有这个功能
- Nginx编译安装时需要使用–with-stream,开启ngx_stream_core_module模块
部署支持4层TCP/UDP代理的Nginx服务器
yum –y install gcc pcre-devel openssl-devel
tar -xf nginx-1.13.2.tar.gz
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-1.8.0
./configure --with-stream --with-http_ssl_module
make upgrade #热升级
修改配置文件
+==========================================+
stream { #设置集群
upstream backend {
server 192.168.2.100:22;
sercer 192.168.2.200:22;
}
server { #指定转发的端口
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
}
http {
.....
}
+==========================================+
Nginx常见问题处理
- 1.不显示Nginx软件版本号
- 2.如果客户端访问服务器提示“Too many open files”如何解决
- 3.如何解决客户端访问头部信息过长的问题
- 4.如何让客户端浏览器缓存数据
- 5.如何自定义返回给客户端的404错误页面
- 6.如何查看服务器状态信息
- 7.开启gzip压缩功能,提高数据传输效率
调优方式
- 1.worker_processes //与CPU核心数量一致
- 2.worker_connections //每个worker最大并发连接数
- 3.server_tokens //服务器版本号信息
- 4.client_header_buffer_size //默认请求包头信息的缓存
- 5.large_client_header_buffers //大请求包头部信息的缓存个数与容量
- 6.error_page 404 //自定义404错误页面
1.屏蔽版本信息:
+===============================================+
[root@proxy logs]# curl -I http://192.168.4.5
HTTP/1.1 200 OK
Server: nginx/1.13.11 #有详细的版本号信息,不安全
Date: Wed, 04 Apr 2018 07:30:13 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 02 Apr 2018 02:57:01 GMT
Connection: keep-alive
ETag: "5ac19bfd-264"
Accept-Ranges: bytes
+===============================================+
1.1关闭版本显示:
http {
server_tokens off; //不显示nginx版本号信息
....
}
nginx -s reload
2.优化Nginx并发量
worker_processes 4; #与CPU核心数量一致,超过了也没有用
events {
worker_connections 65535; #每个work的最大并发数量,这个是最大端口数量
}
2.1优化Linux内核参数(最大文件数量)
ulimit -Hn 100000 #软限制
ulimit -Sn 100000 #硬限制
2.2测试并发:
ab -n 20000 -c 20000 http://192.168.4.5/
4.优化Nginx数据包的缓存
414 Request #414报错,缓存小了
+====================================================+
http {
client_header_buffer_size 1k; #默认请求包头信息的缓存
large_client_header_buffers 4 4k; #大请求包头部信息的缓存个数与容量
.. ..
}
+====================================================+
5.浏览器本地缓存静态数据
实质:
client -----> server client首次访问server端口,本地缓存一次
client <----- server 服务端告诉client端读取自己的缓存
部署方式:
+====================================================+
server {
...
localation \{
...
}
location ~* \.(jpg|jpeg|png|css|js|ico|xml)$ { #当匹配到为图片文件的时候执行
expires 30d; #定义客户端缓存的时间
}
}
+====================================================+
6.设置默认报错
server {
charset utf-8; #当要设置中文则修改
error_page 404 /40x.html; #错误404地址
}