环境调试确认
- 系统网络
- yum可用yum list|grep gcc
- 关闭iptables规则iptables -L;iptables -F;iptables -t nat -L;iptables -t nat -F
- selinux停用getenforce; setenforce 0;
- 安装yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
- yum -y install wget httpd-tools vim
- 初始化目录cd /opt; mkdir app download logs work backup
优势
- IO多路复用epoll
- 轻量级
- CPU亲和
- sendfile
官网yum安装
常用命令:
nginx -v:版本号
nginx -V:当前nginx编译信息
rpm -ql nginx:nginx相关文件
tail -f /var/log/nginx/error.log:查看错误日志
nginx -t -c /etc//nginx/nginx.conf:检查配置文件正确与否
nginx -s reload -c /etc//nginx/nginx.conf:重载nginx配置信息
ps -aux | grep nginx:查看运行情况
安装路径
nginx日志轮转,用于logrotate服务的日志切割
/etc/logrotate.d/nginx
nginx主配置文件
/etc/nginx
/etc/nginx/nginx.conf
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
cgi配置相关、fastcgi配置
/etc/nginx/fastcgi_params
/etc/nginx/uwsgi_params
/etc/nginx/scgi_params
编码转换映射转换文件
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/win-utf
设置http协议的Content-Type与扩展名对应关系
/etc/nginx/mime.types
用于配置出系统守护进程管理器管理方式
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
nginx模块目录
/usr/lib64/nginx/modules
/etc/nginx/modules
nginx服务的启动管理的终端命令
/usr/sbin/nginx
/usr/sbin/nginx-debug
手册和帮助文档
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
nginx的缓存目录
/var/cache/nginx
nginx的日志目录
/var/log/nginx
安装编译参数
安装目的目录或路径
--prefix=/etc/nginx
--sbin-path=/usr/sbin/nginx
--modules-path=/usr/lib64/nginx/modules
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log:记录错误日志文件。
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx.pid:记录 nginx 启动后获取到的系统进程号文件位置, 千万不要修改,启动脚本等都依赖这个文件
--lock-path=/var/run/nginx.lock
执行对应模块时,nginx所保留的临时性文件
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
设定进程启动的用户或用户组
--user=nginx:指定 nginx 工作进程的启动用户,为了安全我们强制指定使用 nginx 用户。
--group=nginx
设置额外的参数将被添加到CFLAGS变量
--with-cc-opt=parameters
设置附加的参数,链接系统库
--with-ld-opt=parameters
命令 curl使用
将请求响应的信息执行一个null设备
curl -v http://www.baidu.com >/dev/null
日志类型
日志模块:ngx_http_log_module,log_format
error.log:记录nginx处理http请求或nginx服务的错误状态
access.log:每次http请求nginx的访问状态
#nginx日志定义格式
log_format main '$time_local ^A $remote_addr ^A $request_method '
^A '$request_uri ^A $uri ^A $request_time '
^A '$status ^A $body_bytes_sent '
^A '$geoip2_data_country_name ^A $geoip2_data_subdivisions_name ^A $geoip2_data_city_name '
^A '$http_referer ^A $upstream_addr ^A $upstream_response_time '
^A '$http_user_agent ^A $http_x_forwarded_for';
- $time_local:本地时间
- $remote_addr:请求客户端IP地址
- $request_method:请求方法
- $request_uri:请求的URL,不带有请求的参数
- $uri:请求的URL,带有请求的参数
- $request_time:请求处理时间,即响应时间
- $status:返回状态
- $body_bytes_sent:发送body大小
- $geoip2_data_country_name:请求所属的国家
- $geoip2_data_subdivisions_name:请求所属的省份或地区
- $geoip2_data_city_name:请求所属的城市
- $http_referer:请求来自于何处,例如从百度跳转过来
- $upstream_addr:请求转发的后端服务器地址
- $upstream_response_time:后端服务器响应的时间
- $http_user_agent:访问客户端信息,可以获取到请求浏览器版本信息等
- $http_x_forwarded_for:请求经过的代理信息
Nginx配置文件结构
http层级包含 server block 和 upstream block , server block 中包含location block。
Http General Config :控制 nginx http 处理的所有核心特性
upstream block :定义反向代理服务器 upstream 信息
server层 : server 是一个 host 抽象。
location层 :定义需要反向代理的 url 。
每一个 block 中包含多个指令(例如 proxy_connect_timeout 75s; ),指令可以存在于多个层级,在这种情况下,子block会继承父block的配置,同时如果子block配置了与父block不同的指令,则会覆盖掉父block的配置。指令的格式是“指令名 参数1 参数2 … 参数N;”,注意参数间可用任意数量空格分隔,最后要加 分号 。
location [=|~|~*|^~] /uri/ { … }
模式 | 类型 | 含义 |
location = /uri | 精确匹配 | = 表示精确匹配,只有完全匹配上才能生效 |
location ^~ /uri | 前缀匹配 | ^~ 开头对URL路径进行前缀匹配,并且在正则之前 |
location ~ pattern | 正则匹配 | 表示 区分大小写 的正则匹配 |
location ~* pattern | 正则匹配 | 表示 不 区分大小写 的正则匹配 |
location /uri | 普通匹配 | 不带任何修饰符,优先级在正则匹配之后 |
location / | 通用匹配 | / 默认匹配 任何未匹配到其它location的请求都会匹配到,相当于switch中的default |
匹配优先级
多个 location 配置的情况下匹配顺序为:精确匹配 > 前缀匹配 (最长匹配原则) > 正则匹配 (顺序优先原则) > 普通匹配 (最长匹配原则) > 通用匹配
顺序优先原则:只有 正则匹配 才有 顺序优先 这种规则;一个 URI 可能会 命中多个正则表达式 ;比如nginx.conf中先定义了 location ~ .*.jpg ,后定义了 location ~ /img/.*.jpg ,假设访问 URI 是 /img/a.jpg ,即使看上去后面的匹配度更高,但是 由于定义的顺序关系,先匹配了location ~ /img/.*.jpg ;
有如下匹配规则: location = / { echo "规则A"; } location = /login { echo "规则B"; } location ^~ /static/ { echo "规则C"; } location ^~ /static/files { echo "规则X"; } location ~ .(gif|jpg|png|js|css)$ { echo "规则D"; } location ~* .png$ { echo "规则E"; } location /img { echo "规则Y"; } location / { echo "规则F"; } 那么产生的效果如下: 访问 根目录 / , 比如 http://localhost/ 将 匹配规则A ; 访问 http://localhost`/login` 将 匹配规则B ,http://localhost`/register` 则 匹配规则F ; 访问 http://localhost`/static`/a.html 将 匹配规则C ; 访问 http://localhost`/static/files`/a.exe 将 匹配规则X ; 虽然规则C也能匹配到,但因为 最大匹配原则 , 最终选中了规则X ; 访问 http://localhost/`a.gif`, http://localhost/`b.png` 将匹配 规则D和规则 E ,但是 规则 D 顺序优先 ,规则 E 不起作用,而 http://localhost`/static`/c.png 则 优先匹配到规则 C ; 访问 http://localhost/`a.PNG` 则 匹配规则 E ,而 不会匹配规则 D ,因为 规则 E 不区分大小写 (~*); 访问 http://localhost`/img/a.gif` 会匹配上 规则D 和 规则Y ,但是因为 正则匹配优先 ,所以选择了D; 访问 http://localhost`/img`/a.tiff 会 匹配上规则Y ; 访问 http://localhost`/`category/id/1111 则最终匹配到 规则 F , 因为以上规则都不匹配 ;