http错误代码
- 200:一切正常
- 401:用户名或密码错误
- 403:禁止访问
- 404:文件不存在
- 500:服务器内部错误
自定义报错页面(404)
vim /usr/local/nginx/conf/nginx.conf
.. ..
charset utf-8; #仅在需要中文时修改该选项
error_page 404 /404.html; #自定义错误页面
.. ..
yum list | grep google | grep chinese #中文包
查看服务器状态信息
编译安装时使用–with-http_stub_status_module开启状态页面模块
1)语法格式:
… …
location /status {
stub_status on;
#allow IP地址;
#deny IP地址;
}
… …
2)使用方法
访问服务器下的/status页面:
Active connections: 1
server accepts handled requests
10 10 30
Reading: 0 Writing: 1 Waiting: 0
//Active connections:当前活动的连接数量。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量。(一般与accepts一致,除非服务器限制了连接数量)。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。
优化nginx并发量
ab -c 2000 -n 2000 http://192.168.4.5/ #压力测试,不做优化会报错,提示打开文件数量过多,最后的"/"必须有
1)更改配置文件
vim /usr/local/nginx/conf/nginx.conf
.. ..
worker_processes auto; //与CPU核心数量一致
events {
worker_connections 65535; //每个worker最大并发连接数
}
.. ..
2)优化linux内核参数
ulimit -a //查看所有属性值
ulimit -Hn 100000 //设置硬限制(临时)
ulimit -Sn 100000 //设置软限制(临时)
vim /etc/security/limits.conf (永久)
* soft nofile 100000
* hard nofile 100000 //4列分别为:用户或组/硬限制或软限制/需要限制的项目/限制的值
3)查看服务器连接数(ss -s)
watch -n 1 ss -s
优化nginx数据包头缓存
vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size 1k; //默认请求包头信息的缓存
large_client_header_buffers 4 4k; //大请求包头部信息的缓存个数与容量
.. ..
}
静态页面缓存
location ~*\.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; #定义客户端缓存时间为30天
}
隐藏nginx版本号
1)nginx:
需要重新编译安装:
tar -xf nginx-1.12.2.tar.gz
cd nginx-1.12.2
vim src/core/nginx.h
//修改#define NGINX_VERSION 后面的值 – 13行
vim src/http/ngx_http_header_filter_module.c
//修改u_char ngx_http_server_string[] –49行
vim src/http/ngx_http_special_response.c –36行
vim /usr/local/nginx/conf/nginx.conf
//在http容器中添加: server_tokens off;
2)php:
vim /etc/php.ini
expose_php = Off
linux内核优化(’/proc/sys/net/ipv4/’ :网络参数 /etc/sysctl.conf)
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
1)tcp_syncookies
tcp_syncookies是一个开关,是否打开SYN Cookie功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN的重试次数。(具体百度)
echo 2 > /proc/sys/net/ipv4/tcp_syncookies #0为不启用,1为压力较大时启用,2为始终启用.此设置为临时,要永久设置:net.ipv4.tcp_syncookies = 1|2|0 > /etc/sysctl.conf
2)tcp_fin_timeout
netstat -na|awk '/^tcp/ {++S[$NF]} END {for(i in S) print i,S[i]}' //查看网络节点的tcp连接状态
如果发现系统有大量的TIME_WAIT状态的连接,通过调整内核参数解决
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30 //表示如果socket由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
sysctl -p //使参数生效
3)tcp_retries
tcp_syn_retries
对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1 决定的)
tcp_synack_retries
对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。(可以根据上面的 tcp_syn_retries 来决定这个值)
tcp_retries1
放弃回应一个TCP连接请求前﹐需要进行多少次重试。RFC 规定最低的数值是3﹐这也是默认值﹐根据RTO的值大约在3秒 – 8分钟之间。(注意:这个值同时还决定进入的syn连接)
tcp_retries2
在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试。默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小)
nignx设置开机自启
方法1:(不推荐使用)
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local //rc.local文件为开机自动执行
chmod +x /etc/rc.local
方法2:
/usr/lib/systemd/system/xxx.service #使用systemctl命令,需要该路径下有一个同名的.service文件
cp crond.service nginx.service #拷贝一个模板
vim /usr/lib/systemd/system/nginx.service #
[Unit]
Description=The Nginx HTTP Server #描述信息
After=network.target remote-fs.target nss-lookup.target #指定nginx在哪些服务之后启动,如network.target等
[Service]
Type=forking #Type为服务的类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx #设置执行systemctl start nginx后需要启动的具体命令.
ExecReload=/usr/local/nginx/sbin/nginx -s reload #设置执行systemctl reload nginx后需要执行的具体命令.
ExecStop=/bin/kill -s QUIT ${MAINPID} #设置执行systemctl stop nginx后需要执行的具体命令.
[Install]
WantedBy=multi-user.target #multi-user.target实际为一个目录,对应/etc/systemd/system/multi-user.target.wants ,可以执行systemctl 指令 multi-user.target 批量操作目录下的所有服务,若要使服务属于一个target,则添加该词条
将nginx添加到systemd管理
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server
#描述信息
After=network.target remote-fs.target nss-lookup.target
#指定启动nginx之前需要其他的其他服务,如network.target等
[Service]
Type=forking
#Type为服务的类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx
#设置执行systemctl start nginx后需要启动的具体命令.
ExecReload=/usr/local/nginx/sbin/nginx -s reload
#设置执行systemctl reload nginx后需要执行的具体命令.
ExecStop=/usr/local/nginx/sbin/nginx -s stop
#设置执行systemctl stop nginx后需要执行的具体命令.
[Install]
WantedBy=multi-user.target
session会话保持
根据源IP保持,代理服务器重写Cookie信息,共享文件系统保存session,使用数据库共享session等等。
升级nginx版本
tar -xf nginx-1.15.8.tar.gz
cd nginx-1.15.8
./configure \
--with-http_ssl_module \
--with-http_stub_status_module
make
mv /usr/local/nginx/sbin/nginx{,.old}
cp objs/nginx /usr/local/nginx/sbin/
make upgrade
日志切割脚本
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)
创建计划任务
服务器内存缓存
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次会被缓存
}
页面压缩处理
cat /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
.. ..
}