nginx 常见问题
相同server_name 多个虚拟主机优先级访问
server1.conf
#server1 server { listen 80 server_name testserver1 www.applelife.xyz; loaction { ... root /opt/app/code1 } }
server2.conf
#server2 server { listen 80 server_name testserver2 www.applelife.xyz; loaction { ... root /opt/app/code2 } }
server3.conf
#server2 server { listen 80 server_name testserver3 www.applelife.xyz; loaction { ... root /opt/app/code3 } }
对于相同的serverName,可以运行,但会出现警告, nginx会优先读取到的配置文件
location匹配的优先级
= 进行普通字符精确匹配,即使完全匹配 较高 ^~ 表示普通匹配,使用前缀匹配 ~\~* 表示执行一个正则匹配() 优先级: 完全匹配 > 前缀匹配 > 普通正则匹配 //示例 #完全匹配 http://www.applelife.com/code1/ location = /code1/ { rewrite ^(.*)$ /code1/index.html break; } #正则匹配 location ~ /code.* { rewrite ^(.*)$ /code2/index.html bradk; } #前缀匹配 location ^~code { rewrite ^(.*)$ /code3/index.html break; }
try_files的使用
按顺序检查文件是否存在,缓存的场景
#先在本地查找该文件 ,没有再加一个/ 的路径下查找 location / { try_files $uri $uri/ /index.php; } //示例 在目录中没哟找到该文件,将会转到 @java_page location location / { root /opt/app/code/cache; try_files $uri @java_page; } location @java_page { proxy_pass http://127.0.0.1:9090; }
@引用
访问127.0.0.1/json.html时,回去/opt/app/code/cache下找json.html文件,如果不存在,再去访问@java_page
alias 和 root的区别
root配置
如果有一个请求 http://www.applelife.xyz/request_path/image/cat.png location /request_path/image/ { root /local_path/image/; } //实际的请求 /lcoal/_path/iamge/request_path/image/cat.png
alias配置
location /request_path/image/ { alias /local_path/image/; } //实际请求路径 /local_path/image/cat.png
传递用户的真实的IP
nginx常见错误码
nginx:413 Request Entity Too Large? 用户上传文件限制 client_max_body_size 502 bad gateway? 后端服务没有响应,tomcat关闭等 504 Gateway timeout ? 后端服务执行超时等
ab接口压力测试工具
//安装工具 yum install httpd-tools //使用 ab -n 2000 -c 2 http://127.0.0.1/index.html -n 总的请求数 -c 并发数 -k 是否开启长连接
文件句柄
Linux\Unix一切皆文件,文件句柄就是一个索引.
-
系统全局性修改
-
用户局部性修改
-
进程局部性修改
全局修改:
#编辑文件 vim /etc/security/limits.conf #root 只是针对root这个用户来限制,soft 只是发提醒,操作系统不会强制限制,一般的站点设置为一万左右就ok了 root soft nofile 65535 root hard nofile 65535 # *代表通配符 所有的用户 * soft nofile 25535 * hard nofile 25535
针对进程
vim /etc/nginx/nginx.conf #针对 nginx进程 句柄的文件限制 worker_rlimit_nofile 65535; events { user epoll; worker_connections 10240; } http { include /etc/nginx/mime.types; default_type application/octet-stream; charset utf-8; }
CPU亲和
把进程通常不会在处理器之间频繁迁移进程迁移的频率小,减少性能损耗.
-
cat /proc/cpuinfo|grep “processor”|wc -l :总计=物理核数*每核几芯
-
cat /proc/cpuinfo|grep “physical id”|sort|uniq|wc -l :cpu物理核数
-
cat /proc/cpuinfo|grep “cpu cores”|uniq :每核几芯
//查看物理cpu cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l //查看核心 cat /proc/cpuinfo|grep "cpu cores"|uniq //详细查看 输入top之后按键 1 top //示例 通用配置 #nginx 普通用户,一般以普通用户来跑 user nginx; #当前启动的worker进程,官方建议是与系统核心数一致 worker_processes 16; #方式一, 第一个work进程绑定第一个cpu核心,第二个work进程绑定到第二个cpu核心,依次内推 直到弟16个 #wokrer_cpu_affinity 0000000000000000 0000000000000001 0000000000000010 0000000000000100 ... 1000000000000000 #方式二,当 worker_processes 2 时,表明 第一work进程可以绑定第 2 4 6 8 10 12 14 16 核心,那么第二work进程就绑定 奇数核心 #worker_cpu_affinity 1010101010101010 0101010101010101; #方式三,就是自动分配绑定 worker_cpu_affinity auto; #日志级别 error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; #针对 nginx 句柄的文件限制 worker_rlimit_nofile 35535; #事件模型 events { #使用epoll内核模型 user epoll; #每一个进程可以处理多少个连接 worker_connections 10240; } http { include /etc/nginx/mime.types; default_type application/octet-stream; charset utf-8; #日志打印信息 log_format main '#remote_addr'; #请求日志 access_log /var/log/nginx/access.log main; #access off; #静态资源处理 sendfile on; #数据高效,不及时传递 #tcp_nopush on; #及时不高效传递 #tcp_nodeny on; keepalive_timeout 65; gzip on; #对ie6 以下的不进行压缩 gzip_disable "MSIE [1-6]\."; gzip_http_version 1.1; } 查看 核心绑定的nginx work进程 ps -eo pid,args,psr | grep [n]ginx
nginx 正则获取location中设置变量
location ~ /zhangbiao/(?<pk>\d+)/ { add_header Content-Type "text/plain;charset=utf-8"; return 200 "zhang$pk"; }