nignx优化

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
.. ..
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值