nginx 常用全局变量
$uri: 当前请求的uri,不带参数 $request_uri: 请求的uri,带完整参数 $host: http请求报文中host首部,如果没有则以处理此请求的虚拟主机的主机名代替 $hostname: nginx服务运行在主机的主机名 $remote_addr: 客户端IP $remote_port: 客户端端口 $remote_user: 使用用户认证时客户端用户输入的用户名 $request_filename: 用户请求中的URI经过本地root或alias转换后映射的本地文件路径 $request_method: 请求方法, GET POST PUT $server_addr: 服务器地址 $server_name: 服务器名称 $server_port: 服务器端口 $server_protocol: 服务器向客户端发送响应时的协议, 如http/1.1 http/1.0 $scheme:在请求中使用scheme, 如http://xxx.com中的http $http_HEADER: 匹配请求报文中指定的HEADER $http_host: 匹配请求报文中的host首部 $document_root: 当前请求映射到的root配置
安装tbnginx源码编译安装: 大型外呼软件 下载到/opt/下 1。 下载nginx 所需编译环境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y 2. 下载nginx源码包 百度搜索淘宝nginx 即可找到nginx下载地址 wget -c http://tengine.taobao.org/download/tengine-2.3.1.tar.gz 3. 解压源码包 tar -zxvf tengine-2.3.1.tar.gz 4 进入源码文件 ./cofigure --profix=/opt/tengine231 make && make install 5 配置环境变量 编辑 vim /etc/profile PATH = '' 或者 软连接设置都可以 6 nginx 就启动了 占用80端口 7 ps -ef 或者 netstat -tunlp 查看是否运行
nginx的目录结构:
- conf 存放nginx所有配置文件的目录,主要nginx.conf
- html 存放nginx默认站点的目录,如index.html、error.html等
- logs 存放nginx默认日志的目录,如error.log access.log
- sbin 存放nginx主命令的目录,sbin/nginx
-s signal : send signal to a master process: stop, quit, reopen, reload nginx 的启动 nginx nginx -s reload 平滑重启 nignx -s stop 停止服务 nginx -s quit 退出服务 nginx -s reopen 重新打开服务
nginx 配置:
user www; #Nginx进程所使用的用户 worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或auto) error_log /log/nginx/error.log #Nginx错误日志存放路径 pid /var/run/nginx.pid #Nginx服务运行后产生的pid进程号 ------------------------- events事件模块 events { worker_connections //每个worker进程支持的最大连接数 最好是65535 use epool; //事件驱动模型, epoll默认 # epool高可用i/o模型 } ------------------------------------ 主要的: http内核模块 //公共的配置定义在http{} http { //http层开始 ... # 配置日志(全局) log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main; //使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机) 'server' { listen 80; //监听端口, 默认80 server_name localhost; //提供服务的域名或主机名 access_log host.access.log //访问日志 //控制网站访问路径 'location' / { root /usr/share/nginx/html; //存放网站代码路径 index index.html index.htm; //服务器返回的默认页面文件 } //指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton error_page 500 502 503 504 /50x.html; } ... //第二个虚拟主机配置 'server' { ... } include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件 } //http层结束 -----------------------
虚拟主机
基于端口的虚拟主机(监听不同的端口) 通过不同的端口来区分不同的虚拟主机,一般用作企业内部网站,不对外直接提供服务的后台,例如www.pythonav.cn:9000 基于域名的虚拟主机(server_name 域名) 通过不同的域名区分不同的虚拟主机,是企业应用最广的虚拟主机。 基于IP的虚拟主机(server_name IP地址) 通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定VIP
检测状态:
location /status { #开启nginx状态功能 stub_status on; }
记得平滑重启
压测
通过ab压测命令检测 yum -y install httpd-tools -n requests #执行的请求数,即一共发起多少请求。 -c concurrency #请求并发数。 -k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。 ab -kc 1000 -n 100000 http://192.168.119.10/
日志:
控制日志的参数 log_format 记录日志的格式,可定义多种格式 accsss_log 指定日志文件的路径以及格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
对应参数解析:
$remote_addr 记录客户端ip $remote_user 远程用户,没有就是 “-” $time_local 对应[14/Aug/2018:18:46:52 +0800] $request 对应请求信息"GET /favicon.ico HTTP/1.1" $status 状态码 $body_bytes_sent 571字节 请求体的大小 $http_referer 对应“-” 由于是直接输入浏览器就是 - $http_user_agent 客户端身份信息 $http_x_forwarded_for 记录客户端的来源真实ip 97.64.34.118
日志格式配置定义
log_format是日志关键字参数,不能变
main是日志格式指定的标签,记录日志时通过main标签选择指定的格式。
限制ip或ip段访问 禁止访问/av/底下的资源 location /av { deny 122.71.240.254; #alias /opt/nginx1-12/html/av; allow 10.1.1.0/16; }
nginx 匹配优先级:
匹配符 匹配规则 优先级 = 精确匹配 1 ^~ 以某个字符串开头 2 ~ 区分大小写的正则匹配 3 ~* 不区分大小写的正则匹配 4 !~ 区分大小写不匹配的正则 5 !~* 不区分大小写不匹配的正则 6 / 通用匹配,任何请求都会匹配到 7
nginx语法之root和alias区别实战
nginx指定文件路径有root和alias两种方法 区别在方法和作用域: 方法: root 语法 root 路径; 默认值 root html; 配置块 http{} server {} location{} alias 语法: alias 路径 配置块 location{} root和alias区别在nginx如何解释location后面的url,这会使得两者分别以不同的方式讲请求映射到服务器文件上 root参数是root路径+location位置 root实例: location ^~ /av { root /data/av; 注意这里可有可无结尾的 / } 请求url是pythonav.cn/av/index.html时 web服务器会返回服务器上的/data/av/av/index.html root实例2: location ~* .*.(jpg|gif|png|js|css)$ { # 不区分大小写 root /data/av/; } 请求url是pythonav.cn/girl.gif时 web服务器会返回服务器上的/data/av/girl.gif alias实例: alias参数是使用alias路径替换location路径 alias是一个目录的别名 注意alias必须有 "/" 结束! alias只能位于location块中 请求url是pythonav.cn/av/index.html时 location ^~ /av { alias /data/static/; }
web服务器会返回服务器上的/data/static/index.html
https://www.xuliangwei.com/bgx/1005.html
https://github.com/baishancloud/nginx-development-guide/blob/master/zh.md