nginx如果在生产环境中使用必须要经过优化后才能使用
1.增大并发量 2.防止DDOS攻击 3.报错页面优化 4.nginx状态监控 5.根据系统客户端不同给出页面
1.增大并发访问量
#user nobody;
worker_processes 1; 一共开启1个进程,必与cpu的核心数一致
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; 1个进程开启1024个线程
}
以上是配置文件的开头,定义了nginx开启多少进程,以及一个进程开启多少个线程。
进程:一个程序执行的基本单位,获取一定的计算机资源
线程:一个进程的基本单位,使用进程获取的资源,是CUP调度的基本单位
一个线程处理一个用户请求 因此worker_connections 65536往大写,但进程数必须是cpu的核心数(cat /proc/cpuinfo看)
但是!linux系统内和限制最大打开文件数是1024,所以需要修改内核参数
ulimit -a 查看
open files (-n) 1024
ulimit -Hn 30000 硬限制:不能超过
ulimit -Sn 30000 软限制:可以超过
vim /etc/security/limits.conf 永久生效
* soft nofile 30000
* hard nofile 30000
测试 ab -c 10000 -n 10000 http://服务器ip/
2.防止ddos攻击
dos攻击:拒绝服务攻击,发送大量请求连接服务器,占用服务器带宽直到网络资源耗尽无法正常提供服务
ddos攻击:控制大量机器dos攻击升级版。
limit_req_zone $binary_remote_addr zone=one:10m rate1r/s; #设置防ddos模块10M空间每个ip每秒只接一个请求
server {
listen 80;
server_name localhost;
limit_req zone=one burst=5; #调用(官网上有)
3.报错页面优化
防止客户端访问拼写错误出现http报错过于生硬
error_page 404 /404.html;
将改行去注释并设置个性化提示页面404 414 403 等等都可以
4.nginx监控模块安装
./configure --with-http_stub_status_module
make 不要make install
[root@zabserver nginx-1.12.2]# cp objs/nginx /usr/local/nginx/sbin/nginx
cp:是否覆盖"/usr/local/nginx/sbin/nginx"?y
server {
...
location /status{
stub_status on;
allow IP;
}
}
重启nginx配置
curl http://192.168.4.1/status 即可看到页面
5根据系统客户端不同给出页面
因为windows端和安卓端显示大小所以一个页面常做两个版式
html/index.php html/Android/index.php
这里配置文件中加入地址重写
if ($http_user_agent ~* android) {
rewrite ^/(.*) /Android/$1
}
原理:if匹配包头信息中包含android,请求页面为/10.html,地址重写:为/Android/10.html
html/目录下存windows页面 html/Android/下存android页面