Nginx的TCP/UDP调度器(四层代理)
1、编译安装必须要使用--with-stream参数开启4层代理模块
tar -xf nginx-1.22.1.tar.gz
cd nginx-1.22.1/
yum -y install gcc make pcre-devel openssl-devel
./configure --with-stream
make && make install
2、修改nginx配置文件
...
stream {
upstream backend { #创建集群,名称为backend
server 192.168.99.100:22; #后端SSH服务器IP和端口
server 192.168.99.200:22;
}
server { #调用集群
listen 12345; #Nginx代理监听的端口,可以自己定义
proxy_pass backend; #调用backend集群
}
}
http {
.. ..
}
3、启动服务
/usr/local/nginx/sbin/nginx
自定义报错页面
HTTP常见状态码列表:
200 正常
301 & 302 重定向
400 请求语法错误
401 访问被拒绝
403 禁止访问
404 资源找不到
414 请求URI头部太长
500 服务器内部错误
502 代理服务器无法正常获取下一个服务器正常的应答
vim conf/nginx.conf
...
charset utf-8; #仅在需要中文时修改该选项,可以识别中文
...
error_page 404 /404.html; #当网站发生404报错时,给用户看的页面
.. ..
echo "抱歉!您访问的页面不存在呢?" > html/404.html
#重置服务
/usr/local/nginx/sbin/nginx -s reload
查看nginx服务状态信息
--with-http_stub_status_module开启status状态页面
tar -xf nginx-1.22.1.tar.gz
cd nginx-1.22.1/
yum -y install gcc make pcre-devel openssl-devel
./configure --with-stream --with-http_stub_status_module
make && make install
修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
....
server {
listen 80;
server_name localhost;
location /status { #定义状态页面
stub_status on;
}
charset utf-8;
....
curl 192.168.99.5/status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
说明:
Active connections:当前活动的连接数量,有多少人访问网站
Accepts:已经接受客户端的连接总数量,有多少人曾经来过
Handled:已经处理客户端的连接总数量
Requests:客户端发送的请求数量
Reading:当前服务器正在读取客户端请求头的数量,请求头:客户现在正在发的请求,要看什么页面,要求服务器传过去
Writing:当前服务器正在写响应信息的数量,指服务器正在给客户回应信息
Waiting:当前多少客户端在等待服务器的响应,
如果想要只允许自己访问,看到nginx的状态信息,其他人不能看到,可以做以下配置
vim /usr/local/nginx/conf/nginx.conf
....
server {
listen 80;
server_name localhost;
location /status { #定义状态页面
stub_status on;
allow 192.168.99.5; #允许99.5访问
deny all; #其他人全部拒绝
}
charset utf-8;
....
优化Nginx并发量
#优化前使用ab高并发测试,使用web1主机作为海量客户,访问proxy主机
ab -n 100 -c 100 http://192.168.99.5/ #-n任务量,-c是连接数
#优化Linux内核参数(最大文件数量)
ulimit -n #查看最大文件数量
1024
ulimit -n 100000 #临时设置最大文件数量
#优化后测试服务器并发量,成功
ab -n 2000 -c 2000 http://192.168.99.5/
#永久设置最大文件数量
vim /etc/security/limits.conf
.. ..
* soft nofile 100000
* hard nofile 100000
# End of file
修改Nginx配置文件,增加并发量
vim /usr/local/nginx/conf/nginx.conf
.. ..
#user nobody;
worker_processes 2; #与CPU核心数量一致
.. ..
events {
worker_connections 50000;
}
.. ..
优化Nginx数据包头缓存,支持超长地址
#优化前,使用脚本测试超长头部请求是否能获得响应,默认情况下nginx无法支持长地址栏,会报414错误
vim /root/lnmp_soft/buffer.sh
#!/bin/bash
URL=http://192.168.99.5/index.html?
for i in {1..5000}
do
URL=${URL}v$i=$i
done
curl $URL #经过5000次循环后,生成一个超长的URL地址
#执行脚本报错
./buffer.sh
<html>
<head><title>414 Request-URI Too Large</title></head>
<body>
<center><h1>414 Request-URI Too Large</h1></center> #访问失败
<hr><center>nginx/1.22.1</center>
</body>
</html>
#修改Nginx配置文件,增加数据包头部缓存大小
cd /usr/local/nginx
cp conf/nginx.conf.default conf/nginx.conf #还原配置文件
vim conf/nginx.conf
.. ..
http {
client_header_buffer_size 200k; #添加,请求包头信息的缓存大小
large_client_header_buffers 4 200k; #添加,大请求包头部信息的缓存个数与容量
include mime.types;
default_type application/octet-stream;
.. ..
/usr/local/nginx/sbin/nginx -s reload
#优化后,使用脚本测试超长头部请求是否能获得响应
/root/lnmp_soft/buffer.sh #成功
修改Nginx配置文件,定义对静态页面的缓存时间
vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location ~* \.(jpg|txt|png|html)$ { #新添加
expires 30d; #新添加,定义客户端缓存时间为30天
} #新添加
.. ..
/usr/local/nginx/sbin/nginx -s reload