Nginx安装

环境调试确认

  1. 系统网络
  2. yum可用yum list|grep gcc
  3. 关闭iptables规则iptables -L;iptables -F;iptables -t nat -L;iptables -t nat -F
  4. selinux停用getenforce; setenforce 0;
  5. 安装yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
  6. yum -y install wget httpd-tools vim
  7. 初始化目录cd /opt; mkdir app download logs work backup

优势

  1. IO多路复用epoll
  2. 轻量级
  3. CPU亲和
  4. sendfile

官网yum安装

RHEL/CentOS

常用命令:

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 配置的情况下匹配顺序为:精确匹配  >  前缀匹配 (最长匹配原则) >  正则匹配 (顺序优先原则) >  普通匹配 (最长匹配原则) >  通用匹配

最长匹配原则: 前缀匹配 和 普通匹配 时,如果 多条Location有包含关系 时,按 最大匹配原则进行匹配 ;比如在 普通匹配 : location /dir01  与  location /dir01/dir02 ,如有请求; http://localhost/dir01/dir02/file,则将`最终匹配到 location /dir01/dir02`

顺序优先原则:只有 正则匹配 才有 顺序优先 这种规则;一个 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 , 因为以上规则都不匹配 ;
示例
实际使用中, 至少有三个常用匹配规则 定义,如下:
直接匹配根网站( = / )
# 直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理。
# 这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {   # 注意,这里是 =/  优先级最高
    proxy_pass http://tomcat:8080/index
}
 
静态文件处理
# 第二个必选规则是处理静态文件请求,这是 nginx 作为 http 服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
 
通用的默认处理
# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
# 非静态文件请求就默认是动态请求,自己根据实际把握
# 毕竟目前的一些框架的流行,带.php、.jsp后缀的情况很少了
location / {
    proxy_pass http://tomcat:8080/
}
命中哪条Location
在nginx.conf中增加配置
location ~ .*.jpg {
    return "200" "A";   # return HTTP_STATUS_CODE  String
                        # 这个意思为 返回 HTTP状态为200  内容为字符串A 的响应
}
 
location ~ /dbabook/.*.jpg {
    return "200" "B";
}
root 和 alias 的指令都是和目录相关
root指令
server_name www.test.com;
location /img/ {
    root /var/www/image;
}
当用户访问 www.test.com/img/logo.png 时,nginx会去 /var/www/image/img/ 下找 logo.png 文件。
 
alias指令
server_name www.test.com;
location /img/ {
    alias /var/www/image/;
}
实际上,当用户访问 www.test.com/img/logo.png 时,nginx会去 /var/www/image/ 下找 logo.png 文件。
 
注意:alias后面必须要用“/”结束,否则会找不到文件的
root 则是 最上层目录 (根目录)的定义;请求的URI会拼接到${root}后面
alias 是一个目录的 别名
原文地址:https://www.cnblogs.com/bky-lzw/p/12643182.html