nginx 学习 不断更新

时间:2023-03-09 19:37:56
nginx 学习 不断更新

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