返回顶部

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";
}

 

 

  

 

posted @ 2020-02-06 20:30  Crazymagic  阅读(168)  评论(0编辑  收藏  举报